亚马逊Cognito登录

时间:2016-08-27 15:32:43

标签: amazon-web-services amazon-cognito

TL; DR

为什么不存在authenticate(或login)与AWS Cognito / AWS Cognito身份提供商中的SignUpChangePassword相同?

-

我很难理解如何将AWS Cognito实施到API流程中。我对此进行了广泛的研究,感觉功能非常明显,我必须误解一些东西。

此API将提供Android,iOS和SPA。我想象通过我的api的基本流程,端点是这样的:

/v1.0/authenticate/

它接受用户/ pwd,然后服务器上的PHP会做这样的事情:

require 'vendor/autoload.php';

$sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
    'version'  => 'latest'
]);

$client = $sdk->createCognitoIdentity(['profile' => 'app-test-cognito']);

$result = $client->login([
    'ClientId' => '6p16oao60fvakje31lexabcmplgecliecd99ntid', 
    'Username' => $user, 
    'Password' => $pwd]);

$result将是一个类似

的json字符串
{
   "result": "success",
   "token": "<the token>"
}

并且token将返回给客户端,客户端将其存储在localStorage / memory中,并使用Authorization: Bearer <token>将其返回到每个其他API调用,直到它过期。我认为令牌是一个JWT,我可以测试每次调用的到期而不必离开我的API,还包括一个不可变的userId,并且可以通过使用基于API的秘密或签名测试进行解密来信任。

但是很少或根本没有迹象表明存在这样的事情,除了最近的博客文章,使用Javascript,表明有一个名为'authenticateUser'的JS方法:

https://mobile.awsblog.com/post/Tx2O14ZY8A5LFHT/Accessing-Your-User-Pools-using-the-Amazon-Cognito-Identity-SDK-for-JavaScript(我在这个SO问题中找到了这个链接:What is the REST (or CLI) API for logging in to Amazon Cognito user pools,这与我的相似,我会允许,但不是重复的。)

但是,我去了他们的Github回购和did a search for 'authenticateUser'并没有找到这样的方法。我也did the same search in the PHP repo.没有。

顺便说一下,这个(下面)是一个真实的,工作Signup所以看起来(对我而言)它会遵循这样一个简单的身份验证也可以工作。我错过了什么?

require 'vendor/autoload.php';

$sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
    'version'  => 'latest'
]);

$client = $sdk->createCognitoIdentityProvider(['profile' => 'app-test-cognito']);

$result = $client->signUp([
    'ClientId' => '6p16oao60fvakje31lexabcmplgecliecd99ntid', 
    'Username' => 'fakeexampleusername', 
    'Password' => 'a#--sldjf383af09aw3jJJJL', 
    'UserAttributes' => [
        [
         'Name' => 'email',
         'Value'=> 'me@example.com'
        ],
     ],
]); // based on pool settings, even sends out an email automatically.

注意:我还检查了Auth0,它看起来很棒,但没有和SDK登录,(你必须转发到他们的服务器并使用他们提供的表格......); Stormpath超出了价格范围。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

没有简单的“身份验证”API。 auth流程以“InitiateAuth”调用和一系列RespondToAuthChallenge开始。当所有挑战(例如:MFA)完成后,只有那时RespondToAuthChallenge才会返回令牌。

描述此文档的文档位于:http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html