2017-07-20 6 views
1

私はWSO2 5.2を使用しています。私はJDBCUserStoreManagerを拡張し、読み取り専用のカスタムUserStoreManagerを作成しました。 user-mgt.xmlのスニペットを示します。ユーザ認証の面でWSO2 ISのログインエラーメッセージのカスタマイズ

<UserStoreManager class="org.arbfile.wso2.user.ReadOnlyJDBCUserStoreManager"> 
     <Property name="TenantManager">org.wso2.carbon.user.core.tenant.JDBCTenantManager</Property> 
     <Property name="ReadOnly">true</Property> 
     <Property name="ReadGroups">false</Property> 
     <Property name="WriteGroups">false</Property> 
     ........ 
    </UserStoreManager> 

、私は私のカスタムクラスのdoAuthenticate()メソッドでは、ユーザ/ PASSW検証をやっています。また、IPフィルタリングやユーザーアカウントのロックなど、他のチェックも行っています。これらの他の項目が失敗すると、私はUserStoreExceptionをスローすることができます。私が抱えている問題は、特定の障害状態に基づいて適切なエラーメッセージを設定することです。私は以下のリンクhttps://docs.wso2.com/display/IS500/Customizing+Authentication+Error+Messagesを見つけましたが、情報があまりにも曖昧です。 「新しい」カスタムエラーメッセージを設定して認証エンドポイントがlogin.jspに渡すようにする方法を知っておく必要があります。今、エラーが発生してもまったく同じエラーメッセージが表示されます。

EDIT:明確にするためのHTMLフォームのコードを追加:

<form action="../commonauth" method="post" id="loginForm"> 

<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group"> 
    <input id="username" name="username" type="text" class="form-control" tabindex="0" placeholder="Username"> 
</div> 
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group"> 
    <input id="password" name="password" type="password" class="form-control" placeholder="Password" autocomplete="off"> 
</div> 
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group"> 
    <input type="hidden" name="sessionDataKey" value='e04168f9-95c7-4b87-93af-60e1ecdc6273'/> 
</div> 

<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group"> 
    <div class="form-actions"> 
     <button class="wr-btn green-ltgr col-xs-12 col-md-12 col-lg-12 uppercase font-extra-large" type="submit">Login</button> 
    </div> 
</div> 
</form> 

私はSAMLを使用していますが、これはWSO2サーバー上のフォームベースのログインのために提示形式です。フォームアクションは "../commonauth"です。ユーザー名とパスワードを使用したフォーム提出は、別のWebアプリケーション(認証エンドポイントWebアプリケーションではない)に対して行われているようです。上記のコードは、basicauth.jspにあります。

答えて

0

私はまったく同じ要件がありましたが、適切な解決策を見つけることができませんでした。私は、BasicAutheticatorが毎回同じエラーコードをログインページに送信することを発見しました。回避策として、フローを少し変更し、WSO2エラーコードをカスタマイズするのではなく、ログインアプリをカスタマイズすることに決めました。私はそれが間違った習慣であることを知っているが、それは私の問題を解決した私の新しいアーキテクチャの仕組みは次のとおりです。

  1. 私は事前認証チェックのすべてのロジックでライブラリを作成し、

  2. validation.jar名前、それをすることができますそれから私はauthenticationendpointあるアプリケーションにログインするためにMavenの依存関係として、このライブラリを追加しました。ログインアプリで新しいサーブレットを作成し

  3. 、のbasicAuth.jspを変更し、代わりに/ samlssoにフォームを提出するのPreValidation.java

  4. をという名前を付けてみましょう、事前検証サーブレットにフォームを提出しました。

  5. ValidValidationサーブレットでは、validation.jarの助けを借りて、認証(WSO2のタスクでなければならない)を除くすべての検証を行います。

  6. 検証が失敗した場合は、対応するエラーコードをlogin.jspに渡して、画面にメッセージを表示します。

  7. すべての検証が完了している場合は、WSO2に要求を送信し、フローを続行させます。

希望すると、これが役立ちます。

+0

ステップ4まで続きます。basicAuth.jspは、../commonauth not/samlssoという形式のアクションを持っています。 commonauthはここで本当の仕事をします。それは私のカスタムdoAuthenticate()を呼び出す必要がありますし、エラーでlogin.doにリダイレクトします。このプロセスフローのどこかに私自身のクラスを注入できる必要があります。 –

+0

SSO/SAMLを使用しています –

+0

フォームアクションは、SSOに使用しているプロトコルのタイプによって異なります。私の場合、私はsamlを使用していたので、アクションは/ samlssoでした。今、上記の解決策は、認証前のチェックを行い、IPフィルタリングやユーザーアカウントロックなどのログインページにエラーメッセージを表示することです。これは質問で説明した問題です。最終的にWSO2にクライアント資格情報を提出する前に、検証の追加層と考えてください。もちろん、すでに行ったようにカスタム論理を使ってユーザーを認証することもできます。 – Agam

関連する問題