0

AuthCとAuthZにApacheShiroを使用する私のWebアプリケーションには、2つの認証レルムがあります。1つは通常のWebインターフェイス(と呼ばれる)用で、もう1つはAPIトークンを使用するSsoRealmREST API(と呼ばれる)用です。RestRealm両方のレルムによって認証されたプリンシパルには、分離された権限(およびAuthenticationTokens)があります。既存のセッションがなく、API呼び出しがRESTインターフェースを介して到着した場合、すべてが正常であり、認証(および承認)はを介して行われRestRealmます。SsoRealmただし、以前に認証が行われなかったために認証された既存のセッション が発生し、サブジェクトが間違ったレルムからのものであるためRestRealm、連続した承認チェック(を使用)が失敗した場合。Subject.isPermitted

対応する認証フィルターは、(Shiro Guiceを使用して)次のように登録されます。

addFilterChain("/api/x/*/y", REST_AUTH, NO_SESSION_CREATION);
addFilterChain("/**", SSO_AUTH);

「正しい」レルムで再認証を強制するためにできることはありますか?

カスタムAuthenticationStrategyヘルプ(つまり、契約で「関与している場合、認証が成功する必要があるAuthenticationStrategy」という戦略の実装が許可されていますか)?既存の認証済みセッションがある場合、AFAICSは再度呼び出されません...RestRealmRestRealmModularRealmAuthenticator.doMultiRealmAuthentication

4

1 に答える 1

1

結局のところ、これはかなり簡単に解決できました。上書きAuthenticatingFilter#isAccessAllowedして、「正しい」プリンシパルタイプがレルムに対して認証されていることを確認してください(デフォルトの実装ではSubject#isAuthenticated、プリンシパルが認証されているかどうかをテストするために使用されます。レルムかどうか)。

于 2012-06-14T07:55:42.850 に答える