我正在使用Serverless Framework开发lambda服务,该服务负责登录Cognito。
const aws_cognito = require('amazon-cognito-identity-js');
const authDetails = new aws_cognito.AuthenticationDetails({
Username: usuario,
Password: password
});
const poolData = {
UserPoolId: XXXXXXXX,
ClientId: XXXXXXX
};
const userPool = new aws_cognito.CognitoUserPool(poolData);
const userData = {
Username: usuario,
Pool: userPool
};
const cognitoUser = new aws_cognito.CognitoUser(userData);
cognitoUser.authenticateUser(authDetails, {
onSuccess: () => {
console.log('OK');
},
onFailure: (err) => {
console.log(err);
}
});
出于商业原因,我需要模拟Cognito生成的UI。系统应支持OAUTH流:“授权码授予”和“隐式授予”。
“隐式授予”工作正常,但是我无法获得“授权码授予”的授权码。 是否可以通过AWS开发工具包获取授权代码?
谢谢!
答案 0 :(得分:-1)
我了解您可以在不使用托管用户界面的情况下实现“隐式流程”,但是您想知道如何实现“授权授权流程”。
您可以在Web应用程序中使用任何HTTP客户端来发送HTTP 向Cognito身份验证端点请求以通过代码授予流程。 这些是REST API端点,并且不需要SDK即可执行 操作。
请参阅以下步骤以了解使用API调用的流程:
1)向AUTHORIZATION端点发出GET请求,以接收XSRF令牌[1]。 发出此请求时,您将需要传递必需的参数。必需的参数是response_type(代码或令牌),client_id和redirect_uri。根据您的用例,由于您使用的是“授权授予流”,因此需要将response_type的值设置为“ code”。 发出此请求后,您将在响应中收到一个Cookie的XSRF令牌。下一步将需要此XSRF令牌。
2)向LOGIN端点发出POST请求以接收令牌[2]。 您需要传递进行授权请求时提到的相同必需参数。 连同所需的参数一起,您可以传递POST正文参数:CSRF令牌,用户名和密码。 提出请求后,您将能够在响应中接收令牌。它还在响应中提供了Cookie,您可以稍后使用该Cookie来请求刷新令牌。
3)向TOKEN端点发出POST请求,以接收刷新令牌[3]。 发出请求时,我们需要传递所需的参数。必需的请求参数是grant_type和client_id。 成功提出请求后,您将在响应中收到一组新的令牌。
============
[1]授权端点:http://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html
[2]登录端点:http://docs.aws.amazon.com/cognito/latest/developerguide/login-endpoint.html
[3]令牌端点:http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html