我目前正在尝试使用 Spring Security OAuth 来实现具有 OAuth2 身份验证的 Web 服务(API)。据我了解,给定一个用户、一个客户端应用程序和一个服务器,身份验证过程如下:
- 用户通过客户端向服务器请求资源
- 客户端从服务器检索请求 token
- 服务器使用临时请求 token 和重定向 URL 进行响应
- 客户端加载网页(重定向 URL)并让用户输入凭据以验证请求 token 。表单输入被发送到服务器,客户端未知输入。
- 服务器回复授权码,并将其交给客户端
- 客户端使用授权代码来检索访问 token (如果需要,还可以选择刷新 token )
- 用户将访问 token 交给客户端
- 客户端使用访问 token 来检索请求的资源
在 Spring OAuth 中,request an access token 有三种授权类型:
授权码,也就是我上面描述的方法,刷新 token 和用户凭据。我不知道通过用户凭据检索是如何工作的,它与通过刷新 token 检索相似吗?
最佳答案
您上面的一些陈述是不正确的。如果您再次查看 OAuth2 规范,这可能是个好主意:https://www.rfc-editor.org/rfc/rfc6749
为了集中精力解决您的问题,我仅引用您问题的最后一段。
OAuth2 支持4 种授权类型,即“授权代码”、“隐式”、“资源所有者密码凭据”和“客户端凭据”。您所说的“用户凭据”是“资源所有者密码凭据”。在这种授权类型中,您失去了 OAuth 的好处,即不必将资源所有者(也称为用户)凭据移交给客户端。然而,它仍然具有不必在客户端上存储密码并为每个资源请求发送密码的优点,因为使用了 token 。处理流程如下:
- 资源所有者向客户端发送凭据
- 客户端将凭据发送到授权服务器
- 服务器返回访问 token (并且可选 刷新 token )
- 客户端在后续请求中使用访问 token 资源服务器
所以,是的,您可以说资源所有者密码凭据授予的流程与客户端已经拥有有效的刷新 token (来自该授予)时的流程类似。
关于oauth-2.0 - Spring OAuth2 中的身份验证类型 : How does authentication via user credentials work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35717617/