Azure AD - Office365API。检查连接的用户是否是没有管理员同意范围的全局管理员

Azure AD - Office365APIs. Check if connected user is global admin without admin consent scopes

我有一个多租户 Office365 Web 应用程序,它使用授权代码流对用户进行身份验证(我的服务器向 API 发出请求)由 OAUTH/OpenIdConnect 上的 Azure AD 保护。

我们使用 Microsoft.Owin.Security.OpenIdConnect, Version=3.0.0.0 和 Azure Active Directory ADAL.NET 客户端,Microsoft.IdentityModel.Clients.ActiveDirectory, Version=2.19.0.0 跟随 this sample

在我的 Azure AD 应用程序清单中,我仅使用范围未经管理员同意

但是,我想知道当前连接的用户是否是租户的 Office 365 全局管理员。

我检查了已接受的 answer here。这基本上读取了 <graphurl>/me/memberOf 处的响应 但是,在我的情况下这是不可接受的。在 this reference 之后,所有必需的范围都是 "Admin consent" 个范围。

我尝试了不同的方法:使用 System.Web.Security.Roles.GetRolesForUser(),查看 ClaimsPrincipal.Current,最后仔细检查已解析的 JWT,看看是否有关于连接用户的 Office365 角色的信息。都没有成功。

您能否提供一种方法来了解 Office 365 租户中的当前用户管理角色以及声明为没有管理员许可范围的应用程序?

备注: 这个问题或多或少与有关,但要求不那么强烈:我们只想看看当前用户是否是全局管理员。

Can you provide a way to know the current user administration roles within the Office 365 tenants with an application declared with no admin consent scopes?

对于多租户应用程序,访问目录数据需要管理员同意。

但是一旦管理员同意该应用程序,组织内的所有用户都将被允许使用该应用程序(无需同意)。

添加同意url参数"prompt=admin_consent":

    public ActionResult AdminConsentApp()
    {
        string strResource = Request.QueryString["resource"];
        string strRedirectController = Request.QueryString["redirect"];

        string authorizationRequest = String.Format(
            "https://login.windows.net/common/oauth2/authorize?response_type=code&client_id={0}&resource={1}&redirect_uri={2}&prompt={3}",
                Uri.EscapeDataString(SettingsHelper.ClientId),
                Uri.EscapeDataString(strResource),
                Uri.EscapeDataString(String.Format("{0}/{1}", this.Request.Url.GetLeftPart(UriPartial.Authority).ToString(), strRedirectController)),
                Uri.EscapeDataString("admin_consent")
                );

        return new RedirectResult(authorizationRequest);
    }

更多详细信息,您可以参考示例项目O365-WebApp-MultiTenant