【问题标题】:Authenticating application using Cognito and Devise使用 Cognito 和 Devise 对应用程序进行身份验证
【发布时间】:2019-03-22 01:56:08
【问题描述】:

我正在尝试在我的应用程序中实施 AWS Cognito,以实现更好的全方位身份验证。该系统是一个 Rails 应用程序,目前使用 Warden/Devise 作为处理用户帐户(登录、注册)的方法。

我的目标是拥有一个包含应用程序用户列表的 AWS UserPool。当使用 Cognito 验证用户时,我希望搜索我们当前用于该角色的表,并根据分配给他们的角色将用户移动到系统的正确区域。

我已开始实施处理此问题的逻辑,但遇到了障碍。

请看下面我的代码。

cognito_authenticatable.rb

用于处理认知身份验证的逻辑。我在这里要做的就是检查用户是否已注册并返回有效令牌,这样我就可以更喜欢内部应用程序检查来收集用户角色。

def authenticate!
   if params[:login]
      region_name = 'us-east-2'
      user_pool_id = 'us-east-2_Qj78BNQon'
      client_id = '1pv3eno72e51mll3q36cuiojmr'

      client = Aws::CognitoIdentityProvider::Client.new(
         region: region_name
      )

      resp = client.initiate_auth({
         client_id: client_id,
         auth_flow: "USER_PASSWORD_AUTH",
         auth_parameters: {
           "USERNAME" => email,
           "PASSWORD" => password
         }
      })
     end
  end

divise.rb

此代码只是为应用程序守望者服务添加新的身份验证策略。

config.warden do |manager|
   manager.strategies.add(:cognito, 
   Devise::Strategies::CognitoAuthenticatable)
   manager.default_strategies(:scope => :login).unshift :cognito
   manager.default_strategies(:scope => :login).pop
end

控制台中的输出错误是

Aws::Errors::MissingCredentialsError(无法在未设置凭据的情况下签署请求):

config/initializers/cognito_authenticate.rb:23:in `authenticate!'

这是来自正在运行的 localhost 应用程序的图像。

在这方面的任何帮助都会很棒。

提前致谢。

【问题讨论】:

  • 我的 Cognito 设计策略也有类似的问题。但对我来说,它适用于我的本地开发环境,而我在我的暂存环境(heroku 应用程序)上得到 MissingCredentialsError。还设置了所有相关的 Cognito 参数。我应该提到,我在我的应用客户端上取消了“生成客户端密码”的检查,但仍然收到错误。

标签: ruby-on-rails authentication devise amazon-cognito warden


【解决方案1】:

一种解决方案可能是在 Cognito 用户池中创建应用程序客户端时取消选中生成客户端密码的选项。此选项默认处于选中状态,您必须知道取消选中它 (https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html)。

默认情况下,用户池会为您的应用生成客户端密码。如果您不希望这种情况发生,请清除“生成客户端密码”。

只能在创建新客户端期间取消选中客户端密码,因此您可能必须删除客户端应用并创建一个新应用(没什么大不了的)。

我还在一篇 Medium 文章中收集了我在 Cognito、Devise、Rails 和 VueJS 方面的知识:https://medium.com/@morgler/beta-learnings-from-developing-vuejs-quasar-aws-amplify-and-cognito-application-dd38ec58b881

【讨论】:

    【解决方案2】:

    您收到此错误是因为您的 AWS SDK for Ruby 配置不正确。该错误可能不仅存在于 Cognito API,而且存在于任何 AWS Signature V4 签名的 API 调用中。请参考此documentation 为您的应用程序正确配置您的 SDK。

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2019-06-19
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多