使用Azure AD ADAL.JS进行组授权 - NodeJS,ReactJS

时间:2017-12-26 12:24:29

标签: node.js azure-active-directory adal

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

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

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

我想做什么:

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

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

我还希望在前端完成同样的事情,即根据组成员身份显示和隐藏菜单项。 (所有访问权限仍在后端检查)

文档稀疏,不太有帮助。 "您应该使用Graph API"。

如何?,如何使用我从前端获得的令牌与图API进行对话?

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

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

我应该在何时,何地以及何时调用图表API?

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

1 个答案:

答案 0 :(得分:2)

在用户登录后从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

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