2017-08-04 12 views
0

これは "あまりにもオープン"な質問ではないが、私は本当にそれをどう対処するか分からないと思う。JSPとOAUTH2の認証

Java JSPで書かれた作業用Webアプリケーションと、Tomcat 7とMySQL DBで動作するJerseyとのいくつかのRestインタフェース。これは非常にシンプルなフォームベースのアプリケーションです。現在私はそれをAWS上で実行しています。私は認証層を組み込みたいと私はOpenIDを/のOAuth2サーバを使用して考えています

@Path("/operation") 
public class IntrfcOperation { 

String response=""; 
int retcode=0; 
String id; 
String name; 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response baserest(
      @Context HttpServletRequest hsreq, 
      @Context HttpServletResponse hsresp) 
    { 
     response =""; 
     ... 
     String outjson = "{\"retcode\":\"" + retcode + "\",\"name\":\"" + name + "\",\"msg\":\"" + response + "\"}"; 
     return Response.status(200).entity(outjson).build(); 
    } 

<% 
String inmsg = request.getParameter("msg"); 
%> 
<html> 
<head> 
... 

そして、このようなレストクラス:

JSPはこのようなものです、おそらくAWSのものです(IAM?)。私が見ている問題は、このプロトコル(私が試した限り)は、Identity Managerに送信されるすべての要求のリターンポイントである単一の/固有のリダイレクトURLが必要であるということです。私の問題は、単一のURLではなく、複数のJSP/Rest Entry Pointごとに1つのURLがあることです。

これを変換する正しい方法は何でしょうか?私が見る唯一の方法は、アプリケーション全体を単一のJSPスクリプトに書き直して、すべてのアクションとページがすべて単一のエントリポイントのパラメータとして識別されるようにすることです。別の簡単な方法がありますか?

答えて

1

OAuth2では、認証サーバーからのリダイレクトを受け入れるURIが必要です。アプリケーション全体のURIは1つだけです。このURIを処理するコードは、URLパラメータから値を取得し、トークンを保存し(またはエンドポイント/tokenから取得して)、既存のアプリケーションページにリダイレクトする必要があります。

したがって、アプリケーションを書き直す必要はありません。ログインページと認証されたユーザーのための最初のダッシュボードを持っている場合たとえば、流れは次のようになります。

  1. ユーザーは、ログインページに取得し、「のOAuth2による認証」をクリック
  2. ユーザーはにリダイレクトされますOAuth2認証サーバー
  3. ユーザーは認証を渡し、認証結果を使用して新しい認証処理URIにリダイレクトされます。
  4. アプリケーションは結果を保存し、ユーザーを認証してユーザーを初期ダッシュボードページにリダイレクトします。

トークンを格納する場所とアプリケーションのどの部分にOAuth2クライアントロール(JavaバックエンドまたはHTML/JavaScriptフロントエンド)を使用するかを決定する必要があります。認証(ユーザIDの取得)だけが必要な場合は、(OpenID Connect拡張機能の)IDトークンが必要になるでしょう。

詳細については、よく書かれたOAuth2 RFCまたはいくつかの記事/チュートリアルを読むことができます。

編集:認証が成功した後、元の リクエストページに戻す場合は、要求されたURLを認証リクエストのstateパラメータに含めます。新しい認証ハンドラではstateの値が変更されず(URLパラメータとしてstate)、ハードコードされたURL(ダッシュボード)ではなくそのURLにユーザーをリダイレクトできます。stateの値には、OAuth2 RFCで説明されているようなサイト間要求偽造を防止するための値も含める必要があります。

+0

私はRFCと多くのチュートリアルを読んだことがありますが、私はいつも同じ問題を抱えています。(正確に説明されていないかもしれません):中央のダッシュボードはありませんが、メニューによってナビゲート可能な多くのJSPがあります。これは、複数のURL(http://url/path/page1.jsp、http://url/path/page2.jsp ... http://url/path/pageX.jsp)を意味します。それぞれにはいくつかの認証機能が必要です(トークン - >ログインページにリダイレクトして戻ってくる必要はありません)。 OpenId/Oauth2が定義されているので、私は各URLに対して別のAPPを定義するか、それらをパラメータとしてナビゲートする必要があります(navigator.jsp?page1、navigator.jsp?page2、... navigator.jsp?pageX) – jordi

+0

'state'パラメータに関する情報を含みます。 –