【问题标题】:Computing a SecretHash for AWS Cognito User Pool API为 AWS Cognito 用户池 API 计算 SecretHash
【发布时间】: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


    【解决方案1】:

    对于任何未来的读者,将Base64Flags.Default 替换为Base64Flags.NoWrap 已经解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 1970-01-01
      • 2018-01-31
      • 2018-11-07
      • 2020-06-14
      • 2018-03-25
      • 1970-01-01
      • 2018-03-02
      • 2018-01-24
      相关资源
      最近更新 更多