わかりました、私は答えを見つけました。だからここにあります:
基本的に私が達成しようとしていたのは、グラスフィッシュに openid ベースの認証メカニズムを実装することでした。これを行う 1 つの方法は を使用することですProgrammaticLogin
が、これにはいくつかの欠点があります。要求された URL にリダイレクトする簡単な方法はなく、プログラムによる認証はプログラマーにとってより多くの作業を意味します。そのため、いろいろ読んだ後、目標を達成するためのより良い方法であるサーバー認証モジュールまたは SAM を見つけました。これは、 JSR-196で説明されている標準プロセスの一部であり、 glassfish 用のプラグ可能な認証モジュールを作成する方法を提供します (つまりFORM
、標準などとは異なりますBASIC
)。この方法を使用すると、宣言型セキュリティ モデルを維持しながら、新しい認証モジュールをサーブレット コンテナーにプラグインできます。
したがって、私がする必要があるのは、独自のカスタム SAM を作成することだけです。簡単な方法は次のとおりです。
ほとんどが次のメソッドに要約される ServerAuthModule インターフェイスを実装します。
AuthStatus validateRequest(MessageInfo messageInfo, security.auth.Subject
clientSubject, security.auth.Subject serviceSubject) throws AuthException
SAM を jar にパッケージ化し、その jar を glassfish lib ディレクトリに配置します。
アプリケーションで使用するために SAM を構成します。これは 2 つのステップで行われます。
- SAM を domain.xml で message-security-provider として定義します。
- アプリケーションで使用するために SAM をバインドします。これを行うには、アプリケーションの sun-web-app.xml で httpservlet-security-provider 属性を定義します。属性の値を、ステップ 1 で SAM に割り当てた名前に設定します。
詳細については、Ron Monzillo によるこの素晴らしいチュートリアルをお読みください。
更新: AuthenticRoastと呼ばれる、この問題に対するよりシンプルでエレガントな解決策があります。これは、Aike Sommer によって作成された Java ライブラリであり、独自のプラグ可能なオーセンティケーターを作成できます。