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.
- Concatene su
client_id
yclient_secret
, con dos puntos entre ellos:[email protected]:12345678
. - Base 64 codifica el resultado:
YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
- Establezca el encabezado de
Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==