【发布时间】:2018-09-06 14:35:39
【问题描述】:
AWS Cognito SignUp API 需要计算 SecretHash。
SecretHash 是使用用户池客户端的密钥和用户名加上消息中的客户端 ID 计算得出的 Base 64 编码的密钥哈希消息身份验证代码 (HMAC)。具体的 HMAC 算法描述在here。
我将该 java 示例移植到 C#,以便我可以从 Xamarin.Android 应用程序调用 SignUp API,以从 Android 设备将用户注册到 AWS 用户池(参见下面的代码)。
SecretHash 应该具有以下模式[\w+=/]+。这在 SignUp API 中有记录。
当我执行我的代码时,我得到了一个 SecretHash,它并没有完全遵循那个模式,所以我的 C# 实现存在问题。我无法弄清楚那个问题是什么。当我调用 SignUp API 时,AWS 会回复 InvalidParameterException: 1 validation error detected: Value at 'secretHash' failed to satisfy constraint: Member must satisfy regular expression pattern: [\w+=/]+
string CalculateSecretHash(string userPoolClientId, string userPoolClientSecret, string userName)
{
const string HMAC_SHA256_ALGORITHM = "HmacSHA256";
var signingKey = new Javax.Crypto.Spec.SecretKeySpec(
System.Text.Encoding.UTF8.GetBytes(userPoolClientSecret),
HMAC_SHA256_ALGORITHM);
var mac = Javax.Crypto.Mac.GetInstance(HMAC_SHA256_ALGORITHM);
mac.Init(signingKey);
mac.Update(System.Text.Encoding.UTF8.GetBytes(userName));
byte[] rawHmac = mac.DoFinal(System.Text.Encoding.UTF8.GetBytes(userPoolClientId));
return Base64.EncodeToString(rawHmac, Base64Flags.Default);
}
这会产生遵循以下模式的SecretHash:\w+= 不完全是[\w+=/]+
【问题讨论】:
标签: c# amazon-web-services xamarin xamarin.android amazon-cognito