Spring-Security-Oauth2:需要完全身份验证才能访问此资源

我正在尝试与基于Java的配置一起使用。我的配置已完成,但是当我在tomcat上部署应用程序并点击访问令牌的URL时,生成以下错误:spring-security-oauth2.0/oauth/tokenOauth

<oauth>
<error_description>Full authentication is required to access this resource</error_description>
<error>unauthorized</error>
</oauth>

我的配置在 Git 中心,请点击链接

代码很大,所以参考git。我正在使用chrome postman客户端发送请求。Follwing是我的要求。

POST /dummy-project-web/oauth/token HTTP/1.1
Host: localhost:8081
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=abc%40gmail.com&client_secret=12345678 

错误就像,URL是由 保护的,但在配置中,我授予访问此URL的所有权限。这个问题到底是什么?Oauth


答案 1

默认情况下,和 应位于授权标头中,而不是 form-urlencoded 正文。client_idclient_secret

  1. 将 your 和 连接起来,并在它们之间用冒号连接:。client_idclient_secretabc@gmail.com:12345678
  2. 以 64 为基数对结果进行编码:YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
  3. 设置授权标头:Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==

答案 2

默认情况下,Spring OAuth需要基本的HTTP身份验证。如果要使用基于 Java 的配置将其关闭,则必须允许对客户端进行表单身份验证,如下所示:

@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
  @Override
  public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
    oauthServer.allowFormAuthenticationForClients();
  }
}

推荐