web-dev-qa-db-fra.com

Spring-Security-Oauth2: Une authentification complète est requise pour accéder à cette ressource.

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?

21

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.

  1. Concaténer votre client_id et client_secret, avec deux points entre eux: [email protected]:12345678.
  2. Base 64 encoder le résultat: YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
  3. Définissez l'en-tête d'autorisation: Authorization: Basic YWJjQGdtYWlsLmNvbToxMjM0NTY3OA==
19
GaryF

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();
  }
}
15
maniekq

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

5
Marco Lenzo

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".

1
Stackee007

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();
0
compiler123