在成功获取验证码之后,遵循https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html中的文档。
据我所知,这正是应该如何设置请求:
import request from 'request'
function fetchToken(code: any, clientId: string, clientSecret: string) {
try {
let tokenEndpoint = `https://example.auth.us-east-1.amazoncognito.com/oauth2/token`
const clientIdEncoded = Buffer.from(`${clientId}:${clientSecret}`).toString('base64')
request.post({
url:tokenEndpoint,
headers: {
'Content-Type':'application/x-www-form-urlencoded',
'Authorization':`Basic ${clientIdEncoded}`
},
form: {
code,
'grant_type':'authorization_code',
'client_id':clientId,
'redirect_uri':'http://localhost:3000'
}},
function(err,httpResponse,body){
console.log(httpResponse.statusCode)
//400
console.log(httpResponse.statusMessage)
//Bad Request
if(err) {
console.error(err)
}
console.log(body)
//{"error":"unauthorized_client"}
})
} catch (error) {
console.error(error)
}
}
为什么会得到unauthorized_client
?有没有更简单的方法可以调试它?
编辑:在邮递员中以相同的请求并得到相同的错误进行了测试
答案 0 :(得分:1)
请检查Cognito用户池应用程序是否正在使用密钥。如果您使用密钥创建选项,则必须将其包含在请求的Authorization
标头中。