编辑人员注释:本文章由 Matthew Henderson撰写

去年 11月,我们发布了
Azure Active Directory (AAD) 预览版作为移动服务身份提供程序。此举旨在为企业开发人员提供简单易用的解决方案,以构建面向员工的移动应用程序。作为起点,使用基本身份验证是一个很好的选择。但在很多情况下,目前的预览版客户需要对各种类型的用户加以区分,以便做出适当的授权决定。基于角色的访问控制
(RBAC) 的思路是为用户可以担任的角色分配权限,从而恰当定义界限来限定某类用户可以执行和不可执行的操作。幸运的是,向 Azure移动服务添加基本
RBAC功能非常简单。本文将为您演示如何实现这一点。

要继续阅读本文后面的内容,您需要注册移动服务预览版以进行 Azure Active Directory集成。如果您想注册,请发送电子邮件至
MobileServices@microsoft.com。

背景

假设我想开发一个仅供销售团队使用的应用程序。要访问该应用程序,用户不仅必须是公司目录中的成员,而且要被分配到销售组。下面我们来看看,为了确保只有经过身份验证的销售团队成员才能访问该应用程序,需要在服务器端添加什么逻辑。(如果您刚刚开始在移动服务中使用
Azure Active Directory 身份验证,您会发现该入门教程很有帮助。)

我们将采用的基本方法是利用 Azure AD租户中用户的安全组成员身份。AAD同时具有角色和组的概念,但在今天的方案中,我们使用的是一个已拥有正确用户成员身份的现有组。我们将通过一个已与
Azure AD租户同步的内部部署 AD租户来管理这个组。使用
O365和 Windows Intune的客户已经证实,通过设置和内部部署
Active Directory目录的同步,将使您拥有强大功能(您甚至可以使用这些租户构建移动服务)。

今天,我要使用的是“密码同步”选项,但实际上支持的方案有很多种。事实上,您可以将
AAD 设置为指向 ADFS,以支持大型混合方案。如果要尝试这些选项,可启动运行
Windows Server 2012 R2 Datacenter 的 Azure VM并安装
Active Directory域服务角色,然后按照目录同步说明进行操作。

创建组

您可以看到,我已在自己的目录中创建了一些用户(Alice、Bob、Carol和
Dave)和一个“Sales”域安全组。Alice和
Bob已经是该组的成员,但 Carol和
Dave尚未加入该组,因此应该没有权限访问我的应用程序。其他一切均为默认值。

连接到 Azure移动服务

现在,我已准备好开始构建我的应用程序后端。在 Azure移动服务中,我们希望在已提供的机制之上使用附加的授权逻辑来保护每个脚本和
API。为了进一步增强安全性,我将每个受保护端点的权限设置为“Only Authenticated Users”。

我希望所构建的逻辑能够在多个脚本中执行,因此我将代码放在移动服务的Git存储库的共享脚本部分。我将脚本命名为
rbac.js。

要确定组成员身份,第一步需要获得对 AADgraph
API的访问权限。此博客文章此示例介绍了如何进行此设置。您可从下面的代码段开始:

获得graph访问令牌后,我们需要调用isMemberOfgraph端点。此操作将检查指定的用户是否是某个给定组的成员,包括可传递的成员身份。我们可从所检查的脚本中获取用户
ID -所有表脚本会显式接收用户对象,而您可以通过访问 request.user从自定义
API获得一个用户对象。另外,我们需要获取一个组 ID,该
ID 可以在管理门户中方便地获得。您可以转到 Azure AD租户,打开组选项卡并选择组,然后从
CONFIGURE选项卡中复制 OBJECT ID。

为了便于使用,我们使用一个好记的名称从共享脚本中导出该值。

接下来,我们要编写一个函数来包装对 AAD isMemberOf端点的调用。如前所述,我们需要刚才获得的用户
ID (userID)和组 ID (groupID)。请求中还需要包含之前获得的访问令牌。

接下来,我们要稍微简化一下编程模型,只需要移动服务的用户对象(通过它可以获得 objectID)和组
ID即可。然后正确对其进行包装,以获得graph令牌并进行调用。请注意,在实际应用中,您可以选择缓存该令牌,而不必每次都提取。该令牌包含一个到期值,通过它可以判断何时应提取新的令牌。

对于共享脚本,需要做的就是这些。接下来,对于要使用 RBAC保护的每个脚本,我只需添加几行代码,然后在回调中执行脚本的工作即可。下面是表读取操作的一个示例:

总结

大功告成了。我们已成功限制只有部分有需要的员工才可以使用该应用程序。现在,您可以开始构建各种
RBAC 方案。如果您需要将某些用户的客户端 UI与其他用户区别开来,一个简单的实现方法是将成员身份检查公布为自定义
API,您可在用户登录后立即执行此检查。

Azure Active Directory正在利用组支持实现一些很棒的功能,并且很多可以直接在管理门户中完成。AAD高级版用户应深入了解全新的自助服务组管理支持

如果您对企业移动应用程序开发感兴趣,建议同时了解一下全新的移动服务.NET后端预览版。该预览版目前尚未内置
AAD 支持,但是不用担心,我们很快便会提供此项支持。

另外再次提醒,如果您对 AAD预览版感兴趣或者有任何疑问,请发送电子邮件与我们联系:mobileservices@microsoft.com

如果您希望我们介绍一些其他的功能或方案,请将反馈意见提交至我们的uservoice网站。

本文翻译自:

http://blogs.msdn.com/b/windowsazure/archive/2014/03/11/roles-based-access-control-in-mobile-services-and-azure-active-directory.aspx

移动服务和 Azure Active Directory 中基于角色的访问控制的更多相关文章

  1. Azure 门户中基于角色的访问控制入门

    面向安全的公司应侧重于向员工提供他们所需的确切权限. 权限过多,可能会向攻击者公开帐户. 权限太少意味着员工无法有效地完成其工作. Azure 基于角色的访问控制 (RBAC) 可通过为 Azure ...

  2. Azure Active Directory中的特权身份管理如何运作?

    [TechTarget中国原创] 用户权限不是平等的.有些用户需要有大量权利和特权——通常这些都是管理员.企业在允许特权用户进行管理以及支持活动时,还需要意识到特权用户也有可能犯错.他们会犯错.他们可 ...

  3. SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory

    SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...

  4. 使用 Azure Active Directory 管理 Azure 中的 HPC Pack 群集

    Microsoft HPC Pack 2016 支持在 Azure 中部署 HPC Pack 群集的管理员将其与 Azure Active Directory (Azure AD) 集成. 请按照本文 ...

  5. 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览

    除经济优势之外,云计算还在可转化为竞争优势的应用程序开发方面提供了更大的灵活性.我们很高兴看到每天创建的新 Windows Azure 订阅超过 1000 个,更令人兴奋的是,有一半客户使用价值更高的 ...

  6. Azure Active Directory document ---reading notes

    微软利用本地活动目录 Windows Server Active Directory 进行身份认证管理方面具有丰富的经验,现在这一优势已延伸基于云平台的Azure Active Directory.可 ...

  7. Azure Active Directory Connect是如何协助管理员工作的?

    TechTarget中国原创] 应用基于云的Microsoft Azure Active Directory,管理员们可以将本地Active Directory整合到Windows Server中.通 ...

  8. 如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用

    如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用 英文原文:https://developer.microsoft.co ...

  9. 简化 Web 应用程序与 Windows Azure Active Directory、ASP.NET 和 Visual Studio 的集成

    大家好! 今天的博文深入讨论我们今天推出的开发人员工具和框架中的一些新功能.我们通过与 ASP.NET 和 Visual Studio 团队合作开发了一些重大的增强功能,让开发人员能够轻松使用 Win ...

随机推荐

  1. eclipse使用技巧---使用正则表达式查找替换

    1,Eclipse ctrl+f 打开查找框2,选中 Regular expressions (正则表达式) 去掉/* */(eclipse)        /\*(.|[\r\n])*?\*/去掉/ ...

  2. English - even though和even if用法解析

    even though和even if的用法区别两者均可用于引导让步状语从句,其细微区别是: 1. even if 引导的从句是往往是假设性的,相当于汉语的“即使”“纵然”“就算”“哪怕”. 如:Th ...

  3. poj2987 Firing

    以前只是A过很简单的最大闭合权像hdu1565之类,完全的最大流模板题.但是都完全不太懂最大闭合权的定义及其用途. 关于最大流的基础知识,大家可以自己网上搜索关键字.有点基础的哥们妹们,推荐看看胡伯涛 ...

  4. Problem G: If We Were a Child Again

    Problem G: If We Were a Child AgainTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solved: 14[Submi ...

  5. Cortex-M3 动态加载二(RWPI数据无关实现)

    上一篇关于动态加载讲述的是M3下面的ropi的实现细节,这一篇则讲述RW段的实现细节以及系统加载RW段的思路,我在M3上根据这个思路可以实现elf的动态加载,当然进一步的可以优化很多东西,还可以研究将 ...

  6. VS Code - Debugger for Chrome

    VS Code - Debugger for Chrome调试JavaScript的两种方式   VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于 ...

  7. Java和Android开发IDE---IntelliJ IDEA使用技巧(转)

    以前一直使用的是Eclipse,听别人介绍说IDEA非常不错,也为了以后转Android studio铺垫下.就开始尝试用idea来开发. 这篇文章主要学习了idea的使用技巧. IDEA 全称 In ...

  8. css vertical-align全解

    CSS 的属性 vertical-align 指定了内联(inline)元素或表格单元格(table-cell)元素的垂直对齐方式.  要记住:vertical-align不影响块级元素中内容的对齐. ...

  9. [VC6 console]调用API获取手机归属地

    为了完成作业,就偷个懒糊了个获取手机归属地的程序,.我原本写的是MFC版本的,但是由于MFC的代码不是很通用,加上我没有学MFC的时候看别人MFC代码只能干瞪眼,看不懂,所以便改成控制台版本的了.但这 ...

  10. xsoup,Jsoup

    Xsoup 0.2.0 Xsoup 的详细介绍:请点这里 Xsoup 的下载地址:请点这里 https://github.com/code4craft/xsoup http://www.oschina ...