我的应用程序分为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应用程序中获得了客户机密码,但我不确定这些内容在哪里发挥作用。