J'essaie d'utiliser spring-security-oauth2.0
avec une configuration basée sur Java. Ma configuration est terminée, mais lorsque je déploie une application sur Tomcat et que je clique sur l'URL /oauth/token
du jeton d'accès, Oauth
génère l'erreur suivante:
<oauth>
<error_description>Full authentication is required to access this resource</error_description>
<error>unauthorized</error>
</oauth>
Ma configuration est sur Git hub, veuillez cliquer sur le lien
Le code est volumineux, référez-vous à git. J'utilise le client postier chrome pour envoyer une demande. ce qui suit est ma demande.
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
L'erreur est juste comme, l'URL est sécurisée par Oauth
, mais dans la configuration, je donne la permission à tous pour accéder à cette URL. Quel est ce problème?
Le client_id
et le client_secret
, par défaut, doivent être placés dans l'en-tête Authorization et non dans le corps du formulaire.
client_id
et client_secret
, avec deux points entre eux: [email protected]:12345678
.YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
Par défaut, Spring OAuth requiert une authentification HTTP de base. Si vous voulez le désactiver avec une configuration basée sur Java, vous devez autoriser l'authentification par formulaire pour les clients comme ceci:
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.allowFormAuthenticationForClients();
}
}
En effet, par défaut, le point final /oauth/token
est protégé via Authentification d'accès de base .
Tout ce que vous avez à faire est d’ajouter l’en-tête Authorization
à votre demande.
Vous pouvez facilement le tester avec un outil tel que curl
en lançant la commande suivante:
curl.exe --user [email protected]:12345678 http://localhost:8081/dummy-project-web/oauth/token?grant_type=client_credentials
Avec Spring OAuth 2.0.7-RELEASE, la commande suivante fonctionne pour moi
curl -v -u [email protected]:12345678 -d "grant_type=client_credentials" http://localhost:9999/uaa/oauth/token
Cela fonctionne également avec Chrome POSTMAN, assurez-vous simplement que votre client et votre secret sont dans l'onglet "Authentification de base", définissez la méthode sur "POST" et ajoutez le type de subvention dans l'onglet "données de formulaire".
Vous devez pré-authentifier le jeton apis "/oauth/token"
étendre ResourceServerConfigurerAdapter
et remplacer configure function
pour ce faire.
par exemple:
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/oauth/token").permitAll().
anyRequest().authenticated();