AWS Lambda/Cognito身份验证-假设授权角色

4

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

它使用AWS Mobile SDK for iOS与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。我的应用程序似乎始终处于非授权角色(arn:aws:sts::123123123:assumed-role/_unauth_MOBILEHUB_123123123/CognitoIdentityCredentials)。我的用户存储在dynamodb表中,其中包含一个加盐的密码。

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


1
这个问题有什么进展吗?我也遇到了同样的问题。 - Julio
2个回答

0
根据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函数的响应。


-1

只有在使用受支持的公共提供商(Facebook、Google、Twitter、Login With Amazon)、OIDC 提供商、SAML 提供商或 Cognito 用户池用户时,才会使用已认证的角色。

Amazon Cognito 用户池 为您提供了用户注册、身份验证和管理的解决方案。您是否有理由更喜欢使用 Lambda Auth 而不是它?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接