SRP 从 Amazon Cognito 登录
SRP login with Amazon Cognito from
我正在尝试使用以下代码将 cognito 登录集成到 .net 控制台应用程序:
public static async Task LoginAsync()
{
var credentials = new AnonymousAWSCredentials();
using var client = new AmazonCognitoIdentityProviderClient(credentials, Amazon.RegionEndpoint.USEast1);
var initAuthRequest = new InitiateAuthRequest();
initAuthRequest.AuthParameters.Add("USERNAME", "myuser@myemail.com");
initAuthRequest.AuthParameters.Add("SRP_A", "3ab487035b1635659eb0f349d2czab124d258b03725x5322138ff24ab5c870311b16585659eb0f349d2ceab124d258b0372555322138ff2");
initAuthRequest.ClientId = "my_amazon_client_id";
initAuthRequest.AuthFlow = AuthFlowType.USER_SRP_AUTH;
var response = await client.InitiateAuthAsync(initAuthRequest);
}
这非常有效,我收到的回复是:
- 盐
- SECRET_BLOCK
- SRP_B
- 用户名
- USER_ID_FOR_SRP
根据文档,我必须生成一个 PASSWORD_CLAIM_SIGNATURE
,但我不知道如何生成它或加密函数应遵循什么顺序。我试图遵循所有 Amazon 文档,但没有很好的记录,我找到的唯一解决方案依赖于 GetUserPoolId
,我不知道从哪里得到它。我看到了另一个 Xamrin.Forms 教程,但它并没有完全遵循我需要的这种 SRP 方式。
有什么想法吗?
谢谢!
值PASSWORD_CLAIM_SIGNATURE
是根据以下成一个base64编码的字符串。
Let K_USER = SHA256_HASH(S_USER)
让 S_USER = (SRP_B - k * gx)(a + ux)
让 x = SHA256_HASH(盐 + FULL_PASSWORD)
让你 = SHA256_HASH(SRP_A + SRP_B)
让 k = SHA256_HASH(N + g)
- 回答所有 MFA 质询后,Amazon Cognito 在 NewDeviceMetadataType 字段中使用
DeviceGroupKey
和唯一的 DeviceKey
进行响应。
- 对于
PASSWORD_CLAIM_SECRET_BLOCK
,使用SECRET_BLOCK
的值。
- 对于
TIMESTAMP
,包括当前时间。 (例如,9 月 25 日星期二
00:09:40 2018 年协调世界时。)
Let PASSWORD_CLAIM_SIGNATURE = SHA256_HMAC(K_USER, DeviceGroupKey + DeviceKey + PASSWORD_CLAIM_SECRET_BLOCK + TIMESTAMP), base64-encoded
我正在尝试使用以下代码将 cognito 登录集成到 .net 控制台应用程序:
public static async Task LoginAsync()
{
var credentials = new AnonymousAWSCredentials();
using var client = new AmazonCognitoIdentityProviderClient(credentials, Amazon.RegionEndpoint.USEast1);
var initAuthRequest = new InitiateAuthRequest();
initAuthRequest.AuthParameters.Add("USERNAME", "myuser@myemail.com");
initAuthRequest.AuthParameters.Add("SRP_A", "3ab487035b1635659eb0f349d2czab124d258b03725x5322138ff24ab5c870311b16585659eb0f349d2ceab124d258b0372555322138ff2");
initAuthRequest.ClientId = "my_amazon_client_id";
initAuthRequest.AuthFlow = AuthFlowType.USER_SRP_AUTH;
var response = await client.InitiateAuthAsync(initAuthRequest);
}
这非常有效,我收到的回复是:
- 盐
- SECRET_BLOCK
- SRP_B
- 用户名
- USER_ID_FOR_SRP
根据文档,我必须生成一个 PASSWORD_CLAIM_SIGNATURE
,但我不知道如何生成它或加密函数应遵循什么顺序。我试图遵循所有 Amazon 文档,但没有很好的记录,我找到的唯一解决方案依赖于 GetUserPoolId
,我不知道从哪里得到它。我看到了另一个 Xamrin.Forms 教程,但它并没有完全遵循我需要的这种 SRP 方式。
有什么想法吗?
谢谢!
值PASSWORD_CLAIM_SIGNATURE
是根据以下成一个base64编码的字符串。
Let K_USER = SHA256_HASH(S_USER)
让 S_USER = (SRP_B - k * gx)(a + ux)
让 x = SHA256_HASH(盐 + FULL_PASSWORD)
让你 = SHA256_HASH(SRP_A + SRP_B)
让 k = SHA256_HASH(N + g)- 回答所有 MFA 质询后,Amazon Cognito 在 NewDeviceMetadataType 字段中使用
DeviceGroupKey
和唯一的DeviceKey
进行响应。 - 对于
PASSWORD_CLAIM_SECRET_BLOCK
,使用SECRET_BLOCK
的值。 - 对于
TIMESTAMP
,包括当前时间。 (例如,9 月 25 日星期二 00:09:40 2018 年协调世界时。)
Let PASSWORD_CLAIM_SIGNATURE = SHA256_HMAC(K_USER, DeviceGroupKey + DeviceKey + PASSWORD_CLAIM_SECRET_BLOCK + TIMESTAMP), base64-encoded