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

时间:2016-04-19 17:53:04

标签: azure azure-active-directory openid-connect adal office365api

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

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

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

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

我查看了已接受的answer here。这基本上是在<graphurl>/me/memberOf读取回复 但是,在我的情况下这是不可接受的。在this reference之后,所有必需的范围都是&#34;管理员同意&#34;作用域。

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

您是否可以通过声明没有管理员同意范围的应用程序来了解Office 365租户中当前的用户管理角色?

注: 此问题或多或少与this one相关,但要求不那么强:我们只想查看当前用户是否为全局管理员。

1 个答案:

答案 0 :(得分:1)

  

您是否可以通过声明没有管理员同意范围的应用程序来了解Office 365租户中当前的用户管理角色?

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

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

添加同意网址参数&#34;提示= admin_consent&#34;:

    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