reactjs - 如何在后端 API 中验证 AzureAD accessToken
问题描述
我只是想知道我们如何在我的例子中验证后端 API 中的天蓝色广告访问令牌,即 Django 休息框架。
考虑一下我有一个单页应用程序或一个本机应用程序和一个完全独立的后端 API(django rest 框架)。在我的情况下,如果我的单页应用程序/本机应用程序想要从后端 API 访问某些数据,并且为了访问 API,用户应该登录后端 API。
所以我的方法是利用 MSAL 库从 SPA/本机应用程序获取访问令牌,然后一旦获取令牌,将该令牌传递给后端 API,对其进行验证,从图形 API 获取用户信息。如果用户存在于数据库中,则登录用户并传递所需的信息。如果用户信息不存在,则创建用户,登录并从 API 传递信息。
所以我的问题是,当我将访问令牌传递给我的后端 api 时,如何验证用户/SPA/本机应用程序传递给后端 API 的令牌是否是有效令牌?
是否只是我们需要使用用户/SPA/native 传递的 accessToken 对图形 API 端点进行 API 调用,如果它能够使用 accessToken 获取用户数据,那么令牌是有效的,或者如果失败,那么 accessToken 是无效的.
这是验证令牌的一般方法还是有更好的方法?请帮忙
解决方案
我已经解决了类似的问题。我没有找到如何直接验证访问令牌,但您可以在后端使用您在 MSAL 客户端获得的令牌调用图形 API。
Node.js 示例:
class Microsoft {
get baseUrl() {
return 'https://graph.microsoft.com/v1.0'
}
async getUserProfile(accessToken) {
const response = await got(`${this.baseUrl}/me`, {
headers: {
'x-li-format': 'json',
Authorization: `Bearer ${accessToken}`,
},
json: true,
})
return response.body
}
// `acessToken` - passed from client
async authorize(accessToken) {
try {
const userProfile = await this.getUserProfile(accessToken)
const email = userProfile.userPrincipalName
// Note: not every MS account has email, so additional validation may be required
const user = await db.users.findOne({ email })
if (user) {
// login logic
} else {
// create user logic
}
} catch (error) {
// If request to graph API fails we know that token wrong or not enough permissions. `error` object may be additionally parsed to get relevant error message. See https://docs.microsoft.com/en-us/graph/errors
throw new Error('401 (Unauthorized)')
}
}
}
推荐阅读
- html - 使用 wkhtmltopdf 对齐项目
- google-cloud-platform - GCP 负载平衡与 API 网关返回 404
- python - 根据条件从数据框中删除行
- javascript - 如何在 Express router.get() 函数中导出本地函数?
- angular - Angular Reactive Forms,不会在传入数据上生成复选框
- powershell - PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令
- mecab - 如何解释 mecab unidic csv 列
- python - 按日期Python对目录进行排序
- python-3.x - 蓝牙广告和扫描
- reactjs - 尝试使用 React 钩子显示单个对象时为 null