2017-09-29 2 views
0

J'ai développé une application Angular 4 en utilisant angular-cli, j'ai un serveur spring-boot qui nécessite keylock access_token pour donner accès au client. Lorsque j'appelle des points d'extrémité, j'attache le jeton (actuellement codé en dur) dans la classe de service Angular.access_token de Keycloak dans l'application Angular2

Cela fonctionne très bien, mais maintenant je dois me débarrasser du jeton codé en dur.

J'ai le type de subvention, l'ID client, le client secrete et l'URL keycloak qui prend le type de contenu application/x-www-form-urlencoded. J'ai reçu ce jeton du facteur. Ce que je cherche est la meilleure façon d'obtenir ce gros jeton de keyclock, puis attacher le jeton à l'en-tête Authorization par programmation chaque fois que je fais un appel HTTP à mon service backend.

quelque chose comme ça

dans mes keyclok-service.ts

header = new Headers({ 
'Content-Type': 'application/x-www-form-urlencoded', 

});

options = new RequestOptions({headers: this.header}); 

createAccessToken() { 
const keyclock = new Keyclock('the grant type', 'the client id ', 'the cleitn secret'); 

return this.http.post('https:/keyclockserverurl/auth/realms/env/protocol/openid-connect/token', keyclock, this.options); 

}

Ce code donne deux erreurs 1. Non 'Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée

  1. "invalid_request" gratn_type non trouvé

Aide sera grandement appréciée!

+1

' « invalid_request » grant_type pas found' qui est le type de subvention? –

+0

le premier argument dans le constructeur keycloak comme vous voyez la valeur "tha grant type" est le type-grant j'ai changé la valeur pour raison de secuirity. Mais je passe la bonne valeur. – Sourav

+0

après avoir changé le corps comme ce corps = 'grant_type = yourGrantType & client_id = votreclientId & client_secret = yourclientSecrete'; Je peux voir le jeton dans la réponse quand j'ai vérifié l'appel réseau, mais le client ne reçoit pas le jeton et j'ai essayé d'imprimer le jeton en utilisant console.log (réponse) il imprime indéfini et montre l'erreur CORS mentionnée ci-dessus – Sourav

Répondre

0

J'ai compris le problème, c'est la façon dont j'envoie le corps. Comme vous le voyez dans ma méthode post, j'envoie le corps qui est un objet keyclok entouré de grant_type, client_id et client_secrete. Cela ne fonctionne que si le type de contenu est une application/JSON, car le type de contenu est « application/x-www-form-urlencoded », je devais envoyer le corps dans le format ci-dessous

body = 'grant_type=yourGrantType&client_id=yourclientId&client_secret=yourclientSecrete'; 

Ceci a résolu le problème 2 thats grant_type manquant. Afin de résoudre le problème CROS, j'ai créé un serveur proxy.

Pour comprendre comment créer serveur proxy dans le projet angulaire cli voir here