【发布时间】:2019-06-04 01:35:53
【问题描述】:
设置规范
- .NET 4.5.1 MVC 项目
- 项目包含 .aspx 文件(旧版)
- 目前使用 Azure AD 通过 Cookie 进行身份验证。
- Azure 门户(通过应用注册)配置了“隐式授予 - ID 令牌”和“仅限此组织目录中的帐户”
- 本地 AD 组被推送到 Azure AD。
Startup.cs 配置
// COOKIES: Tells it to use cookies for authentication.
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
CookieManager = new SystemWebCookieManager()
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
{
ClientId = ClientID,
Authority = Authority,
PostLogoutRedirectUri = PostLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications()
{
AuthenticationFailed = PrincipalService.OnAzureAuthenticationFailure,
AuthorizationCodeReceived = (AuthorizationCodeReceivedNotification notification) =>
{
var username = notification.AuthenticationTicket.Identity.Name.Split('#').LastOrDefault();
var emailAddress = notification.AuthenticationTicket.Identity.Claims.FirstOrDefault(x => x.Type.Contains("emailaddress"))?.Value;
Logger.Log(Level.Auth, $"Azure login success! Username: '{username}' Email: '{emailAddress}'.");
return Task.FromResult(0);
}
}
});
问题
在此设置下,我如何检查当前登录的用户是否在特定的 AD 组中?
我的尝试
所有关于执行 Microsoft Graph API 的指南总是提出一个我不知道如何解决的问题(例如 GetAccountsAsync 返回空等)。
我在我们的应用注册清单中添加了以下内容:
"optionalClaims": {
"idToken": [
{
"name": "email",
"source": null,
"essential": true,
"additionalProperties": []
},
{
"name": "groups",
"source": null,
"essential": true,
"additionalProperties": []
}
],
"accessToken": [],
"saml2Token": []
}
email 工作正常,但显然groups 不行,因为它是在黑暗中拍摄的。
【问题讨论】:
-
您还可以通过编辑应用程序的清单(这可以直接在 Azure 门户中完成)并将
"groupMembershipClaims"属性设置为 @987654328 来启用组声明作为应用程序访问令牌的一部分@ 或"SecurityGroup"根据需要。请知道,当用户所属的组数量很多时..您可能不会将所有组作为令牌的一部分,而是一个超额指示符..您可能需要在此类中单独查询组案例 -
好的,所以我将“groupMembershipClaims”设置为“All”,它正在返回 guid。有没有办法让它返回组的名称?
-
查看这篇文章以获得更详细的解释以及从 Microsoft 图形的角度来看的一些其他选项。stackoverflow.com/questions/54149675/…
-
不是 AFAIK .. 您只会返回组 ID 作为声明的一部分.. 而不是组名.. 如果您在组名之后,Microsoft Graph API 可能是您最好的选择(因为那将也可以帮助解决任何超龄情况)
-
如果您要验证用户是否属于某个组,那么无论如何您都应该使用组 ID。名称可能随时更改。我会回答您的问题 @987654330 @.. 另外,在使用 Microsoft Graph API 时,我不太关注您的问题。如果您能详细说明,我或其他人可能会提供帮助
标签: azure-active-directory microsoft-graph-api