2017-09-29 6 views
0

私はangle-cliを使ってAngular 4アプリを開発しました。私は、クライアントにアクセスするためにキーロックaccess_tokenを必要とするスプリングブートサーバーを持っています。私がエンドポイントを呼び出すと、Angularサービスクラスのトークン(現在はハードコードされています)にアタッチします。access_token from Angular2 app

これは問題なく動作しますが、今はハードコードされたトークンを取り除く必要があります。

私は、許可タイプ、クライアントID、クライアント秘密、およびapplication/x-www-form-urlencodedコンテンツタイプを取るkeycloak URLを持っています。私は郵便配達員からこのトークンを受け取りました。

私が探しているのは、バックエンドサービスへのHTTPコールを行うたびに、キークローックからその大きなトークンを取得して、認証ヘッダにトークンをプログラムで添付するための最良の方法です。

私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); 

は}

このコードは、2つのエラー 1いいえ 'アクセス制御、原点許可' ヘッダは、要求されたリソース上に存在する

  • を与えます"invalid_request" gratn_typeが見つかりません
  • 大歓迎です!

    +1

    は '許可タイプである1 found'ないgrant_type見る角度-CLIプロジェクトにプロキシサーバーを作成する方法を理解するには? –

    +0

    "tha grant type"の値がgrant-typeであることを確認しながら、keycloakコンストラクタの最初の引数secuirityの理由で値を変更しました。しかし、私は正しい価値を伝えています。 – Sourav

    +0

    body = 'grant_type = yourGrantType&client_id = yourclientId&client_secret = yourclientSecrete'のようにボディを変更した後。私はネットワークの呼び出しをチェックしたときに応答のトークンを見ることができますが、クライアントはトークンを受け取っていないため、上記のCORSエラーを表示して、定義されていないconsole.log(応答) – Sourav

    答えて

    0

    私は問題を理解した、それは私が体を送る方法です。私のpostメソッドでは、grant_type、client_id、およびclient_secreteでラップされたkeyclokオブジェクトであるボディを送信しています。これは私がこの問題を解決

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

    以下のフォーマットで体を送信するために必要な、コンテンツタイプは「アプリケーション/ x-www-form-urlencodedの」ですので、コンテンツタイプは、アプリケーション/ JSONである場合にのみ機能します2 thatsはgrant_typeがありません。 CROSの問題を修正するために、私はプロキシサーバーを作成しました。

    「INVALID_REQUEST」 here