移动服务和 Azure Active Directory 中基于角色的访问控制
去年 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网站。
本文翻译自:
移动服务和 Azure Active Directory 中基于角色的访问控制的更多相关文章
- Azure 门户中基于角色的访问控制入门
面向安全的公司应侧重于向员工提供他们所需的确切权限. 权限过多,可能会向攻击者公开帐户. 权限太少意味着员工无法有效地完成其工作. Azure 基于角色的访问控制 (RBAC) 可通过为 Azure ...
- Azure Active Directory中的特权身份管理如何运作?
[TechTarget中国原创] 用户权限不是平等的.有些用户需要有大量权利和特权——通常这些都是管理员.企业在允许特权用户进行管理以及支持活动时,还需要意识到特权用户也有可能犯错.他们会犯错.他们可 ...
- SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory
SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...
- 使用 Azure Active Directory 管理 Azure 中的 HPC Pack 群集
Microsoft HPC Pack 2016 支持在 Azure 中部署 HPC Pack 群集的管理员将其与 Azure Active Directory (Azure AD) 集成. 请按照本文 ...
- 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览
除经济优势之外,云计算还在可转化为竞争优势的应用程序开发方面提供了更大的灵活性.我们很高兴看到每天创建的新 Windows Azure 订阅超过 1000 个,更令人兴奋的是,有一半客户使用价值更高的 ...
- Azure Active Directory document ---reading notes
微软利用本地活动目录 Windows Server Active Directory 进行身份认证管理方面具有丰富的经验,现在这一优势已延伸基于云平台的Azure Active Directory.可 ...
- Azure Active Directory Connect是如何协助管理员工作的?
TechTarget中国原创] 应用基于云的Microsoft Azure Active Directory,管理员们可以将本地Active Directory整合到Windows Server中.通 ...
- 如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用
如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用 英文原文:https://developer.microsoft.co ...
- 简化 Web 应用程序与 Windows Azure Active Directory、ASP.NET 和 Visual Studio 的集成
大家好! 今天的博文深入讨论我们今天推出的开发人员工具和框架中的一些新功能.我们通过与 ASP.NET 和 Visual Studio 团队合作开发了一些重大的增强功能,让开发人员能够轻松使用 Win ...
随机推荐
- WinForm 控件的布局(Dock属性)的注意点
对于Dock属性,添加控件的顺序会影响它们停驻的方式.例如,如果你对窗体添加控件A,指示其停驻填充(Fill), 然后你对窗体添加控件B并指示其停驻顶部(Top),控件B将覆盖控件A的上部.原因就是控 ...
- ROS的文件系统
这篇博客介绍一下ROS的文件系统的基本概念,用户可以直接在官方网站:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem去查看官方手册. ...
- Linux学习之输入输出重定向
转自:http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html 多谢分享 在了解重定向之前,我们先来看看linux 的文件描述符. ...
- linux使用wget纯命令下载JDK的方法(凑字数)
linux使用wget纯命令下载JDK的方法 linux使用wget纯命令下载JDK的方法 Oracle官网上下载jdk,需要点击accept licence的才能下载,所以一般的直接使用wget下载 ...
- 星际反作弊2.3for-win7-xp-win8-win10
星际反作弊2.3for-win7-xp-win8-win10 下载地址 http://wj800.com/rar/scfzb.zip
- PCRE兼容正则表达式函数
1.preg_grep()函数 函数语法: array preg_grep ( string pattern, array input ) 函数功能: 使用数组input中的元素一一匹配表达式patt ...
- C# async await 例子
private static async void Worker() { Console.Write("main thread id is :{0}",Thread.Current ...
- 文件保护DEP
文件保护DEP数据执行保护(DEP)引起的电脑故障一例 症状:双击桌面上的“我的电脑”.“我的文档”等,explorer.exe重新起动,反复如此,简单说就是“我的电脑”打不开,一双击桌面上就啥都没有 ...
- WPF中如何获取ControlTemplate中的对象
原文 http://www.silverlightchina.net/html/study/WPF/2010/1116/3418.html 先看一段XAML代码: 1 2 3 4 5 6 7 8 9 ...
- 工具类_java 操作cookie
import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;im ...