本文介绍了Azure AD-Office365API。检查连接的用户是否为没有管理员同意范围的全局管理员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

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

我检查了已接受的answer here。这基本上是读取<graphurl>/me/memberOf处的响应然而,在我的情况下,这是不可接受的。在this reference之后,所有必需的作用域都是"管理员同意"作用域。

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

您能提供一种方法来了解Office 365租户中当前的用户管理角色吗?该租户声明了一个没有管理员同意范围的应用程序。

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

推荐答案

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

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

添加同意url参数"Prompt=ADMIN_CONSIGNMENT":

    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

这篇关于Azure AD-Office365API。检查连接的用户是否为没有管理员同意范围的全局管理员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 11:48