使用无服务器框架的 lambda AWS 中的授权代码授予

Posted

技术标签:

【中文标题】使用无服务器框架的 lambda AWS 中的授权代码授予【英文标题】:Authorization code grant in lambda AWS with Serverless Framework 【发布时间】:2019-05-08 21:16:31 【问题描述】:

我正在使用无服务器框架开发 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 SDK获取授权码?

谢谢!

【问题讨论】:

【参考方案1】:

我了解您可以在不使用托管 UI 的情况下实现“隐式流程”,但您想知道如何实现“授权授予流程”。

您可以在 Web 应用程序中使用任何 HTTP 客户端来发送 HTTP 向 Cognito Auth Endpoints 请求通过代码授权流程。 这些是 REST API 端点,也不需要 SDK 来执行 操作。

请参阅以下步骤以了解使用 API 调用的流程:

1) 向 AUTHORIZATION 端点发出 GET 请求以接收 XSRF 令牌 [1]。 在发出此请求时,您将需要传递所需的参数。必需的参数是 response_type(代码或令牌)、client_id 和 redirect_uri。根据您的用例,由于您使用的是“授权授予流程”,因此您需要将 response_type 的值设置为“代码”。 发出此请求后,您将在响应中收到一个 XSRF 令牌作为 Cookie。下一步将需要此 XSRF 令牌。

2) 向 LOGIN 端点发出 POST 请求以接收令牌 [2]。 您需要在发出 AUTHORIZATION 请求时传递相同的必需参数。 除了所需的参数,您还可以传递 POST 正文参数:CSRF 令牌、用户名和密码。 一旦我们提出此请求,您将能够在响应中收到令牌。它还在响应中提供了一个 Cookie,您可以稍后使用它来请求刷新令牌。

3) 向 TOKEN 端点发出 POST 请求以接收刷新令牌[3]。 我们需要在发出请求时传递所需的参数。所需的请求参数是grant_type 和client_id。 一旦您发出成功的请求,您将在响应中收到一组新的 Token。

============

参考资料:

[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

【讨论】:

以上是关于使用无服务器框架的 lambda AWS 中的授权代码授予的主要内容,如果未能解决你的问题,请参考以下文章

通过 AWS Lambda 和 Cognito 注册用户(无服务器架构)

AWS Lambda 上的 Nestjs(无服务器框架)|如何访问事件参数?

无服务器框架忽略 lambda-proxy 设置中的“授权者”块

带有 AWS Lambda 错误“找不到模块”的无服务器框架

使用 graphql、aws lambda 和无服务器框架的多个 url 路径选项错误

无服务器框架 AWS 跨账户自定义授权方