AWS Cognito 用户身份验证

12

好的。这是我的事情。

我们正在Lumen/Laravel上构建一个小应用程序。 我们需要AWS Cognito完全负责用户管理。

基本上有两个简单的功能:

  1. 在用户注册请求时将用户详细信息推送到AWS Cognito用户池中。
  2. 在登录请求时通过简单的电子邮件/移动电话和密码对用户进行Cognito用户池身份验证。

我们需要使用PHP来完成此操作。

现在问题是,我找不到任何具有清晰过程或示例的PHP API文档。 Cognito仅为Android、IOS、JS、Unity和Xamarian提供API。 我需要类似于PHP的文档。

是否有人使用带有PHP的cognito API的工作示例来完成上述2个功能?

注意:我几乎花了一天半的时间研究这是否可以完成以及如何完成。 因此,请不要只是将出现在您的谷歌搜索中的第一或第二个链接发送给我。 希望得到您的任何帮助。

2个回答

9

很遗憾,目前没有针对PHP的工作示例。目前,Cognito支持您提到的高级SDK,但不支持PHP的高级SDK。可以通过调用下面提到的API来使用低级SDK。

http://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.CognitoIdentityProvider.CognitoIdentityProviderClient.html

下面的示例应该能够运行,只需稍微翻译一下即可,这个SDK中的大多数代码也是如此。 https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-cognitoidentityprovider/src/main/java/com/amazonaws/mobileconnectors/cognitoidentityprovider/CognitoUser.java

您可以使用ADMIN_NO_SRP_AUTH参数调用AdminInitiate auth API而不是调用InitiateAuth,这样您就无需在PHP中进行SRP计算了。高级SDKs为您管理计算提供了一个包装器,但自己做起来非常困难。


2
或许有帮助:https://github.com/pallant/laravel-aws-cognito-auth 和 https://github.com/aws/aws-sdk-php - Ben Claar

9

为了能够使用任何API请求,您需要首先正确设置您的凭据。如果在EC2实例之外进行服务器端设置,您需要提供以下信息:AWS访问密钥、AWS秘密访问密钥、应用程序客户端ID、应用程序客户端密码和用户池ID,如下所示:

$args = [ 
'credentials' => [
    'key' => 'AAAAAAAAAA',
    'secret' => 'abacaaswfas',
],
'region' => 'eu-central-1',
'version' => 'latest',

'app_client_id' => '3asd123adfs1231sdfs',
'app_client_secret' => '1sdf123sdfs123sdfsfsdf132fd3213',
'user_pool_id' => 'eu-central-1_aaaW2Df3',
]

否则,在正确的ID放置之前,您将看到各种可能的错误。
要获取AWS ACCESS KEY和AWS SECRET ACCESS KEY,请转到AWS控制台,单击您的名称,然后转到帐户,再次单击您的名称,进入“我的安全凭据”,然后我想您会找到出路。
要获取应用程序客户端ID、应用程序客户端密钥,您需要首先创建用户池,然后转到应用程序客户端并创建一个(您可以在“常规设置”下找到池ID)。
一个简单的登录查询。
$client = new CognitoIdentityProviderClient($args);
$client->adminInitiateAuth([
            'AuthFlow' => 'ADMIN_NO_SRP_AUTH',
            'AuthParameters' => [
                'USERNAME' => YOUR_USERNAME_HERE,
                'PASSWORD' => YOUR_PASS_HERE,
                'SECRET_HASH' => , base64_encode(hash_hmac('sha256', YOUR_USERNAME_HERE . APP_CLIENT_ID, APP_CLIENT_SECRET, true))
            ],
            'ClientId' => APP_CLIENT_ID,
            'UserPoolId' => USER_POOL_ID,
        ]);

如果您成功运行此操作,您应该能够使用文档这里列出的任何操作。
注意:此操作适用于API版本2016-04-18和PHP 7.1,请确保您使用的是相同的版本或API没有重大更改,然后再假定此操作将适用于您。
注意2:我使用的ID完全是随机的..但它们应该具有相同的格式。

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