【问题标题】:What's the problem of using Password Grant Tokens for Nuxt SPANuxt SPA 使用密码授予令牌有什么问题
【发布时间】:2020-07-31 23:59:46
【问题描述】:

我想开发一个以 Laravel 作为后端的 Nuxt SPA。阅读 Passport 文档,现在对以下段落感到困惑,因为我不想将用户重定向到后端登录页面:

使用 PKCE 授予授权码

带有“代码交换证明密钥”(PKCE) 的授权代码授权是一种安全的方式来验证单页应用程序或本机应用程序以访问您的 API。当您无法保证客户端机密将被保密存储或为了减轻授权代码被攻击者截获的威胁时,应使用此授权。在交换访问令牌的授权代码时,“代码验证器”和“代码质询”的组合取代了客户端密码。

在客户端浏览器中发出以下请求并将令牌保存在客户端浏览器中的问题是什么?

http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'taylor@laravel.com',
        'password' => 'my-password',
        'scope' => '',
    ],

【问题讨论】:

  • 我对 Nuxt SPA 一无所知,但如果您将 'password''client-secret' 提交给 'http://your-app.com,任何嗅探包裹通过的任何网络的人都可以看到这些值(并且当您第一次将它们从服务器提交到浏览器以编写该 AJAX 请求时可能相同)。

标签: php laravel oauth-2.0 nuxt.js laravel-passport


【解决方案1】:

最新的OAuth 2.0 Security Best Current Practice 完全不允许密码授予。

“资源所有者密码凭据授权不得使用。这种授权类型不安全地将资源所有者的凭据暴露给客户端。即使客户端是良性的,这也会导致攻击增加表面(凭据可能会在除 AS 之外的更多地方泄漏),并且用户经过培训可以在 AS 以外的地方输入他们的凭据。

此外,将资源所有者密码凭据授予调整为双因素身份验证、使用加密凭据进行身份验证以及需要多个步骤的身份验证过程可能很难或不可能(WebCryptoWebAuthn)。"

【讨论】:

  • 谢谢,那么如何在不将用户重定向到后端的情况下验证我的第一方移动应用程序?
  • 我也遇到了同样的问题,如果您找到了解决方案,请告诉我。 this 解决方案怎么样?
  • AS 代表什么?
  • 在 OAuth 2.0 AS=授权服务器中
  • 是否意味着应该从 Laravel Passport 中删除 Password Grant Tokens 选项?
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2017-04-09
  • 2017-10-05
  • 1970-01-01
  • 2016-09-28
  • 2022-08-16
相关资源
最近更新 更多