一尘不染

Spring Security OAuth 2.0-授权代码授予始终需要客户端机密

spring

根据规范,不要求使用授权码补助金的令牌的请求作为要被认证,只要client_id是包含在请求和所述client_id是相同的一个用于生成所述代码。但是,使用Spring Security OAuth 2.0实现,/oauth/token即使从未为客户端分配秘密,端点上始终总是需要基本身份验证。

似乎由于接口中的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节中的说明,通过授权服务器进行身份验证。


阅读 781

收藏
2020-04-19

共1个答案

一尘不染

使用allowFormAuthenticationForClients()下面的代码示例中所示的方法,可以使用表单参数而不是基本身份验证来验证客户端。

class AuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {

    @Override
    void configure(AuthorizationServerSecurityConfigurer security) {
        security
                .tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()")
                .allowFormAuthenticationForClients()
    }
}

allowFormAuthenticationForClients()方法触发的添加,ClientCredentialsTokenEndpointFilter从而允许通过表单参数进行身份验证。

2020-04-19