【问题标题】:AWS Lambda/Cognito Authentication - Assuming Auth RoleAWS Lambda/Cognito 身份验证 - 承担身份验证角色
【发布时间】:2016-12-22 21:51:52
【问题描述】:

我正在尝试在 Swift 中创建一个 iOS 应用程序,该应用程序使用 AWS Lambda 的以下身份验证服务 - https://github.com/danilop/LambdAuth

它使用适用于 iOS 的 AWS 移动开发工具包与 DynamoDB 和 Lambda 进行通信 - http://docs.aws.amazon.com/mobile/sdkforios/developerguide/

这里是使用从 Lambda 登录函数返回的令牌的网站的示例代码,我想 Swift 代码将是类似的东西 - https://github.com/danilop/LambdAuth/blob/master/www/login.html#L69

这是为用户生成令牌的云函数 - https://github.com/danilop/LambdAuth/blob/master/LambdAuthLogin/index.js#L102

我在 AWS Cognito(联合身份)中创建了一个身份池,我有两个角色,auth 和 unauth。我的应用程序似乎始终是 unauth 角色 (arn:aws:sts::123123123:assumed-role/_unauth_MOBILEHUB_123123123/CognitoIdentityCredentials)。我的用户被存储在一个 dynamodb 表中,密码是加盐的。

问题的根源在于,在我从服务接收到登录令牌以将我的用户转换为经过身份验证的角色(使用 auth arn)后,我不知道要编写正确的 Swift 代码。我希望它对 AWS(dynamodb、lambda 等)的每个服务调用都使用身份验证角色。我希望有人能指出我正确的方向 - 谢谢。

【问题讨论】:

  • 运气好吗?我也有同样的问题

标签: ios swift amazon-web-services aws-lambda amazon-cognito


【解决方案1】:

根据 Danilo 书中的设计,如果您使用的是 aws-sdk javascript,您应该像这样定义您的对象:

var creds = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: //hard coded value for your system//
})

AWS.config.update({
    region: 'us-east-1',
    credentials: creds
});

var lambda = new AWS.Lambda();

然后,一旦您收到您的 identityId 和 token ,您应该将它们分配给您的凭据,如下所示:

creds.params['IdentityId'] = output.identityId;
creds.params['Logins'] = {};
creds.params['Logins']['cognito-identity.amazonaws.com'] = output.token;
creds.expired = true;

其中输出是来自您的 LambdAuthLogin Lambda 函数的响应。

【讨论】:

    【解决方案2】:

    仅当您使用受支持的公共提供商(Facebook、Google、Twitter、Login With Amazon)、OIDC 提供商、SAML 提供商或 Cognito 用户池用户之一时,才会使用经过身份验证的角色。

    Amazon Cognito User Pools为您提供用户注册、认证和管理的解决方案。您是否有理由更喜欢使用 Lambda 身份验证?

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 2016-03-12
      • 2018-01-29
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2017-01-02
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多