【问题标题】:Group authorization using Azure AD ADAL.JS - NodeJS, ReactJS使用 Azure AD ADAL.JS - NodeJS、ReactJS 的组授权
【发布时间】:2017-12-27 11:07:01
【问题描述】:

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

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

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

我想做什么:

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

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

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

文档很少而且不是很有帮助。 “你应该使用 Graph API”。

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

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

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

我应该如何、何时何地在此处调用图形 API?

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2016-08-02
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 2014-05-22
      相关资源
      最近更新 更多