0

J'ai un serveur oauth sécurisé avec 'spring-cloud-oauth2' et 'spring-cloud-security' et l'application est une application de démarrage à ressort. J'essaie d'obtenir access_token d'une application angulaire 2, c'est-à-dire que je veux me connecter à partir de l'application angulaire 2. Dans mon serveur oauth j'ai un client-id = microservice et client-secret = microservicesecret. J'ai vérifié le serveur oauth du facteur où, dans la section d'autorisation, pour le nom d'utilisateur et le mot de passe, j'utilise respectivement le client-id et le client-secret. Et dans la section body, j'utilise grant_type = mot de passe, client_id = microservice, username = [email protected], password = passw0rd et tout fonctionne très bien.Comment connecter une application angulaire 2 avec un serveur spring-oauth2?

Mais, j'ai du mal à utiliser la configuration dans l'application angulaire 2. J'ai utilisé les extraits de code suivants.

userLogin(){ 
    console.log("In the userLogin()"); 
    var username:string='microservice'; 
    var password:string='microservicesecret'; 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    headers.append('grant_type','password'); 
    headers.append('client_id','microservice'); 
    headers.append('client_secret','microservicesecret'); 
    headers.append('username',this.user.userEmail); 
    headers.append('password',this.userPassword); 
    console.log("User"); 
    console.log(this.user); 
    console.log(headers); 
    console.log(JSON.stringify({username:username,password:password})); 
    var data = "username=" + username + "&password=" + password ; 


    this.http 
     .post(this.loginUrl, 
     JSON.stringify({user,password}), 
     {headers} 
    ) 
     .map(res=>res.json()) 
     .map((res)=>{ 
     if(res.success){ 
      console.log("Success"); 
      localStorage.setItem('access_token',res.access_token); 
      console.log("Access token"); 
      console.log(res.access_token); 
     } 
     }); 
    } 

Ici userEmail et userPassword sont insérés par l'utilisateur. L'URL jeton est

loginUrl:string="http://localhost:9000/services/oauth/token"; 

Mais, je suis gettng erreur 401. J'ai besoin de solution.

Répondre

1

Avez-vous essayé d'obtenir un jeton via Postman ou quelque chose de similaire? Il y a beaucoup de raisons d'obtenir HTTP 401. Si vous postez le journal du serveur d'authentification de printemps et demandez des détails, il serait plus clair de comprendre. Je partage ma fonction de connexion fonctionne bien via Spring Boot Auth Server. J'utilise Authorization Hedar avec Basic BASE64 Token au lieu d'utiliser 'client_id' et 'client_secrete'.

public login(username: string, password: string): Observable<TokenModel> { 
let headers = new Headers(); 
headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
headers.append('Accept', 'application/json'); 
headers.append('Authorization', '**Basic BASE64TOKEN!!**'); 

let options = new RequestOptions({ headers: headers }); 

let params = new URLSearchParams(); 
params.append('username', username.valueOf()); 
params.append('password', password.valueOf()); 
params.append('scope', this.scope); 
params.append('grant_type', this.grant_type); 

return this.http.post(this.accessTokenUri, params.toString(), options) 
    .map(response => { return <TokenModel>response.json(); }) 
    .do(token => { 
    this.storageService.setStorage('id_token', token.access_token); 
    }) 
    .catch(error => { return this.handleError(error); }); 

}