node.js - 我得到了 microsoft graph 的身份验证代码,但是当我尝试使用它时,响应是 InvalidAuthenticationToken
问题描述
我正在尝试通过 API 访问 onedrive。我已经设法获得了一个带有 files.readwrite 范围的 acces_token 。然后当我尝试访问https://graph.microsoft.com/v1.0/me。它以错误“InvalidAuthenticationToken”响应。我究竟做错了什么
我尝试了一堆不同的网址,例如“ https://graph.microsoft.com/v1.0/me/drive/root/children ”并搜索了stackoverflow,但没有任何帮助。
router.get('/response', function(req, res, next){
// already got code here.
var code = req.query.code
request.post({
url: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
headers: { 'Content-Type': 'application/x-www-form-urlencoded'},
form: {
client_id: client_id,
redirect_uri: redirect_uri,
client_secret: client_secret,
code: code,
grant_type: 'authorization_code',
},
},function(error, response, body){
if (error){
console.log(error)
}
//so far so good. The access_token from the response looks okay and the
//scope is correct as well
request.get({
url: 'https://graph.microsoft.com/v1.0/me',
headers: {
'Authorization': "Bearer " + JSON.parse(body).access_token,
},
}, function(er, re, bo) {
//this response is an error message
console.log(bo)
});
});
})
我希望收到有关 onedrive 信息的请求,但我收到一条错误消息。
解决方案
您的身份验证流程尚未完成,您返回的代码是身份验证代码,而不是令牌。这是一个非常重要的区别。
oAuth 代码流的第一步是获取代码,您已经这样做了。然后你需要用这个代码“交易”一个实际的代币。为此,您需要使用此代码向服务器发送另一个请求并请求您的令牌。此请求应转到不同的 URL。对于您现在使用的流程,这里有很多深入的解释 https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow
这里是隐式流程,如果您打算使用它:https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow
您可能还想考虑使用 AdalJS 或预览 MSAL.js 库来为您处理大量身份验证,这些是 Microsoft 制作的库。
推荐阅读
- node.js - 如何使用 Telegram bot API 请求用户的实时位置?
- spring - @Autowired 注释不适用于一个 @Controller 类并适用于其他类
- rdf - 在 OWL 中建模类关系
- c - 从 uint8_t 指针转换为 uint32_t 整数编译错误
- python - Django 不加载静态文件 ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)
- java - 加特林 HTTP 代理
- javascript - 基于用户输入的条件渲染
- flutter - TextField 的背景图片 - Flutter
- c++ - C++多级继承thunk对象指针调整
- mysql - 使用超过 1 个字段时,合并多个表的字段返回太多行