2017-02-03 14 views
1

Angular 2ベースのWebアプリケーションがあり、セキュアなREST-APIからデータを取得します。角度2からの認証リダイレクションの処理

最初のREST-APIリクエストでは、GETリクエストを開始するためのリダイレクト(302)応答のあるURLを返します。角度2は自動的にこのURLにリダイレクトされず、要求は失敗します。 REST-APIへのログインは、集中認証システムを使用して既に行われており、このリダイレクトではログインページを表示してユーザーからの入力を取得する必要はありません。 GETリクエストを呼び出すだけでよい。

提供されたリダイレクトURL(HTTP:302レスポンス)からGETリクエストを開始し、データを自動的に取得するにはどうすればよいですか?

ブラウザからREST-API呼び出しを行うと、自動的に指定されたURLにリダイレクトされ、データが返されます。 REST-APIの呼び出し

import { Injectable } from '@angular/core'; 
import { BehaviorSubject } from 'rxjs'; 
import { Response, Headers, RequestOptionsArgs, URLSearchParams, RequestOptions } from '@angular/http'; 

this.http.get(url, options) 
      .subscribe(
       (response: Response) => { 
       // handle response 
       }, 
       (error: any) => { 
       //handle error 
       } 
      ); 

ブラウザのコンソールエラー

enter image description here

リクエストとレスポンス enter image description here

答えて

0

を開始するための

角度ソースのが、私は現在、これと同じ問題に直面しています別の理由。私は複数のマイクロサービスを持っており、角度フロントエンドはそのルータについて知る必要があるので、ルータを使用しています。角度のあるフロントエンドが特定のマイクロサービスを必要とするとき、私はちょうど正しいマイクロサービスにリダイレクトするルータを呼び出します。これの利点は、フロントエンドは1つのマイクロサービスについて知る必要があり、他のマイクロサービスを自由に追加、削除、名前変更などができることです。

これは、私のルーターマイクロサービスがほぼすべてに対して307応答を返すことを意味します。角度のある側で実装する方法は、このHTTPステータスコードの応答をテストすることです。私は307を取得した場合、私はそれが私のルーターのリダイレクトだと知っています。次に、私は場所のヘッダーを要求し、その場所に私の要求を再送信することができます。

これはまったく同じように動作するはずですが、リダイレクトHTTPステータスコードの応答をテストするだけです。リダイレクトコードのいずれかを取得した場合は、応答ヘッダーから場所を取得し、その場所に要求を再送信します。