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;
}
にリダイレクトするように切り取らコードです。
基本的には、それぞれのマイクロサービスの代わりにゲートウェイで認証が行われるzuulゲートウェイを構築する必要があります。ユーザーを確認するためにSSOを使用しています デザイン: 1.確認するSSOにリダイレクトするだけでなく、ユーザーセッションが存在するかどうか。 2. SSOは要求を確認し、トークンをゲートウェイに戻します。トークンが有効であれば、サーブレットはそれぞれのサービスに書き換えられます。 この方法に問題はありますか?そうでない場合は、より良い方法がありますか? – Joey
我々はリンク [リンク] https://gist.github.com/abouchelit/283d6f4a667ec36d5d65 [リンク] を次のように同様のことを達成したい。しかし、リモートURLにリダイレクトない理由zuulフィルタ理解しない、 – Joey
は私が書いたようにリダイレクトは、ブラウザに対してのみ有効な応答です。最初のポイントでは、SSOにリダイレクトするよう指示しますが、リダイレクト応答からSSOにアクセスすることは、別の要求でWebブラウザによって実行されるアクションです。だから私はすべての要求に対してそれをしないだろう。 REST APIターゲットリクエストとUIベースのリクエストを異ならせる必要があるようです。 –