【问题标题】:Azure AD - Office365APIs. Check if connected user is global admin without admin consent scopesAzure AD - Office365API。检查连接的用户是否是没有管理员同意范围的全局管理员
【发布时间】:2016-08-12 01:50:10
【问题描述】:

我有一个多用户 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 之后,所有必需的范围都是“管理员同意”范围。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    添加同意网址参数“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

    【讨论】:

    • 我知道要访问租户中的角色,我们需要管理员同意,但我希望“检查我是否是管理员”是可能的。授予 admin_consent 对我们来说是不可能的,该应用程序还提供 Office 插件(来自商店)。我们有一个“自下而上的方法”,基本用户可以在没有管理员同意的情况下使用和试用该应用程序。我们可以授予 admin_consent 但仅限于其他功能,这就是为什么我们正在等待动态同意 stackoverflow.com/questions/36720452/…
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多