【问题标题】:What's going on in Spring Boot OAuth2 `AbstractTokenGranter.validateGrantType()` method?Spring Boot OAuth2 `AbstractTokenGranter.validateGrantType()` 方法中发生了什么?
【发布时间】:2018-08-22 16:30:58
【问题描述】:

我正在使用 OAuth2 保护 Spring Cloud/Spring Boot 微服务,并且所有似乎都在授权服务器中很好地连接起来。但是,当我通过邮递员向 /oauth/token 发送 POST 请求以获取带有 grant_type = client_credentials 的访问令牌时,我得到以下响应:

{
    "error": "invalid_client",
    "error_description": "Unauthorized grant type: client_credentials"
}

但是,在注册 OAuth 客户端的 oauth_client_details 数据库表中,我为发出此请求的当前客户端设置了以下设置;

authorized_grant_types = `password, authorization_code, client_credentials, refresh_token`

所以我冒昧地调试了 Spring Boot 的整个 oauth 流程,发现AbstractTokenGranter.validateGrantType(String grantType, ClientDetails clientDetails) 方法中发生了一些非常有趣的事情。见下图;

所以我想了解这里可能发生的事情,因为这对我来说实际上是深不可测的。

【问题讨论】:

标签: java spring-boot spring-security oauth-2.0 spring-security-oauth2


【解决方案1】:

看起来您正在使用 RDBMS。在oauth_client_details 表中插入客户记录时,请确保authorized_grant_typescolumn 的值中没有空格。

值应该是这样的(逗号后没有空格):

'password,client_credentials,refresh_token'

【讨论】:

  • Holy Smokes!... 这让我整整呆了 1.5 天... 并认为这只是逗号分隔列表中空格的 cos ???... Argghhh !!!。 ..现在我意识到,当我查看那个调试器时,空间实际上就在那里,我什至没有注意到。谢谢@Vijay,你摇滚!
  • 我觉得你,我也曾经几乎花了一整天的时间来弄清楚这一点。我很高兴能提供帮助。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2021-08-24
  • 2020-12-22
  • 2013-11-23
  • 2017-05-15
  • 2021-10-13
  • 2010-11-09
相关资源
最近更新 更多