spring security oauth2 client_credentials 仅流程

Posted

技术标签:

【中文标题】spring security oauth2 client_credentials 仅流程【英文标题】:spring security oauth2 client_credentials flow only 【发布时间】:2015-11-27 07:13:49 【问题描述】:

我正在尝试使用 Spring Boot 创建仅支持客户端凭据流的 oauth2 授权。据我了解,客户端直接访问 /oauth/token 端点。有没有办法在 Spring Boot 中禁用 /oauth/authorize 端点并允许直接访问 /oauth/token 而无需先获得完全授权?

@Configuration
@EnableAuthorizationServer
public class OAuth2Configuration extends AuthorizationServerConfigurerAdapter 

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception 
        // TODO: Is there something I can do here to disable /oauth/authorize?
        endpoints.authenticationManager(authenticationManager);
    

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception 
        // client details configuration
    


【问题讨论】:

【参考方案1】:

我不能说禁用授权端点,但您是对的,您可以使用客户端凭据流直接进入令牌端点。我可能在重申您已经知道的内容,但是“客户端”的凭据(client_id/client_secret)与“用户”的凭据(用户名/密码)不同。 “用户”转到授权端点,以便客户端可以从令牌端点获取令牌。 “客户端”(在客户端凭据流中)直接将客户端凭据提供给令牌端点。是否需要禁用授权端点?

因此,对于 client_credentials 流程,您无需先去授权(您无需禁用它)。如果您的 spring-boot 授权服务器位于 localhost:8080 上,以下是您如何卷曲您的令牌:

curl -H "授权:基本 d2VhcHA6" -X POST http://localhost:8080/oauth/token?grant_type=client_credentials

其中 d2VhcHA6 是您的“client_id:client_secret”的 base64 编码

【讨论】:

谢谢。我只是想避免暴露一个不会被使用的端点。但是,它的其余部分适用于 client_credentials。

以上是关于spring security oauth2 client_credentials 仅流程的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security Oauth2

Spring-Security OAuth2 设置 - 无法找到 oauth2 命名空间处理程序

Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt

如何使用spring-security,oauth2调整实体的正确登录?

针对授权标头的Spring Security OAuth2 CORS问题

Spring Security---Oauth2详解