Azure AD – 检查安全组成员资格 – (Node.js,护照,Azure Web App)

我们正试图build立一个authentication/授权过程,具有以下要求:

  • 身份validation:由Azure AD完成。
  • 授权:只有特定安全组的成员应该被允许访问该应用程序。

虽然validation部分似乎没有问题,我们被困在授权部分。 我们正在使用快递和护照。

Azure AD一些令牌请求req.headers ,例如

  • X-MS-令牌AAD-访问令牌
  • X-MS-令牌AAD刷新令牌
  • X-MS-令牌AAD-ID令牌

目前,我们正在使用id-token和passport-azure-ad BearerStrategy来检查用户的安全组是否符合允许的安全组。

问题是:一旦id令牌过期,应用程序不会让我们访问应用程序。 假设在护照中设置{session: true}可以解决这个问题,我们启用了会话,但没有运气。

做了一些更多的研究,我发现这篇文章: 如何在Web应用程序中从Azure AD刷新ID令牌? ,它表示只有访问令牌可以被刷新,但ID令牌不能也不应该。

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

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

他们不包含任何点,因此没有通过智威汤逊validation。

导致以下问题:

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

除了在ID令牌中检查组声明之外,还可以调用MicrosoftgraphicsAPI来获取用户是其直接成员的组:

 POST https://graph.microsoft.com/beta/me/getMemberGroups Content-type: application/json Content-length: 33 { "securityEnabledOnly": true } 

或者使用Auzre AD Graph api :

 POST https://graph.windows.net/myorganization/{resource_collection}/{resource_id}/getMemberGroups?api-version Content-Type: application/json { "securityEnabledOnly": false } 

如何将App Service Web,Mobile或API应用程序configuration为代表login用户调用Azure Active DirectorygraphicsAPI。 你可以参考下面的文档,其中显示了详细的步骤:

https://cgillum.tech/2016/03/25/app-service-auth-aad-graph-api/

authentication后,访问令牌可以直接从内置的请求头(x-ms-token-aad-access-token)获取,你可以通过http请求调用graphicsapi来获取组信息。