resource full example error enableauthorizationserver java oauth-2.0 unauthorized spring-security-oauth2

java - full - spring boot spring security oauth2 example



Spring-Security-Oauth2: se requiere autenticación completa para acceder a este recurso (5)

Estoy tratando de usar spring-security-oauth2.0 con una configuración basada en Java. Mi configuración está terminada, pero cuando implemento la aplicación en /oauth/token url /oauth/token para el token de acceso, Oauth genera el siguiente error:

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

Mi configuración está en Git hub, por favor haga clic en el enlace

El código es grande, por lo que consulte git. Estoy usando el cliente del cartero de Chrome para enviar la solicitud. Seguir es mi petición.

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

El error es igual que, la URL está segura por Oauth , pero en la configuración, doy todos los permisos para acceder a esta URL. ¿Qué problema real es este?


Con Spring OAuth 2.0.7-RELEASE el siguiente comando funciona para mí

curl -v -u [email protected]:12345678 -d "grant_type=client_credentials" http://localhost:9999/uaa/oauth/token

También funciona con Chrome POSTMAN, solo asegúrese de que el cliente y el secreto estén en la pestaña "Autenticación básica", configure el método en "POST" y agregue el tipo de concesión en la pestaña "datos de formulario".


El motivo es que, de forma predeterminada, el punto final /oauth/token está protegido mediante la autenticación de acceso básico .

Todo lo que necesita hacer es agregar el encabezado de Authorization a su solicitud.

Puede probarlo fácilmente con una herramienta como curl emitiendo el siguiente comando:

curl.exe --user [email protected]:12345678 http://localhost:8081/dummy-project-web/oauth/token?grant_type=client_credentials


Por defecto, Spring OAuth requiere autenticación HTTP básica. Si desea desactivarlo con la configuración basada en Java, debe permitir la autenticación de formularios para clientes como este:

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


configurar management.security.enabled=false en application.properties resolvió el problema por mí.


client_secret y client_secret , de forma predeterminada, deben ir en el encabezado de Autorización, no en el cuerpo de forma urlencoded.

  1. Concatene su client_id y client_secret , con dos puntos entre ellos: [email protected]:12345678 .
  2. Base 64 codifica el resultado: YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
  3. Establezca el encabezado de Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==