亚马逊 Cognito 登录

Han*_*ans 1 amazon-web-services amazon-cognito

长话短说

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

--

我正在努力了解如何将 AWS Cognito 实施到 API 流程中。我对此进行了广泛的研究,感觉功能是如此明显,我一定是误解了某些东西。

该 API 将服务于 Android、iOS 和 SPA。我想象通过我的 api 的基本流程,端点如下:

/v1.0/authenticate/
Run Code Online (Sandbox Code Playgroud)

它会接受用户/密码,然后服务器上的 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]);
Run Code Online (Sandbox Code Playgroud)

并且$result会是一个 json 字符串,类似于

{
   "result": "success",
   "token": "<the token>"
}
Run Code Online (Sandbox Code Playgroud)

并且token将返回给客户端,客户端将其存储在 localStorage/内存中,并在每次其他 API 调用时返回它,直到它过期,使用Authorization: Bearer <token>. 我认为令牌将是一个 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 (我在这个问题中找到了这个链接:什么是用于登录 Amazon Cognito 用户池的 REST(或 CLI)API,这与我的类似,我会允许,但不能重复)。

但是,我去了他们的 Github 存储库并搜索了“authenticateUser”,但没有找到这样的方法。我还在PHP 存储库中进行了相同的搜索。没有。

顺便说一句,这(如下)是真实的,有效的,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.
Run Code Online (Sandbox Code Playgroud)

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

感谢您的帮助!

Mar*_*rio 5

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

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