某些权限需要管理员同意,然后才能在租户中授予这些权限。 还可以使用管理员同意终结点向整个租户授予权限。
建议:让用户登录到应用
在构建使用管理员许可终结点的应用程序时,应用通常需要一个页面或视图,使管理员能够批准应用的权限。 这一页面可以是此应用登录流程的一部分、应用设置的一部分,也可以是一个专用的“连接”流程。 在很多情况下,只有在用户使用工作或学校 Microsoft 帐户登录后,应用才会显示此“连接”视图。
将用户登录到应用时,可以在要求管理员批准所需权限之前确定其所属组织。 虽然并非绝对必要,但这样做可以帮助你为组织用户创建更直观的体验。
从目录管理员请求权限
当你准备好从组织的管理员请求权限时,您就可以将用户重定向到 Microsoft 标识平台 管理员同意终结点。
https://login.microsoftonline.com/{tenant}/v2.0/adminconsent
?client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https://graph.microsoft.com/Calendars.Read https://graph.microsoft.com/Mail.Send
&redirect_uri=http://localhost/myapp/permissions
&state=12345
| 参数 | 条件 | DESCRIPTION |
|---|---|---|
tenant |
必选 | 要向其请求权限的目录租户。 可以采用 GUID 或友好名称格式提供,也可以使用示例中所示的泛型引用 organizations 。 请勿使用“通用”,因为个人帐户无法提供管理员同意,除非在租户的上下文中。 为了确保与管理租户的个人帐户的兼容性最佳,请尽可能使用租户 ID。 |
client_id |
必选 | Microsoft Entra 管理中心的应用程序(客户端)ID – 分配给应用的应用注册体验。 |
redirect_uri |
必选 | 要向其发送响应以供应用处理的重定向 URI。 必须与在应用注册门户中注册的重定向 URI 之一完全匹配。 |
state |
建议 | 同样随令牌响应返回的请求中所包含的值。 可以是所需的任何内容的字符串。 使用该状态可在身份验证请求出现之前,在应用中编码用户的状态信息,例如用户过去所在的页面或视图。 |
scope |
必选 | 定义应用程序请求的权限集。 这可以是静态的(使用 /.default)或动态作用域。 这可以包括 OIDC 范围 (openid, , profileemail)。 |
此时,Microsoft Entra ID 会要求租户管理员进行登录来完成请求。 系统会要求管理员批准你在参数中 scope 请求的所有权限。 如果使用了静态(/.default)值,它将像 v1.0 管理员同意终结点一样运行,并请求对所需权限(用户和应用)中找到的所有范围请求同意。 若要请求应用权限,必须使用 /.default 该值。 如果不希望管理员在使用 /.default时一直看到管理员同意屏幕中的给定权限,最佳做法是不要将权限置于所需权限部分。 相反,可以使用动态同意在运行时添加想要在许可屏幕中的权限,而不是使用 /.default权限。
成功的响应
如果管理员批准应用的权限,则成功的响应如下所示:
http://localhost/myapp/permissions
?admin_consent=True
&tenant=aaaabbbb-0000-cccc-1111-dddd2222eeee
&scope=https://graph.microsoft.com/Calendars.Read https://graph.microsoft.com/Mail.Send
&state=12345
| 参数 | DESCRIPTION |
|---|---|
tenant |
授予您的应用程序其请求权限的目录租户,其格式为 GUID。 |
state |
请求中包含的一个值,该值也将在令牌响应中返回。 可以是所需的任何内容的字符串。 该状态用于在身份验证请求发生前对应用中用户状态的信息进行编码,例如他们打开的页面或视图。 |
scope |
为应用程序授予访问权限的权限集。 |
admin_consent |
将设置为 True. |
警告
切勿使用参数的tenant 值对用户进行身份验证或授权。 租户 ID 值可由不良参与者更新并发送,以模拟对应用的响应。 这可能会导致应用程序暴露在安全事件中。
错误响应
http://localhost/myapp/permissions
?admin_consent=True
&error=consent_required
&error_description=AADSTS65004%3a+The+resource+owner+or+authorization+server+denied+the+request.%0d%0aTrace+ID%3a+0000aaaa-11bb-cccc-dd22-eeeeee333333%0d%0aCorrelation+ID%3a+8478d534-5b2c-4325-8c2c-51395c342c89%0d%0aTimestamp%3a+2019-09-24+18%3a34%3a26Z
&state=12345
添加到成功响应中看到的参数时,错误参数如下所示。
| 参数 | DESCRIPTION |
|---|---|
error |
可用于分类错误类型并响应错误的错误码字符串。 |
error_description |
可帮助开发人员识别错误的根本原因的特定错误消息。 |
state |
请求中包含的一个值,该值也将在令牌响应中返回。 可以是所需的任何内容的字符串。 该状态用于在身份验证请求发生前对应用中用户状态的信息进行编码,例如他们打开的页面或视图。 |
admin_consent |
将设置为 True 指示此响应发生在管理员同意流中。 |
后续步骤
- 了解如何 将应用转换为多租户
- 了解 授权代码授予流期间 OAuth 2.0 协议层如何支持同意。
- 了解 多租户应用程序如何使用许可框架 实现“用户”和“管理员”同意,从而支持更高级的多层应用程序模式。
- 了解 Microsoft Entra 应用程序许可体验