仅限Rails API - 在没有用户模型的情况下解码Google JWT

时间:2016-10-20 16:59:26

标签: ruby-on-rails ruby authentication jwt google-authentication

我的应用程序分为Rails 5 API-only app和React frontend。

我希望能够使用Google登录前端React应用程序并获得JWT。

对于API的每个请求,我都会将JWT作为授权标头发送到Rails应用程序。

我希望能够在每个操作上解码此授权令牌,以便我不需要API上的用户模型或会话。当我解码JWT时,我将验证该电子邮件是否与某个URL匹配,如果没有,我将拒绝访问该方法。

我的问题是:如何从Google正确安全地解码JWT? Google应用程序有一个客户端密钥等,但我不确定JWT gem解码方法的位置。

使用以下参数解码授权令牌时,信息正确无误。我不认为这是最好的方式,因为JWT可以伪造并且使用这种方法,因此Google从未真正验证过令牌。这是我的身份验证方法:

def authenticate_user
  token = request.authorization
  head 403 and return unless token
  decoded_token = JWT.decode token, nil, false
  hd = decoded_token[0]["hd"]
  head 403 and return unless hd == "example.com"
end

这是在ApplicationController中的before_action调用中运行的:

before_action :authenticate_user

就像我之前说过的,这确实有效。问题是,它永远不会验证Google身份,并且传递给它的任何令牌都可能因此而被伪造。

如何在不创建用户模型的情况下安全地解码传递给我的令牌?我只是想验证,对于每个请求,发送的令牌是正确的,安全的,hd来自正确的域。

我确实从我的Google应用程序中获得了客户机密码,但我不确定这些内容在哪里发挥作用。

0 个答案:

没有答案