根据规范,不要求使用授权码补助金的令牌的请求作为要被认证,只要client_id是包含在请求和所述client_id是相同的一个用于生成所述代码。但是,使用Spring Security OAuth 2.0实现,/oauth/token即使从未为客户端分配秘密,端点上始终总是需要基本身份验证。
client_id
/oauth/token
似乎由于接口中的isSecretRequired()方法,似乎支持允许客户端没有秘密ClientDetails。为了使没有秘密的客户端能够在/oauth/tokenURL上进行身份验证,我该怎么做?
isSecretRequired()
ClientDetails
/oauth/tokenURL
4.1.3。访问令牌请求
客户端通过 按照附录B 使用“ application / x-www-form-urlencoded” 格式通过HTTP 请求实体正文中的UTF-8字符编码发送以下参数来向令牌端点发出请求:
grant_type必填。值必须设置为“ authorization_code”。
所需的代码。从授权服务器收到的授权码。
redirect_uri要求,如果“ redirect_uri”参数如第4.1.1节所述包含在授权请求中,则它们的值必须相同。
如果客户端未按照第3.2.1节中所述向授权服务器进行身份验证,则需要client_id。
如果客户端类型是机密的,或者向客户端颁发了客户端凭据(或分配了其他身份验证要求),则 客户端必须按照 3.2.1节中的说明,通过授权服务器进行身份验证。
使用allowFormAuthenticationForClients()下面的代码示例中所示的方法,可以使用表单参数而不是基本身份验证来验证客户端。
allowFormAuthenticationForClients()
class AuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter { @Override void configure(AuthorizationServerSecurityConfigurer security) { security .tokenKeyAccess("permitAll()") .checkTokenAccess("isAuthenticated()") .allowFormAuthenticationForClients() } }
该allowFormAuthenticationForClients()方法触发的添加,ClientCredentialsTokenEndpointFilter从而允许通过表单参数进行身份验证。
ClientCredentialsTokenEndpointFilter