gpt4 book ai didi

node.js - Azure AD - 检查安全组成员身份 -(Node.js、passport、Azure Web App)

转载 作者:行者123 更新时间:2023-12-02 18:44:59 25 4
gpt4 key购买 nike

我们正在尝试设置满足以下要求的身份验证/授权流程:

  • 身份验证:由 Azure AD 完成。
  • 授权:仅应允许特定安全组的成员访问该应用。

虽然身份验证部分似乎工作没有问题,但我们陷入了授权部分。我们使用 Express 和 Passport。

Azure AD 一些 token 到 req.headers,例如

  • x-ms-token-aad-access-token
  • x-ms-token-aad-refresh-token
  • x-ms-token-aad-id-token

我们目前正在使用 id-token 和 Passport-azure-ad BearerStrategy 来根据允许的安全组检查用户的安全组。

问题是:一旦 id-token 过期,应用程序将不允许我们访问该应用程序。假设在 Passport 中设置 {session: true} 可以解决此问题,我们启用了 session ,但没有成功。

做了更多研究,我发现了这篇文章:How to refresh an ID Token from Azure AD in a Web App? ,其中规定只有访问 token 可以刷新,但 ID token 不能也不应该刷新。

检查 x-ms-token-aad-access-tokenx-ms-token-aad-refresh-token,我们发现它们没有t 具有 JWT 结构,例如

    eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ

它们不包含任何点,因此不会通过 JWT 验证。

导致以下问题:

  • 根据指定允许的安全组检查用户的安全组的正确方法是什么?

最佳答案

您可以在一次调用中通过 Passport 完成此操作,无需对其他 api 层进行额外的调用,因为在线多个帖子中都会建议接缝。使用 v2 端点并定义范围,您可以选择您有权访问的内容以及您在 token 中收到的内容。某些选项(包括安全组)确实需要您修改 list ,请参见下文。

在您的 Azure Active Directory 中,转到您正在使用身份验证用户的应用程序注册。在该应用程序注册的 list 中,如果想要包含办公室组等,请将 groupMembershipClaims 从 null 更改为“SecurityGroup”或“All”。

{
"id": "某个 id",
“accessTokenAcceptedVersion”:空,
“allowPublicClient”:假,
"appId": "某个 id",
“应用角色”:[],
“oauth2AllowUrlPathMatching”:假,
"创建日期时间": "2018-11-15T17:49:23Z",
"groupMembershipClaims": "安全组",
“identifierUris”:[......................

然后,它使用组的对象 ID 来填充组字段。

这样你就可以在 req.user._json.groups 处获取数组

   if (req.user._json.groups.indexOf('some-group-Object-ID') > -1) {
//In Group
} else {
//Not in Group
}

关于node.js - Azure AD - 检查安全组成员身份 -(Node.js、passport、Azure Web App),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44462324/

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