【问题标题】:How can I test if admin consent has already been given如何测试是否已获得管理员同意
【发布时间】:2021-08-13 19:43:04
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: oauth azure-active-directory multi-tenant microsoft-graph-api


    【解决方案1】:

    tl;博士

    是的,您可以这样做。您需要调用this MS Graph endpoint,并检查the oAuth2PermissionGrant object 是否将consentType 字段设置为AllPrincipals

    一些背景

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

    在每个权限授予中,都有一个字段表示授予的权限级别。对于管理员同意,您将寻找AllPrincipals

    详细步骤

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

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

    委派权限Diretory.Read.AllDirectory.ReadWrite.AllDirectory.AccessAsUser.All,按特权从低到高的顺序排列。

    1. 拨打MS Graph的GET /oAuth2PermissionGrant endpoint

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

    1. 检查consentType 字段的响应。您可能需要枚举所有的授权来寻找值AllPrincipals

    【讨论】:

    • 我认为这些图形调用不需要权限Directory.ReadWrite.All
    • @KurtRiede 你可能是对的,我完全偏离了 Microsoft Graph 的文档。
    • 看起来很有希望,但目前仅在 beta API 中可用。
    • 根据文档,只需要提到的权限之一,例如在被授权的情况下,Directory.Read.All 就足够了。
    • 我们没有关于何时在 Microsoft Graph 中 GA 的 ETA。我们可能会对该 API 进行一些更显着的更改。但是,此处的 AAD Graph API 中提供了相同的功能:msdn.microsoft.com/en-us/library/azure/ad/graph/api/…。在大多数情况下,我们建议人们使用 Microsoft Graph,但对于应用程序模型 API(应用程序、servicePrincipal、oauth2PermissionGrants 等),它仍然是 AAD Graph。
    【解决方案2】:

    恕我直言,自定义实现将是您用例的更好选择

    步骤如下

    1. 用户第一次登录

    2. 您的应用程序/加载项检查内部存储器/数据库中的同意

    3. 找不到同意,这会将用户重定向到consent page in Azure AD

    4. 在用户批准他的管理员访问权限后,我们通常会从 Azure AD 返回响应中的状态,如下所示,

      GET http://localhost/myapp/permissions?tenant=a8990e1f-ff32-408a-9f8e-78d3b9139b95&state=12345&admin_consent=True

    5. 应用程序现在将管理员同意授予状态存储在数据库中。

    6. 如果在以后的某个时间点,应用程序/加载项需要更多权限,只需清除存储的同意值和用户,以便下次登录时注意确保他们同意新的同意。新的同意请求将向 AD 发送额外的范围,然后在同意页面中向用户显示。

    如需了解更多步骤,请点击here

    【讨论】:

    • 到目前为止,我们的应用程序是一个纯客户端单页应用程序,在我们的服务器上没有代码和数据。对于那种情况,似乎没有办法:-(
    猜你喜欢
    • 2020-03-30
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多