【发布时间】: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