移动服务和 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 ...
随机推荐
- Web定时执行某个方法-网页获取
实现该功能用到的是System.Timers.Timer 将定时的方法添加到Global.ascx.cs中 public class Global : System.Web.HttpApplicati ...
- hosts文件的路径
在windows中,hosts文件的路径为:C:\Windows\System32\drivers\etc 在Linux中,hosts文件的路径为:/etc/hosts
- sql 练习(3)
1.打印九九乘法表 ) ,exp)) A, ,exp))B, ,exp))C, ,exp))D, ,exp))E, ,exp))F, ,exp))G, ,exp))H, ,exp))I from ( ...
- java学习之异常笔记
异常处理使用try catch finally throw throws 如果try中有执行到return后, 也会执行finally中的语句之后再跳出方法. 异常是对于某种错误情况的描述,是告诉方法 ...
- JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写
/* * 类的继承和super关键字 * * 软件开发的三大目的: * 可拓展性; * 可维护性; * 可重用性; * * 这里单说下可重用性这一项: * 为了代码复用,复用方式有: * 函数的调用复 ...
- STL模板_智能指针概念
一.智能指针1.类类型对象,在其内部封装了一个普通指针.当智能指针对象因离开作用域而被析构时,其析构函数被执行,通过其内部封装的普通指针,销毁该指针的目标对象,避免内存泄露.2.为了表现出和普通指针一 ...
- Windows上部署Redis
http://www.cnblogs.com/gaobing/p/5026136.html
- ASPから広がり
ASP是动态服务器页面(Active Server Page)外语缩写.[1]是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.ASP的网页文 ...
- SQL Server 储存过程的output 参数
要做的参数的回传一方面要做到有储存过程的配合,再一方面也要有调用方法的配合,也就是说错误的调用方法是没有办法把值回传的. 下面是例子 --1.储存过程方面的配合 create procedure db ...
- 虚拟机的静态内部 IP 地址
这是什么? 借助最新的 PowerShell 版本,您现在能够定义和配置特定的内部 IP 地址,该地址可以静态分配给部署在虚拟网络中的 IaaS 虚拟机.使用此功能,您可以直接为虚拟机配置内部 ...