JWT + Laravel Socialite 与 OAuth 参数

Posted

技术标签:

【中文标题】JWT + Laravel Socialite 与 OAuth 参数【英文标题】:JWT + Laravel Socialite with OAuth Parameters 【发布时间】:2018-05-29 02:41:53 【问题描述】:

我想要达到的目标:

允许用户使用单页应用程序安全地将他们的帐户连接到不同的社交媒体。

我在做什么:

我正在使用 SPA,因此使用 JWT 作为我的用户身份验证方法。我正在使用 Laravel Socialite 在 OAuth 调用中传递 JWT 令牌,如下所示:

return Socialite::driver($provider)
    ->with(['provider' => $provider, 'token' => $token])
    ->redirectUrl($redirectUri)
    ->stateless()
    ->redirect();

在回调中,我根据令牌获取用户。使用此方法允许第三方提供者访问 JWT 令牌。这是非常不安全的。

我的问题:

有没有更好的方法来做到这一点?我应该使用某种哈希+盐+秘密吗?

【问题讨论】:

您的 JWT 令牌的有效负载是什么?想知道为什么您在验证社交媒体帐户之前发布了 JWT 令牌。 令牌在用户登录网站时发放。用户可以在登录时选择将他的帐户连接到不同的提供商。我猜有效载荷是非常标准的 JWT。我不确定你的意思。 但是,您将 JWT 令牌传递给第三方提供商的原因是什么? 我怎么知道在回调中连接提供者的用户? 【参考方案1】:

你应该检查JWT。

JSON Web 令牌是一种开放的行业标准 RFC 7519 方法,用于 代表两方之间的安全声明

JWT Token由headerpayloadverify signature三部分组成。

您正在使用无状态身份验证,而对用户进行身份验证的唯一方法是通过 JWT 令牌。要在重定向后对用户进行身份验证,您应该创建一个包含应用程序用户 ID 的有效负载,并传递给第三方提供商,以便在重定向时,他们会将 JWT 令牌传回给您。

将 JWT Token 传递给第三方提供商是没有问题的,但请注意有效负载不应包含任何敏感数据。如果负载被某种方式嗅探,它不会有任何危害,因为如果黑客试图更改负载,验证签名会有所帮助,并且应用程序无法验证令牌并且应用程序将抛出异​​常。

签名用于验证JWT的发送者是谁 说它是,并确保消息没有沿 方式。

【讨论】:

以上是关于JWT + Laravel Socialite 与 OAuth 参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 进行 Laravel API 身份验证

无法将 Laravel / Socialite 与 Lumen 一起使用

Laravel Socialite 与 Facebook 未登录

将 Laravel Socialite 与 API 一起使用?

找不到类“Laravel\Socialite\SocialiteServiceProvider”

带有 Laravel 后端和 React Native 应用程序的 Facebook 和 JWT Auth