Nav*_*wat 6 java spring oauth spring-security spring-security-oauth2
我有一个基于 Spring Security OAuth 2.0 的应用程序,配置了 JDBC 和 LDAP。根据 OAuth 2.0 规范,客户端密码必须。
当我使用以下 URL 生成令牌时,它会生成令牌并且工作正常:
/oauth/token?grant_type=password&client_secret=test&client_id=test&username=test&password=test
Run Code Online (Sandbox Code Playgroud)
当我尝试在没有client_secret它的情况下生成令牌时:
401:未经授权
error_description: "错误的用户凭据"
但我想生成没有client_secret像的令牌:
/oauth/token?grant_type=password&client_secret=test&client_id=test&username=test&password=test
Run Code Online (Sandbox Code Playgroud)
securityConfig.java:
/oauth/token?grant_type=password&username=test&password=test
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有简单的方法可以解决您的问题。Spring security对该标准的解释非常严格:
这是 OAuth2 规范RFC 6749 第 4.3.2 节(资源所有者密码凭证授予 - 访问令牌请求)的引用:
如果客户端类型是机密的或者向客户端颁发了客户端
凭据(或分配了其他身份验证要求),则
客户端必须按照第 3.2.1 节中所述向授权服务器进行身份验证
。
对于 Spring Security,密码授予始终属于这一类。第 3.2.1 节需要客户端 ID 和客户端密码。
Spring Security文档也是这样的: 28.1.1授权服务器
除非您想更改 Spring Security 的 OAuth2 的身份验证逻辑(不推荐),否则您会陷入困境。
从我的角度来看没有问题。客户端 ID 和密码不需要您花费任何费用,并且可以为您的应用程序带来更多的安全性。
| 归档时间: |
|
| 查看次数: |
4516 次 |
| 最近记录: |