gpt4 book ai didi

azure-active-directory - 如何通过 Azure AD 检查用户是否在 AD 组中?

转载 作者:行者123 更新时间:2023-12-05 00:39:46 25 4
gpt4 key购买 nike

设置规范

  • .NET 4.5.1 MVC 项目
  • 项目包含 .aspx 文件(旧版)
  • 目前使用 Azure AD 通过 Cookie 进行身份验证。
  • 使用“隐式授予 - ID token ”和“仅限此组织目录中的帐户”配置 Azure 门户(通过应用注册)
  • 本地 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 返回空等)。

我在我们的应用注册 list 中添加了以下内容:

"optionalClaims": {
"idToken": [
{
"name": "email",
"source": null,
"essential": true,
"additionalProperties": []
},
{
"name": "groups",
"source": null,
"essential": true,
"additionalProperties": []
}
],
"accessToken": [],
"saml2Token": []
}

email 工作正常,但显然 groups 不能,因为它是在黑暗中拍摄的。

最佳答案

1.获取组成员声明作为 token 的一部分

您可以通过编辑应用程序的 list (这可以直接在 Azure 门户中完成)并设置 "groupMembershipClaims" 来启用组声明,作为应用程序访问 token 的一部分。属性(property)到"All""SecurityGroup"根据需要。

<强>2。组 ID 作为声明的一部分返回

一旦应用程序 list 按上述方式更新,您就可以获取组 ID 作为声明的一部分。这是解码的 JWT token 的快速示例

enter image description here

3.限制可以作为 token 的一部分返回的组数

为确保 token 大小不超过 HTTP header 大小限制,Azure AD 限制了它包含在组声明中的 objectId 的数量。如果用户是超过超额限制(SAML token 为 150,JWT token 为 200)的组的成员,则 Azure AD 不会在 token 中发出组声明。相反,它在 token 中包含一个超额声明,指示应用程序查询 Graph API 以检索用户的组成员资格。

4.相关的 Microsoft Graph API

注意:使用 Microsoft Graph API 可能非常强大,因为您可以绕过超额情况以及在需要时获取有关组的所有其他类型的信息(如名称)。在这种特殊情况下,由于目的是验证组成员身份,组 ID 是最佳字段,因为它不会更改,而其他名称(如 name)可以。

Check member groups

如果您已经知道要检查/验证成员资格的群组,这将很有帮助。

 POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/checkMemberGroups 

在请求正文中,您可以提供groupdIds ,即包含要检查成员资格的组的对象 ID 的集合。最多可以指定 20 个组。

     {
"groupIds": [
"fee2c45b-915a-4a64b130f4eb9e75525e",
"4fe90ae065a-478b9400e0a0e1cbd540"
]
}

user: getMemberGroups

如果您还不知道该组并想获取该用户所属的所有组,这将很有帮助。

POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups

这是另一个 related SO Post

关于azure-active-directory - 如何通过 Azure AD 检查用户是否在 AD 组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com