我们如何禁用 /oauth/token 的 GET 选项端点,并且只在 Spring Security 中保留 POST 选项?

Posted

技术标签:

【中文标题】我们如何禁用 /oauth/token 的 GET 选项端点,并且只在 Spring Security 中保留 POST 选项?【英文标题】:How do we disable GET option endpoint for /oauth/token and only keep POST option in spring security? 【发布时间】:2019-08-19 13:54:40 【问题描述】:

在我的 spring boot 项目中,我使用 spring 'spring-cloud-starter-oauth2' 依赖项来启用使用 JWT 令牌的 oauth 安全性。该依赖项使用 GET 和 POST 选项公开了 /oauth/token 的两个端点。如何禁用 GET 端点并仅保留 POST 选项? 我的大摇大摆的 UI 并显示了 GET 和 POST 端点,这就是我注意到它的方式。

【问题讨论】:

“GET”端点有什么问题?为什么要禁用它? 这是我公司的要求。他们只想要 /oauth/token 的 POST 端点。我尝试摆弄 AuthorizationServerEndpointsConfigurer 但它没有公开任何禁用端点的功能。 AFAIK 这是不可能的。您将编写自己的 OAuth2 实现(例如,在 GitHub 上 fork Spring Security OAuth2 项目)。 【参考方案1】:

您可以使用以下配置显式仅允许 /oauth/token 端点上的 POST 方法:

@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter 

  @Override
  public void configure(AuthorizationServerEndpointsConfigurer endpoints) 
    endpoints.allowedTokenEndpointRequestMethods(HttpMethod.POST);
  


【讨论】:

以上是关于我们如何禁用 /oauth/token 的 GET 选项端点,并且只在 Spring Security 中保留 POST 选项?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Oauth Token 存储机制

Spring OAuth2 禁用 TokenEndpoint 的 HTTP 基本身份验证

Java Spring Security:401 Unauthorized for token OAuth2 端点

/oauth/authorize 和 /oauth/token 在 Spring OAuth 中如何交互?

春天禁用@EnableResourceServer

如何使用 XML 使用 Spring Security Oauth2 启用 /oauth/check_token