我有一个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相关,但要求不那么强:我们只想查看当前用户是否为全局管理员。
答案 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。