我想要实现的目标:
安全地允许用户使用单页应用将他们的帐户连接到不同的社交媒体。
我在做什么:
我正在使用 SPA ,因此使用 JWT 作为我的用户身份验证方法。我正在使用 Laravel Socialite 在OAuth调用中传递JWT令牌,如下所示:
return Socialite::driver($provider)
->with(['provider' => $provider, 'token' => $token])
->redirectUrl($redirectUri)
->stateless()
->redirect();
在回调中,我根据令牌获取用户。使用此方法允许第三方提供程序访问JWT令牌。这是非常不安全的。
我的问题:
有没有更好的方法呢?我应该使用某种哈希+盐+秘密吗?
答案 0 :(得分:1)
您应该查看JWT。
JSON Web Tokens是一种开放的,行业标准的RFC 7519方法 在两方之间安全地代表 。
JWT Token由三部分组成,header
,payload
和verify signature
。
您正在使用无状态身份验证,并且通过JWT令牌验证用户的唯一方法。要在重定向后对用户进行身份验证,您应该创建包含应用程序用户ID的有效负载,并传递给第三方提供商,以便在重定向时,他们会将JWT令牌传递给您。
将JWT令牌传递给第三方提供程序是没有问题的,但请注意,有效负载不应包含任何敏感数据。如果有效负载以某种方式被嗅探,则不会有任何损害,因为如果黑客试图更改有效负载,则验证签名会有所帮助,并且应用程序无法验证令牌,应用程序将抛出异常。
签名用于验证JWT的发件人是谁 说这是并确保消息没有随着时间的推移而改变 方式。强>