oauth - 我如何测试是否已获得管理员同意

我们正在开发一个 Office 加载项,它使用 Azure AD 的组织帐户进行身份验证。加载项需要管理许可。所以如果管理员登录了,应该引导他表达他的管理员同意。

我们正在使用 OAuth 进行身份验证:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=id_token&client_id=<clientId>&redirect_uri=<redirectUri>

我们通过将 &prompt=admin_consent 附加到该 URL 来请求管理员同意

问题 1. 我们如何测试该管理员同意是否已成功给予,因此我们只需要让管理员给予同意,如果他之前没有给予同意?

问题 2。我们如何检查插件的更新版本现在是否需要更多权限并通知用户和管理员有关新要求?

最佳答案

tl;dr

是的,你可以做到这一点。你会想调用this MS Graph endpoint ,并检查 the oAuth2PermissionGrant object consentType 字段设置为 AllPrincipals

一些背景

使用 Microsoft Graph ,您可以确定是否已授予管理员同意。授予管理员同意后,应用程序上会写入 OAuth2.0 权限授予。

在每个权限授予中,都有一个字段指示授予的权限级别。对于 Admin Consent,您需要查找 AllPrincipals

详细步骤

  1. 连接您的应用以调用 Microsoft Graph。确保它请求所有必需的权限来调用所需的端点。这在委托(delegate)(代表最终用户)或应用程序角色的情况下是不同的。

应用角色:Directory.Read.All & Directory.ReadWrite.All

委托(delegate)权限:Diretory.Read.AllDirectory.ReadWrite.All Directory.AccessAsUser.All 按特权从最低到最高的顺序排列。

  1. 调用GET /oAuth2PermissionGrant endpoint MS 图表。

这会返回一个 oAuth2PermissionGrant object包含您要查找的详细信息。

  1. 检查 consentType 字段的响应。您可能需要枚举所有赠款以查找值 AllPrincipals

https://stackoverflow.com/questions/46360206/

相关文章:

python-3.x - Python KafkaConsumer 从时间戳开始消费消息

regex - 如何提取ansible变量中的最后一个数字

apache-kafka - Zookeeper 安装在 Windows 10 上不起作用

php - Laravel - 使用 Query Builder 函数传递变量

c# - 可访问性不一致 : field type is less accessible than

bash - 在 MAC OSX 中比较 Bash 中的两个日期

arrays - 测试值是否在列表/数组中 (Ti-Basic)

typescript - TypeScript 有 toString() 版本吗

regex - RegExp 字符类中的范围乱序

python-2.7 - 如何删除回复键盘( Telegram Bot )