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相似,应用程序对象具有一些静态属性,这些属性应用于所有已创建的服务主体(或应用程序实例)。
应用程序对象描述了一个应用程序的三个方面:服务如何发出令牌以访问应用程序,应用程序可能需要访问的资源以及应用程序可以采取的操作。
“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
Azure App object和Service Principal的更多相关文章
- 如何将Azure DevOps中的代码发布到Azure App Service中
标题:如何将Azure DevOps中的代码发布到Azure App Service中 作者:Lamond Lu 背景 最近做了几个项目一直在用Azure DevOps和Azure App Servi ...
- 手把手:使用service principal连接Azure Media Service
在简书中查看,请点击我. 关于相关内容解释,请参考docs文档 https://docs.microsoft.com/en-us/azure/media-services/previous/media ...
- Azure登陆的两种常见方式(user 和 service principal登陆)
通过Powershell 登陆Azure(Azure MoonCake为例)一般常见的有两种方式 1. 用户交互式登陆 前提条件:有一个AAD account 此种登陆方式会弹出一个登陆框,让你输入一 ...
- AAD Service Principal获取azure user list (Microsoft Graph API)
本段代码是个通用性很强的sample code,不仅能够操作AAD本身,也能通过Azure Service Principal的授权来访问和控制Azure的订阅资源.(Azure某种程度上能看成是两个 ...
- 改善Azure App Service托管应用程序性能的几个技巧
本文介绍了几个技巧,这些技巧可以改善Azure App Service托管应用程序的性能.其中一些技巧是你现在就可以进行的配置变更, 而其他技巧则可能需要对应用程序进行一些重新设计和重构. 开发者都希 ...
- 【应用服务 App Service】Azure App Service 中如何安装mcrypt - PHP
问题描述 Azure App Service (应用服务)如何安装PHP的扩展 mcrypt(mcrypt 是php里面重要的加密支持扩展库) 准备条件 创建App Service, Runtime ...
- 【应用服务 App Service】在Azure App Service中使用WebSocket - PHP的问题 - 如何使用和调用
问题描述 在Azure App Service中,有对.Net,Java的WebSocket支持的示例代码,但是没有成功的PHP代码. 以下的步骤则是如何基于Azure App Service实现PH ...
- 【应用服务 App Service】当遇见某些域名在Azure App Service中无法解析的错误,可以通过设置指定DNS解析服务器来解决
问题情形 当访问部署在Azure App Service中的应用返回 "The remote name could not be resolved: ''xxxxxx.com'" ...
- 【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
问题描述 C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Ap ...
随机推荐
- js基本数据类型--null和undefined的区别
1. null类型 只有一个值null,逻辑上表示一个空对象的指针,如果要定义一个变量来保存对象,最好将该变量初始化为null,比如let a="",而不要let b这样,其实nu ...
- 自顶向下redis4.0(1)启动
redis4.0的启动流程 目录 redis4.0的启动流程 简介 正文 全局server对象 初始化配置 初始化服务器 事件主循环 参考文献 简介 redis 在接收客户端连接之前,大概做了以下几件 ...
- 多任务-python实现-迭代器相关(2.1.12)
@ 目录 1.需求 2.斐波那契数列演示 3.并不是只有for循环能接收可迭代数据类型,list,tuple也可以 1.需求 类比 早上起来吃包子 1.买1年的包子,放在冰箱,每天拿一个 2.每天下楼 ...
- SQL注入fuzz字典
length Length + handler likeLiKe selectSeleCT sleepSLEEp databaseDATABASe delete having oroR asAs -~ ...
- phpStudy后门分析及复现
参考文章:https://blog.csdn.net/qq_38484285/article/details/101381883 感谢大佬分享!! SSRF漏洞学习终于告一段落,很早就知道phpstu ...
- Centos8自动挂载U盘移动硬盘解决办法
Centos默认是不能识别NTFS文件系统的U盘.移动硬盘的.查阅了很多资料讲到的都是需要安装ntfs-3g安装包. 安装完后每次插入移动存储介质时,都需要手动去挂载. 作为一个做技术的,如果不能解决 ...
- Winform程序及dll打包成一个可执行的exe
使用场景 通常开发的Winform程序,引用了其他类库后,在输出目录下都会产生很多DLL文件,exe执行时必须依赖这些DLL.想要Winform程序只有一个可执行exe文件,又不想打包成安装包,就可以 ...
- mysql数据安全之利用二进制日志mysqlbinlog恢复数据
mysql数据安全之利用二进制日志mysqlbinlog恢复数据 简介:如何利用二进制日志来恢复数据 查看二进制日志文件的内容报错: [root@xdclass-public log_bin]# my ...
- 零基础学习qt4 第七章的第一个例子
#include <QtGui> #include "extensionDlg.h" ExtensionDlg::ExtensionDlg(QWidget *paren ...
- Adnc简介
Adnc是一个轻量级的.Net Core微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权,包含基础的后台管理功能,代码简洁.易上手.学习成本 ...