使用 Azure AD ADAL.JS 的组授权 - NodeJS、ReactJS

Group authorization using Azure AD ADAL.JS - NodeJS, ReactJS

我看到使用 ADAL.js 时,由于某些 URL 限制,您无法获得群组成员资格声明。

https://github.com/AzureAD/azure-activedirectory-library-for-js/issues/239

我在前端使用oauth-bearer认证,即前端通过AD登录页面触发登录。 然后客户端将访问令牌传递给后端。

我想做的事情:

我想根据组成员身份过滤后端端点中的一些数据。 例如如果您是 AD 组 "London" 的成员,您应该只会在我们的数据库查询中看到与伦敦相关的内容。

超级简单使用例如Okta 或 Auth0,与 Azure AD 无关。

我也想在前端完成同样的事情,即根据组成员显示和隐藏菜单项。 (所有访问仍在后端进行检查)

文档内容稀少且帮助不大。 "You should use Graph API".

如何?如何使用从前端获得的令牌与图形 api 通信?

这是我的 Node+Express 端点设置:

app.use(
  "/contacts",
  passport.authenticate("oauth-bearer", { session: true }),
  contacts
);

我应该如何、在何处以及何时在此处调用图表 API?

我们的系统非常小,所以我不介意使用会话状态。 我可以在用户登录时获取这些信息吗? 流量应该如何?客户端登录,登录后,调用后端并请求组?

当您在用户登录后从 Azure AD 获取访问令牌时,您可以通过使用访问令牌向 https://graph.microsoft.com/v1.0/me/memberOf 发出 GET 请求来查找用户的组成员身份,如下所示:

function getGroupsOfUser(accessToken, callback) {
  request
   .get('https://graph.microsoft.com/v1.0/me/memberOf')
   .set('Authorization', 'Bearer ' + accessToken)
   .end((err, res) => {
     callback(err, res);
   });
}

此示例假定您使用的是 NPM 包 superagent

并且列出了调用此 API 所需的权限 here