AWS Cognito 用户身份验证
AWS Cognito User Authentication
好的。这是我的东西。
我们正在 Lumen/Laravel 之上构建一个小型应用程序。我们需要 AWS cognito 完全负责用户管理。
基本上2个简单的功能。
- 根据用户注册请求将用户详细信息推送到 AWS Cognito 用户池。
- 根据登录请求使用简单的 email/mobile 和密码根据 Cognito 用户池对用户进行身份验证。
我们需要使用 PHP 来做到这一点。
现在的问题是,我无法找到任何 PHP API 具有清晰过程或示例的文档。 Cognito 仅为 Android、IOS、JS、Unity 和 Xamarian 提供 API;s。我需要 PHP 的类似文档。
有人有使用 Cognito API 和 PHP 的上述 2 个功能的工作示例吗?
注意:我几乎花了一天半的时间弄清楚是否可以以及如何做到这一点。所以请不要向我发送任何在您的 google 搜索中出现在第一位或第二位的 link。很可能我已经看到 link 运气不好。
如有任何帮助,我们将不胜感激。
遗憾的是,PHP 没有工作示例。
目前,Cognito 支持您提到的高级 SDK,但不支持 PHP 的高级 SDK。可以通过调用下面提到的APIs来使用低级SDK。
下面的示例应该与 PHP 的一些翻译一起工作,这个 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 计算。高级 SDK 围绕此计算提供了一个包装器来为您管理它,但是您自己完成它是相当困难的。
为了能够使用任何 API 请求,您首先需要正确设置您的凭据。在服务器端和 EC2 实例外部执行此操作,您需要像这样提供 AWS 访问密钥和 AWS 秘密访问密钥、应用程序客户端 ID、应用程序客户端密码和用户池 ID[=13] =]
$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 访问密钥和 AWS 秘密访问密钥,请转到您的 AWS 控制台,单击您的姓名,然后转到帐户,然后再次单击您的姓名,转到“我的安全凭证' 那么我想你会找到出路的..
要获取 App client ID,App client Secret,您需要先创建用户池,然后转到 App Client 并创建一个。 (您可以在 常规设置 下找到池 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,
]);
如果你让它工作,你应该能够使用文档中列出的任何操作 here
注意:这适用于 API 版本 2016-04-18 & PHP 7.1,请确保您使用的是相同的版本,或者至少 API 没有重大变化,然后再假设这对您有用。
注2:我使用的Id完全是随机的..但它们应该具有相同的格式。
好的。这是我的东西。
我们正在 Lumen/Laravel 之上构建一个小型应用程序。我们需要 AWS cognito 完全负责用户管理。
基本上2个简单的功能。
- 根据用户注册请求将用户详细信息推送到 AWS Cognito 用户池。
- 根据登录请求使用简单的 email/mobile 和密码根据 Cognito 用户池对用户进行身份验证。
我们需要使用 PHP 来做到这一点。
现在的问题是,我无法找到任何 PHP API 具有清晰过程或示例的文档。 Cognito 仅为 Android、IOS、JS、Unity 和 Xamarian 提供 API;s。我需要 PHP 的类似文档。
有人有使用 Cognito API 和 PHP 的上述 2 个功能的工作示例吗?
注意:我几乎花了一天半的时间弄清楚是否可以以及如何做到这一点。所以请不要向我发送任何在您的 google 搜索中出现在第一位或第二位的 link。很可能我已经看到 link 运气不好。
如有任何帮助,我们将不胜感激。
遗憾的是,PHP 没有工作示例。 目前,Cognito 支持您提到的高级 SDK,但不支持 PHP 的高级 SDK。可以通过调用下面提到的APIs来使用低级SDK。
下面的示例应该与 PHP 的一些翻译一起工作,这个 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 计算。高级 SDK 围绕此计算提供了一个包装器来为您管理它,但是您自己完成它是相当困难的。
为了能够使用任何 API 请求,您首先需要正确设置您的凭据。在服务器端和 EC2 实例外部执行此操作,您需要像这样提供 AWS 访问密钥和 AWS 秘密访问密钥、应用程序客户端 ID、应用程序客户端密码和用户池 ID[=13] =]
$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 访问密钥和 AWS 秘密访问密钥,请转到您的 AWS 控制台,单击您的姓名,然后转到帐户,然后再次单击您的姓名,转到“我的安全凭证' 那么我想你会找到出路的..
要获取 App client ID,App client Secret,您需要先创建用户池,然后转到 App Client 并创建一个。 (您可以在 常规设置 下找到池 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,
]);
如果你让它工作,你应该能够使用文档中列出的任何操作 here
注意:这适用于 API 版本 2016-04-18 & PHP 7.1,请确保您使用的是相同的版本,或者至少 API 没有重大变化,然后再假设这对您有用。
注2:我使用的Id完全是随机的..但它们应该具有相同的格式。