React 和 Axios 获取 AWS 客户端凭证
React and Axios get AWS client credentials
我正在使用最新版本的 react with axios 并希望从 aws / cognito 获取身份验证令牌。因此我有我的客户和客户的秘密。当我发送 curl 请求时,它按预期工作,但是当我通过 axios 发送请求时,我总是收到状态 405 响应。
我的代码如下所示:
...
axios({
url: 'https://xyz.amazoncognito.com/oauth2/token?grant_type=client_credentials',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'client_id': '***************',
'client_secret': '****************'
'redirect_uri': 'http://localhost:4200'
}
})
.then((response) => {
console.log(response);
}, (error) => {
console.log(error);
});
我没有将 client_id、client_secret 和 redirect_uri 设置到 headers,而是将它们添加到 url 中,例如
...grant_type=client_credentials&client_id=************&client_secret=*************&redirect_uri=http%3A%2F%2Flocalhost%3A4200
同样的结果。任何想法,我做错了什么?顺便说一句:我对所有 api 请求都使用 axios,因此在这种情况下我也想留在 axios。
谢谢和亲切的问候,
巴鲁
您没有正确传递必需的参数。看看这里的例子:
https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
所需的 header 将是:
授权
如果向客户端颁发了机密,则客户端必须通过基本 HTTP 授权在授权 header 中传递其 client_id 和 client_secret。秘密是基本 Base64Encode(client_id:client_secret).
Content-Type
必须始终为 'application/x-www-form-urlencoded'.
其他信息将作为请求参数传递。
也就是说,您不应该在客户端(React 应用程序)存储您的客户端和客户端密码。如果这在客户端上公开,任何人都可以获取您的客户端 ID 和客户端密码并获得 Cognito 令牌。
我正在使用最新版本的 react with axios 并希望从 aws / cognito 获取身份验证令牌。因此我有我的客户和客户的秘密。当我发送 curl 请求时,它按预期工作,但是当我通过 axios 发送请求时,我总是收到状态 405 响应。
我的代码如下所示:
...
axios({
url: 'https://xyz.amazoncognito.com/oauth2/token?grant_type=client_credentials',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'client_id': '***************',
'client_secret': '****************'
'redirect_uri': 'http://localhost:4200'
}
})
.then((response) => {
console.log(response);
}, (error) => {
console.log(error);
});
我没有将 client_id、client_secret 和 redirect_uri 设置到 headers,而是将它们添加到 url 中,例如
...grant_type=client_credentials&client_id=************&client_secret=*************&redirect_uri=http%3A%2F%2Flocalhost%3A4200
同样的结果。任何想法,我做错了什么?顺便说一句:我对所有 api 请求都使用 axios,因此在这种情况下我也想留在 axios。
谢谢和亲切的问候,
巴鲁
您没有正确传递必需的参数。看看这里的例子: https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
所需的 header 将是:
授权 如果向客户端颁发了机密,则客户端必须通过基本 HTTP 授权在授权 header 中传递其 client_id 和 client_secret。秘密是基本 Base64Encode(client_id:client_secret).
Content-Type 必须始终为 'application/x-www-form-urlencoded'.
其他信息将作为请求参数传递。
也就是说,您不应该在客户端(React 应用程序)存储您的客户端和客户端密码。如果这在客户端上公开,任何人都可以获取您的客户端 ID 和客户端密码并获得 Cognito 令牌。