编辑人员注释:本文章由 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. select实现选中跳转

    select选择后直接跳转到其他网站的三种方式     第一种: ************************** <html> <head> <meta http- ...

  2. 玩转kindle paperwhite: 如何越狱,安装强大外挂软件koreader

    NOTICE 1: 在更新kpvbooklet和使用最新版本的koreader(v2013.03-211)时候,会出现pdf文档无法重排的错误.亲测. 如果你是使用的最新版本koreader且出现上述 ...

  3. 删除除了 id 号不同,其他都相同的学生冗余信息

    删除除了 id 号不同,其他都相同的学生冗余信息2.学生表 如下:id 号 学号 姓名 课程编号 课程名称 分数1 2005001 张三 0001 数学 692 2005002 李四 0001 数学 ...

  4. socket(套接字)

    客户端: 创建套接字(socket) 连接服务器(connect) 通信(send,recv或者write,read) 关闭套接字(closesocket) 示例代码: int main(int ar ...

  5. mina、netty消息边界问题(采用换行符)

    在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息.理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次rea ...

  6. php中的require-once

    require_once语句和require语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含. 参见include_once的文档来理解_once的含义,并理解与没 ...

  7. 谷歌日志库GLog 使用说明

    1 引用头文件 加载库 #include <glog/include/logging.h> #pragma comment(lib,"libglog.lib") 2 初 ...

  8. 串的模式匹配——Brute-Force算法

    Brute-Force算法的基本思路为:从目标串s=“s0s1...sn-1”的第一个字符开始和模式串t=“t0t1t2...tn-1”中的第一个字符比较,若相等,则继续逐个比较后续字符: 否则从目标 ...

  9. sublime的20个插件

    SublimeText是一款非常精巧的文本编辑器,适合编写代码.做笔记.写文章.它用户界面十分整洁,功能非同凡响,性能快得出奇.这些非常棒的特性 包括任意跳转(Goto Anything).多重选择( ...

  10. CCNA实验(8) -- PPP & HDLC

    HDLC帧格式与以太帧格式有很大差别,HDLC帧没有源MAC和目的MAC地址.HDLC不能提供验证,缺少对链路保护.Cisco设备与Cisco设备连接,可用HDLC封装.Cisco设备与非Cisco设 ...