2009-10-23 27 views
6

私はRESTfulなWebサービス(JBoss + RESTeasy)を設計中です。 UIプログラマーは、それを使用するAjax Webアプリケーションを作成しています。 Webアプリケーションは、すべてがJavaScriptで行われた1つのHTMLページになります。セキュリティのために、すべてのトラフィックはSSLを経由します。ブラウザにポップアップを表示させずにAjax認証を行う

現在、私は基本認証を使用しています。 UIプログラマーは、ユーザー名とパスワードを取得するためのダイアログを表示し、ヘッダーに「Authorization:Basic xxxxx」と入力することができます。残念ながら、パスワードが間違っていると、醜いブラウザのログインダイアログボックスが表示されます。また、ユーザーがログオフする方法もありません。これは受け入れがたい。

私たちが使用する任意のブラウザのXMLHttpRequestに対する401応答を傍受する方法がないようです。

フォームベースの認証は私たちのためには機能しません。一定時間(セッションのタイムアウトに相当)の時間が経過すると、自動的にログオフする必要があります。クライアントがJSONオブジェクトを予期したときに、サーバーが突然ログインページを返すことはありません。

JBossは、BASIC、FORM、CLIENT-CERT、およびDIGESTの4つの認証戦略を提供しています。私はDIGESTがBASICと同じ問題を抱えていると思う。 4つのうちどれも私たちが望むものではありません。

このWebアプリケーションは現在のところクライアントになりますので、BASICを使用する必要はありません。インストールできる他の認証方法はありますか?たとえば、私が使用できるWSSE UsernameTokenの実装がありますか? (O'ReillyのRESTful Web Servicesの書籍の第8章で説明したように)サーバはWWW-Authenticateヘッダに "Basic"の代わりに "WSSE"を送り、ブラウザはそれを無視してそのまま通過させるでしょう。

RESTful Webサービスではなく、JBoss設定ファイルに所属するセキュリティを設定したいので、JBossにプラグインできる実装を探しています。

答えて

7

WWW-Authenticateヘッダーで認証方式が認識されない場合、ブラウザはパスワードダイアログを表示しません。あなたの最善の策は、基本的な認証を使用してサーバー上で手動でヘッダーを "Basic/MyApp"のような401応答に設定することです。

+0

要求はWebサービスに到達する前に認証が行われます。セキュリティフレームワークの前に置かれたフィルタを記述することでこれを処理できますか?次に、Webプログラマーに最初のリクエストに「Authorization:Basic/MyApp」ヘッダーを追加するように指示できます。フィルターはそれを "Authorization:Basic"と書き直し、応答の "WWW-Authenticate:Basic"ヘッダーを "WWW-Authenticate:Basic/MyApp"として書き直すことができます。他のクライアントは通常の基本認証を使用できます。これは使えますか?私はそうかもしれないと思う。 –

+0

ええと...私はあなたがサーバー上のスクリプトレベルで認証を制御できたと仮定していました。認証が処理された後で、応答を返す前にヘッダーが設定されていました。私はJBossにあまり慣れていませんが、認証が行われる前にリクエストをフィルタリングして書き直すことができれば、それがベスト・ベットのように聞こえます。また、WebアプリケーションでAuthorizationヘッダーを設定することで、通常のクライアントには影響しません。ニース。 –

+0

結論として、事前ログインフィルタを使用することはできません。 WebLogicサーバーでは許可されていますが、標準では許可されていないため、JBossとTomcatは許可していません。これを行うにはJAASを試す必要があるようです。 –

関連する問題