当前位置: 首页 > 知识库问答 >
问题:

Spring启动的OAuth2`AbstractTokenGranter.ValidateGrantType()`方法是怎么回事?

仰经武
2023-03-14

我正在使用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)方法中发生了一些非常有趣的事情。见下图;

所以我想知道这里可能发生了什么,因为对我来说,这几乎是深不可测的。

共有1个答案

哈和惬
2023-03-14

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

值应如下所示(逗号后无空格):

'password,client_credentials,refresh_token'
 类似资料:
  • 第一次启动说是生成API密钥什么的失败, 然后也不能通过9200访问, 之后再启动就没有异常提示了, 但依旧不能访问. 只有这个提示 第一次启动完整的日志如下:

  • 在spring boot,有一些在模式上的JAR。所有这些罐子都不包含任何包裹。它们有什么用? 在Maven POM中,添加了以下依赖项: org.springframework.boot:spring-boot-starter-web org.springframework.boot:spring-boot-starter-acture org.springframework.boot:spri

  • 我刚刚遇到了一个奇怪的问题,这是我第一次在服务器上部署spring boot应用程序 像往常一样,我使用java命令java-jar myApp运行应用程序。罐子 过了一会儿,我看到应用程序停止了,没有留下任何错误消息。 所以我不知道问题出在哪里, 可能的原因是java内存不够,所以我将其增加到7GB,因为它有套接字 但问题依然存在 请注意,我没有docker,服务器是Amazon light s

  • 问题内容: 我在中有一个列表对象。长按一个项目时,我要显示一个对话框,其中包含单击的项目中的数据。 所述使用数据的每个项目的结合和我能够显示用Log长按当从所选择的项目数据。 但是,当尝试显示对话框时,您需要转到,建议不要在对象中使用。 那么如何显示对话框? 谢谢,Ove 问题答案: 从概念上讲,ViewModel使我误认为是启动Dialog的错误位置。为了更简洁地执行此操作,我将把Recycle

  • 问题内容: 我正在阅读有效的Java,它在各处都用于换行符。我已经相当成功地在Java程序中使用了换行符。 哪个是“正确”的?这有什么错?Java为什么要更改此C约定? 问题答案: 从快速的Google: 还有一个说明符与参数不对应。输出行的是“%n”。在某些情况下,也可以使用“ \ n”,但是由于“%n”总是输出正确的平台特定的行分隔符,因此它可以跨平台移植,而“ \ n”则不能。

  • 设置是这样的:作为身份验证服务器,我有一个密钥斗篷,作为API-Gateway,我使用Spring-云网关,NetflixEureka客户端作为发现客户端。当然,我需要用户管理,一个“简单”的注册,用于未经身份验证的人员,并将人员注册为具有管理员角色的用户。资源服务器的WebSecurityConfig(用户管理服务)看起来像这样: 注册控制器看起来像这样: 因此,如果一切都在运行,我向本地主机上