使用 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。
我看到使用 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。