什么类型的资助适合 React 应用程序?
What type of grant is adequate for a React application?
我有点困惑,因为我不知道在我的特定情况下应该使用哪种类型的赠款。
我有一个前端 React 应用程序,后端使用 Spring Boot.此外,还有一个独立的 Spring OAuth2 授权服务器。
React 应用程序将是一个普通的 public Web 应用程序,其中身份验证需要用户名和密码凭据。
我应该使用哪种补助金?资源所有者密码凭据授予是一个不错的选择吗?
有很多因素可以影响处理此问题的最佳方法;根据提供的信息,可以展示适用的选项并提出一些建议,但是如果没有所有上下文就很难做出最终的选择。
TL;DR On a browser-based application where end-users are issued username/password credentials and the applications needs to make calls to an API on behalf of the users you can either use the implicit grant or the resource owner password credentials grant (ROPC). The use of ROPC should be further restricted to client applications where there is an high degree of trust between the application and the entity that controls the user's credentials.
客户端凭据的使用完全超出范围,对于基于浏览器的应用程序而言,授权代码授予可能不会比隐式授予带来任何好处,因此通过排除过程,我们有两个合格的授予。
资源所有者密码凭据授予
(检查 Auth0 ROPC Overview 了解有关步骤的完整详细信息)
这项授权主要是在 OAuth 2.0 中引入的,作为一种为存储 username/password 凭据的应用程序提供无缝迁移路径的方式,以便在不不断要求用户提供凭据的情况下访问用户资源.正如您可以想象的那样,以纯文本形式存储密码是一个很大的禁忌,所以如果有一种方法可以通过非常简单的迁移路径(使用此授权将存储的凭据与令牌交换)来停止这样做将是一个很大的改进。
但是,访问令牌会过期,因此继续获取新访问令牌的方法是通过使用刷新令牌。将刷新令牌保存在存储中比密码更好,但它们通常仍然是长期存在的凭据,因此存储这些类型的令牌的行为有额外的安全考虑。因此,通常不建议 keep/use 在基于浏览器的应用程序中刷新令牌。
如果您选择此授权,您需要决定访问令牌过期时会发生什么。
隐式授权
(检查 Auth0 Implicit Grant Overview 了解有关步骤的完整详细信息)
此授权是授权代码授权的简化版本,专门针对在浏览器环境中实现的应用程序,因此它似乎更适合您的场景。
另一个好处是,在第一次用户身份验证之后,可以透明地获取新的访问令牌,更具体地说,通过让授权服务器管理会话的某些概念,对已经过身份验证的用户的任何隐式授权请求同意提供无需用户交互即可自动完成的授权。
结论(也就是基于我所知道的意见可能还不够)
作为一般性建议,我会选择隐式授权而不是 ROPC 授权。
我有点困惑,因为我不知道在我的特定情况下应该使用哪种类型的赠款。
我有一个前端 React 应用程序,后端使用 Spring Boot.此外,还有一个独立的 Spring OAuth2 授权服务器。
React 应用程序将是一个普通的 public Web 应用程序,其中身份验证需要用户名和密码凭据。
我应该使用哪种补助金?资源所有者密码凭据授予是一个不错的选择吗?
有很多因素可以影响处理此问题的最佳方法;根据提供的信息,可以展示适用的选项并提出一些建议,但是如果没有所有上下文就很难做出最终的选择。
TL;DR On a browser-based application where end-users are issued username/password credentials and the applications needs to make calls to an API on behalf of the users you can either use the implicit grant or the resource owner password credentials grant (ROPC). The use of ROPC should be further restricted to client applications where there is an high degree of trust between the application and the entity that controls the user's credentials.
客户端凭据的使用完全超出范围,对于基于浏览器的应用程序而言,授权代码授予可能不会比隐式授予带来任何好处,因此通过排除过程,我们有两个合格的授予。
资源所有者密码凭据授予
(检查 Auth0 ROPC Overview 了解有关步骤的完整详细信息)
这项授权主要是在 OAuth 2.0 中引入的,作为一种为存储 username/password 凭据的应用程序提供无缝迁移路径的方式,以便在不不断要求用户提供凭据的情况下访问用户资源.正如您可以想象的那样,以纯文本形式存储密码是一个很大的禁忌,所以如果有一种方法可以通过非常简单的迁移路径(使用此授权将存储的凭据与令牌交换)来停止这样做将是一个很大的改进。
但是,访问令牌会过期,因此继续获取新访问令牌的方法是通过使用刷新令牌。将刷新令牌保存在存储中比密码更好,但它们通常仍然是长期存在的凭据,因此存储这些类型的令牌的行为有额外的安全考虑。因此,通常不建议 keep/use 在基于浏览器的应用程序中刷新令牌。
如果您选择此授权,您需要决定访问令牌过期时会发生什么。
隐式授权
(检查 Auth0 Implicit Grant Overview 了解有关步骤的完整详细信息)
此授权是授权代码授权的简化版本,专门针对在浏览器环境中实现的应用程序,因此它似乎更适合您的场景。
另一个好处是,在第一次用户身份验证之后,可以透明地获取新的访问令牌,更具体地说,通过让授权服务器管理会话的某些概念,对已经过身份验证的用户的任何隐式授权请求同意提供无需用户交互即可自动完成的授权。
结论(也就是基于我所知道的意见可能还不够)
作为一般性建议,我会选择隐式授权而不是 ROPC 授权。