使用无服务器框架的 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 错误“找不到模块”的无服务器框架