2017-05-02 6 views
0

zuulプロキシサーバーを使用してAPIゲートウェイを実装しようとしています。 基本的には、クライアントがゲートウェイを介してサーバーのリソースを要求すると、ゲートウェイは単にクライアントセッションが存在するかどうかを確認し、そうでなければSSOサーバーに認証を委任するということです。ただし、Zuulフィルタは常にSSOサーバーにリダイレクトせずにリソースサーバーに入ります。spring zuul filterからリモートURLにリダイレクト

は、以下のいずれかの欠けている部分が、おかげで私の目標を達成するためにあれば教えてくださいリモートSSO

public Object run() { 
    try { 
     RequestContext context = RequestContext.getCurrentContext(); 
     HttpServletRequest request = RequestContext.getCurrentContext().getRequest(); 
     HttpServletResponse response = RequestContext.getCurrentContext().getResponse(); 
     // step 1: check to see whether session exist, if not redirect to federation for authentication 
     // if session already exist then adding sessionId to cookie to forwarding to targeting service 


     // TODO: comment out for now. 
     HttpSession currentSession = context.getRequest().getSession(false); 
     String samlAuthenWithRelayUrl = populateFedUrlWithRelay(request); 


     if (currentSession==null){ 

      // redirect to federation with relay URL 
      context.setRouteHost(new URL(samlAuthenWithRelayUrl)); 
      //response.sendRedirect(samlAuthenWithRelayUrl); 
     } else{ 
      HttpSession httpSession =request.getSession(); 
      context.addZuulRequestHeader(AppConstants.PHOENIX_COOKIE, "SESSION=" + httpSession.getId()); 

     } 

    } catch (Exception ex) { 
     log.error(ex.getMessage(), ex); 

     // redirect to error page 
    } 

    return null; 

} 

にリダイレクトするように切り取らコードです。

答えて

1

APIゲートウェイは、シングルサインオンサービスIMOにリダイレクトしないでください。ゲートウェイはブラウザからはアクセスされませんが、RESTクライアントライブラリまたはPostmanなどのツールからアクセスすることを意図しています。認証が失敗した場合は、ではなく、401という応答を返します。 UNRELATED

:あなたはビュー(UIサービス)に行わ要求の場合

(例えばJSFなど)REST APIを消費し、サーバー側のWeb UIフレームワークのいくつかの種類を持っている場合は読んで、私は同様の問題がありましたZuulとKeycloak SSOで私はちょうどZuulの背後にあるUIサービスを取得できませんでしたOpenIdConnect標準フローが正しく実行されている。私はZuulをRest APIのためだけに使用し、エンド・ユーザー・ブラウザーにUIサービスへの要求を直接行うようにしました(私は1つのインスタンスしか持っていません)。

ここには、このGithubレポで修正するためにKeycloak mailing listwhat I triedに記載された私の問題があります。

+0

基本的には、それぞれのマイクロサービスの代わりにゲートウェイで認証が行われるzuulゲートウェイを構築する必要があります。ユーザーを確認するためにSSOを使用しています デザイン: 1.確認するSSOにリダイレクトするだけでなく、ユーザーセッションが存在するかどうか。 2. SSOは要求を確認し、トークンをゲートウェイに戻します。トークンが有効であれば、サーブレットはそれぞれのサービスに書き換えられます。 この方法に問題はありますか?そうでない場合は、より良い方法がありますか? – Joey

+0

我々はリンク [リンク] https://gist.github.com/abouchelit/283d6f4a667ec36d5d65 [リンク] を次のように同様のことを達成したい。しかし、リモートURLにリダイレクトない理由zuulフィルタ理解しない、 – Joey

+0

は私が書いたようにリダイレクトは、ブラウザに対してのみ有効な応答です。最初のポイントでは、SSOにリダイレクトするよう指示しますが、リダイレクト応答からSSOにアクセスすることは、別の要求でWebブラウザによって実行されるアクションです。だから私はすべての要求に対してそれをしないだろう。 REST APIターゲットリクエストとUIベースのリクエストを異ならせる必要があるようです。 –

関連する問題