在Rails应用程序中使用访问密钥和秘密访问密钥设置Cognito Auth

时间:2017-12-17 20:12:49

标签: ruby-on-rails ruby amazon-web-services amazon-cognito amazon-iam

我刚刚开始学习rails,并且正在尝试使用我的应用程序配置AWS认证身份验证。我的问题是我不确定如何配置正确的access_keysecret_access_key

我之前在node.js上配置了cognito,但它只需要与池相关的凭据(即客户端ID和用户池ID)。我在这里关注的ruby sdk: http://docs.aws.amazon.com/sdkforruby/api/Aws/CognitoIdentityProvider/Client.html

想要我的access_keysecret_access_key

为了生成这些密钥,我进入了AWS IAM - >仪表板 - >删除根访问密钥 - >管理安全凭证

然后我删除了所有其他无效的安全凭证并生成了一对新凭据。这是我的代码:

@cognito_client = Aws::CognitoIdentityProvider::Client.new(
                    access_key_id: "GENERATED_ACCESS_KEY",
                    secret_access_key: "GENERATED_SECRET_ACCESS_KEY",
                    region: "us-east-1"
                  )

resp = @cognito_client.sign_up({
         client_id: "COGNITO_POOL_CLIENT_ID",
         username: email,
         password: password,
         user_attributes: [
           {
             name: "email",
             value: email
           },
           {
             name: "given_name",
             value: given_name
           },
           {
             name: "phone_number",
             value: phone_number
           }
         ]
       })

这是我在控制台中收到的错误:

Aws::CognitoIdentityProvider::Errors::NotAuthorizedException 
(Unable to verify secret hash for client COGNITO_POOL_CLIENT_ID):

我是否需要将cognito池与access_key_id和secret_access_key相关联?如果是这样,我该怎么做?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您不需要AWS凭据即可进行注册通话,因为从AWS的角度来看,这是一个未经身份验证的调用。问题是您的用户池客户端已配置客户端密钥。这里有两个选项:

  • 使用没有客户端密钥的用户池。您可以从应用客户端选项卡创建一个,然后取消选中Generate Client Secret框。

  • 在你的sign_up调用中传递秘密哈希。如果您的应用程序有办法保护客户机密,您可以从客户端机密计算秘密散列,并在上面的注册呼叫中传递它。以下是AWS文档的链接,该文档说明了如何根据客户端密钥计算秘密哈希:

http://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash