[英]OAuth2.0 token post request is responding 401 (invalid_client)
我对 Google OAUth2.0 身份验证非常陌生,因此我的问题听起来很愚蠢。 但是,我被这个问题困扰了很长时间,需要您的意见来解决它。
我在我的应用程序中集成了 Globus 登录。 Globus 登录使用 Google OAuth-2 协议进行身份验证。 根据Globus Auth 开发者指南,我成功地将应用重定向到他们的授权服务,用户可以将他们的凭据进行身份验证,并且应用在成功验证后接收从 Globus Auth 服务器返回的代码。 下一步是将代码发送到 Token 端点以获取访问令牌。 我使用了以下代码:
var querystring = require('querystring');
export const logInGlobus = (payload) => {
let tokenUri = encodeURIComponent(payload.redirect_uri);
let client_id = 'out app client id'
let client_secret = 'client secret generated for authentication'
let cred = btoa(client_secret);
return axios.post('https://auth.globus.org/v2/oauth2/token',
querystring.stringify({
grant_type: 'authorization_code',
code: payload.code,
redirect_uri: tokenUri,
client_id: client_id
}),
{
headers:{
Authorization: 'Basic '+ cred,
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(response => {
return{
res: response,
success: true
}
})
.catch(err => {
return{
res: err,
success: false
}
})
}
我从服务器收到此发布请求的 401 {"error":"invalid_client"} 代码。 我错过了什么?
注意:我试过没有客户端密码、客户端 ID、不编码重定向 URL。 到目前为止没有运气>
如果你给我一些光明,我将非常感谢你的努力。 谢谢你的时间。
====编辑====
附加了来自浏览器控制台的错误
我解决了这个问题。 我不得不将客户端密码放在发布请求的正文中。 以下代码解决了我的问题。
var querystring = require('querystring');
export const logInGlobus = (payload) => {
let client_id = 'app client id'
let client_secret = 'client secret generated for authentication'
return axios.post('https://auth.globus.org/v2/oauth2/token',
querystring.stringify({
grant_type: 'authorization_code',
code: payload.code,
redirect_uri: payload.redirect_uri,
client_id: client_id,
client_secret: client_secret
}),
{
headers:{
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(response => {
return{
res: response,
success: true
}
})
.catch(err => {
return{
res: err,
success: false
}
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.