在 AWS 上的无服务器后端为移动应用程序添加用户登录

奥利·科拉尔

我正在为多个平台(iOS、Android、PWA(Web))创建一个移动应用程序,并使用 API Gateway 和 DynamoDb 在 AWS Lambda 上使用无服务器框架构建后端。

我最近的目标是使用 AWS Cognito 添加用户登录,使我的用户能够使用他们的电子邮件和密码登录,或者使用 Facebook 登录。我阅读了多个线程、教程和官方 AWS 文档,但由于大量不同的信息而感到非常困惑。

我想集成只有在用户登录时才能调用的授权 API 端点。

因此我的第一个问题是:

1) 我应该使用 AWS Cognito 用户池还是 AWS Cognito 身份池?

我还读到,对于用户池,您可以单独使用托管 UI 进行登录,这对我的应用程序来说是不可能的。我想设计我自己的登录页面。

由于我找不到客户端集成的任​​何示例代码,我现在使用身份池,并在我的 serverless.yml 中创建了一个端点,指定如下:

functions:
  xxx-auth:
    handler: endpoints/xxx-auth.execute
    events:
      - http: 
          path: xxx-auth
          method: put
          cors: true
          integration: lambda
          authorizer: aws_iam

所以我的第二个问题是:

2) 我如何正确集成我的 Cognito 身份池或用户池的授权?

从另一个线程我读到有可能为在 API Gateway 上创建的 API 生成一个 SDK,它为您处理请求的签名过程。当我尝试在我的 iOS 应用程序中这样做时,我首先使用以下代码登录用户:

let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .EUCentral1 ,
                                                            identityPoolId:"eu-central-1:XXXXXXXX" ,
                                                            identityProviderManager: CustomIdentityProvider(tokens: ["graph.facebook.com": FBSDKAccessToken.current().tokenString]))
    let configuration = AWSServiceConfiguration(region: .EUCentral1, credentialsProvider: credentialsProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration

然后使用以下创建的代码提交 PUT 请求:

public func XXXPut() -> AWSTask<AnyObject> {
    let headerParameters = [
               "Content-Type": "application/json",
               "Accept": "application/json",

            ]

    let queryParameters:[String:Any] = [:]

    let pathParameters:[String:Any] = [:]

    return self.invokeHTTPRequest("PUT", urlString: "/XXX", pathParameters: pathParameters, queryParameters: queryParameters, headerParameters: headerParameters, body: nil, responseClass: nil)
}

但是我看不到任何签署 HTTP 请求的代码。所以第三个问题是:

3) 我如何创建将签名的 HTTP 请求正确发送到我的 API 网关后端的 SDK?

我还使用简单的“授权”标头对 Cognito 用户池进行了相同的尝试,但无法找到一种在不使用任何类型的托管 UI 的情况下在 iOS 应用程序上获取相应授权令牌的方法。

如果有人能向我解释这个丛林,那将是非常友好的。

奥利·科拉尔

我自己想出来的:

1)这取决于。我现在使用两者的组合,原因如下:对于 Facebook 登录,我们使用 Cognito 身份池,因为 Cognito 用户池不支持托管 UI 之外的 Facebook 登录。对于电子邮件注册和登录,我们使用 Cognito 身份池中的 UserPool。

2)我发布的代码片段是正确的。

3)代码片段也是正确的。我的错误是我没有正确显示和检查我的 API 的回复,因此认为该请求未经授权,但事实确实如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为具有AWS无服务器后端的React应用动态分配用户权限

需要帮助在AWS上的无服务器架构中部署angularjs 1.5应用程序

无服务器AWS上的全球无边界实施网站/应用程序

找不到.NET Core AWS无服务器应用程序所需的* .deps.json

AWS无服务器应用程序模型(SAM)-如何更改StageName?

AWS 移动中心 - 无服务器?

如何在AWS Lambda上的无服务器应用程序中存储和使用HTML模板(使用AWS SAM)?

如何将无服务器的SpringBoot微服务应用程序(RESTful)部署到AWS Lambda?

AWS SAM(无服务器应用程序模型)和无服务器框架之间有什么区别?

如何在本地使用 AWS 无服务器后端

闪亮的服务器:应用程序无法在 AWS 上启动

如果在两者之间添加 AWS Cognito,移动应用程序和 Web 服务器如何通信

哪些适用于移动应用程序后端的AWS服务?

具有Cognito / OIDC的Visual Studio AWS无服务器应用程序获取ERR_TOO_MANY_REDIRECTS

无服务器框架-在AWS API Gateway中将现有应用程序从REST切换到HTTP

分别上载AWS无服务器应用程序lambda吗?(没有ApiGateway设置)

AWS 和 C# 无服务器应用程序 - 找不到访问 ID 令牌的上下文

在VS2017中使用AWS无服务器应用程序读取appsettings.json文件

在哪里可以找到使用AWS无服务器工具包部署的应用程序

使用 Maven 部署 AWS 无服务器应用程序时如何设置文件的文件权限

部署 .net core api AWS 无服务器应用程序后出现 403 Forbidden/500 内部服务器错误

AWS设置:将单页静态应用程序前端移动到S3(从Web服务器)

AWS EB上的Flask应用程序始终会给我500内部服务器错误

IntelliJ + AWS Toolkit +无服务器应用程序:“必须能够在项目中找到处理程序,才能部署到Lambda”

AWS无服务器映像处理程序-Lambda错误

AWS上的无服务器架构实施

AWS无服务器架构上的教学平台

如何使用AWS Cognito在Facebook之类的应用程序上永久登录用户

AWS lambda(无服务器)是否像支持一次性功能一样支持应用程序的安装?