如何测试是否已经给出管理员同意

时间:2017-09-22 08:28:42

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

我们正在开发一个Office加载项,使用Azure AD的组织帐户进行身份验证。加载项需要管理员同意。因此,如果管理员已登录,则应指导他表达其管理员同意。

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

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

我们通过将&prompt=admin_consent附加到该网址

来请求管理员同意

问题1.我们如何测试是否已经成功给出了管理员同意,所以我们只需要管理员在他之前没有同意的情况下给予同意吗?

问题2.我们如何检查加载项的更新版本是否现在可能需要更多权限,并告知用户和管理员有关新要求的信息?

2 个答案:

答案 0 :(得分:1)

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

步骤可以是以下

  1. 用户首次登录
  2. 您的应用程序/加载项检查内部存储器/ db
  3. 中的同意
  4. 不会发现同意,这会将用户重定向到consent page in Azure AD
  5. 在用户批准其管理员访问权限后,我们通常会从Azure AD中获取响应中的状态,如下所示:

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

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

  7. 如果在以后的某个时间点,app / add-in需要更多权限,只需清除同意和用户的存储值,以便下次登录时注意确保他们同意新的同意。新的同意请求将向AD发送其他范围,然后AD将在同意页面中向用户显示。
  8. 如果您想详细了解相关步骤,请点击here

答案 1 :(得分:1)

TL;博士

是的,你可以这样做。您需要致电this MS Graph endpoint,并检查the oAuth2PermissionGrant object以查看consentType字段设置为AllPrincipals

一些背景

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

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

详细步骤

  1. 连接您的应用以调用Microsoft Graph。确保它要求所有必需的权限来调用所需的端点。在委派(代表最终用户)或app角色的情况下,这是不同的。
  2. 应用程序角色 Directory.Read.All&amp; Directory.ReadWrite.All

    委派权限 Diretory.Read.AllDirectory.ReadWrite.AllDirectory.AccessAsUser.All按最低优先级排序。

    1. 致电MS Graph的GET /oAuth2PermissionGrant endpoint
    2. 这将返回oAuth2PermissionGrant object,其中包含您要查找的详细信息。

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