Azure App object和Service Principal

微服务架构 – 正确的开始

为了把Identity(身份)和Access Management function(访问管理功能)委派给Azure AD,必须向Azure AD tenant注册应用程序。使用Azure AD注册应用程序,实际是为应用程序创建一个身份配置,以使其能够与Azure AD集成。 在Azure门户中注册应用程序时,可以选择是单租户(仅在您的租户中可访问)还是多租户(在其他租户中可访问),并且可以选择设置重定向URI,这是访问令牌(Access Token)被发送到的位置 

当在Portal中注册app时,home tenant会自动创建app instance和service principal。

一,通过UI注册App

登录到Azure Portal中,选择“Azure Active Directory”服务,从Overview选项卡中点击“App registration”:

注册App的页面如下图所示:

1,Supported Account 类型

共有四种类型的Suppored Account:

  • Accounts in this organizational directory only (Microsoft only – Single tenant):只为自己tenant中的用户创建一个app,简称为single-tenant app
  • Accounts in any organizational directory (Any Azure AD directory – Multitenant):任意AD tenant中的用户都能够使用该app,简称为multi-tenant app。
  • Accounts in any organizational directory (Any Azure AD directory – Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox):支持multi-tenant,并支持个人的微软账户(personal Microsoft account)
  • Personal Microsoft accounts only:只为个人微软账户(Personal Microsoft account)使用的app

2,Redirect URI

这个配置项是可选的,成功验证身份后,Azure AD把身份验证的响应(Response)返回到此URI。

3,App Instance

当完成app的注册后,一个App对象的全局唯一实例就创建成功了,该实例位于home tenant 或 directory中,并且该app instance拥有一个GUID,称作App ID 或 Client ID。

可以向Portal中添加Secret或Certificate和Secret Scope,使得App可以工作。

二, Application Object

Azure AD应用程序是由其唯一的应用程序对象定义的,该对象位于应用程序注册所在的Azure AD租户(称为应用程序的“主”租户)中。 应用程序对象用作创建一个或多个服务主体(Service Principal)对象的模板或蓝图。 在使用该应用程序的每个租户中都会创建一个服务主体。与面向对象编程中的class相似,应用程序对象具有一些静态属性,这些属性应用于所有已创建的服务主体(或应用程序实例)。

技术实践丨React Native 项目 Web 端同构

应用程序对象描述了一个应用程序的三个方面:服务如何发出令牌以访问应用程序,应用程序可能需要访问的资源以及应用程序可以采取的操作。

“App registrations” 用于列出和管理home tenant中的app:

三,Service Principal

如果一个实体需要访问由Azure AD租户保护的资源,那么该实体必须由安全主体(security principal)所代表。此要求对用户(用户主体)和应用程序(服务主体)均适用。安全主体定义Azure AD租户中用户/应用程序的访问策略和权限,例如登录期间对用户/应用程序的身份验证以及资源访问期间的授权。

服务主体(service principal)是单个租户或目录中全局应用程序对象的本地表示形式(或应用程序实例)。服务主体是从应用程序对象创建的具体实例,并从该应用程序对象继承某些属性。在使用该应用程序的每个租户中创建一个服务主体,并引用全局唯一的应用程序对象。服务主体对象定义了应用程序可以在特定租户中实际执行的操作,可以访问该应用程序的人员以及该应用程序可以访问的资源。

当一个应用程序被授予访问租户中资源的权限时(注册或同意时),同时创建一个服务主体对象。您还可以使用Azure PowerShell,Azure CLI,Microsoft Graph,Azure门户和其他工具在租户中创建服务主体对象。如果使用门户 UI,那么在注册应用程序时会自动创建服务主体。门户中的Enterprise applications用于列出和管理租户中的服务主体,并可以看到服务主体的权限,用户同意的权限,用户已经同意的权限,登录信息等等。

四,Application 对象和Service Principal之间的关系

应用程序对象是在所有租户中使用的应用程序的全局表示形式,服务主体是在特定租户中使用的本地表示形式。应用程序对象用作模板,从该模板派生通用属性和默认属性以用于创建相应的服务主体对象。 因此,应用程序对象与软件应用程序具有1:1的关系,与其对应的服务主体对象具有1:many的关系。 注意,必须在使用该应用程序的每个租户中创建一个服务主体,使其能够为登录(sign-in)和/或访问由该租户保护的资源建立身份。单租户(single-tenant)的应用程序只有一个服务主体(在其home租户中),该Service Principal在在应用程序注册期间被创建。多租户(multi-tenant)的Web应用程序/ API在每个租户中都会创建一个服务主体,来自该租户的每个用户都使用该服务主体。

注意,对应用程序对象所做的任何更改只会反映到在应用程序的home租户(注册该租户的租户)中的服务主体对象。 对于多租户应用程序,对应用程序对象的更改不会反映在任何消费者租户的服务主体对象中,除非通过“Application Access Panel”把权限删除,并再次授予访问权限。 另请注意,默认情况下,本机应用程序已注册为多租户。

 

 

参考文档:

Microsoft identity platform documentation

Application and service principals

Quickstart: Register an application with the Microsoft identity platform

改进你的c#代码的5个技巧(四)

给TA买糖
共{{data.count}}人
人已赞赏
经验教程

ASP.NET Core错误处理中间件[2]: 开发者异常页面

2021-1-19 10:15:00

经验教程

微服务架构 - 正确的开始

2021-1-19 10:32:00

⚠️
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 momeis6@qq.com 或点击右侧 私信:momeis 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索