2

他のサイトからアクセスされる Web サービスをセットアップする予定です。これは、Web サービスを保護する必要があり、Web サービスにアクセスする各サイトが登録済みドメインに対して認証されるという考え方です。

  • サイト所有者は、Web サービスの Web フロントエンドからドメイン (foo.com など) を登録します。
  • 次に、彼らのサイトは HTTP メソッド (GET, PUT, POST, DELETEなど) を発行します。これは通常、Javascript HTTP リクエストになります。
  • Web サービスにアクセスするサイトは認証する必要はありません。Web サービスは、送信元のドメインが事前に登録されているかどうかを判断します。登録されている場合は、サイトのドメインに従ってリクエストを処理します。

私が今考えている問題は、この種のシステムが「拡張」され、「機能する」かどうかです。

私は Apache Shiro と Spring Security の両方を使用してきましたが、この種の要件に遭遇したことはありません。

4

2 に答える 2

0

カスタムフィルターを使用してそれを行う方法があると思います:

  1. PartnerSiteCheckerFilter のような独自のカスタム フィルターを追加します。各パートナー サーバーの IP アドレスのリストがあります。API リクエスト (/api/** など) のみをチェックします。IP が一致しない要求はすべて拒否されます (AccesDeniedException)。
  2. 登録プロセス中に新しいドメインを DB に保存し、信頼できる IP アドレスのリストを取得します

    InetAddress[] hosts = InetAddress.getAllByName( "www.stackoverflow.com" );
    for(InetAddress host : hosts) {
        String ip = host.getHostAddress();
    } 
    // add ip to a list
    
  3. PartnerSiteCheckerFilter 内の IP のリストを更新します。

  4. アプリケーションの起動時に DB からドメインのリストを読み取り、各サーバーの IP を取得して、このリストを PartnerSiteCheckerFilter に挿入するコンポーネントを準備します。
  5. ドメインごとの信頼できるサーバーのリストは、実行時に変更される場合があります。そのため、更新する方法を提供すると役立つ場合があります。

お役に立てれば。ご不明な点がございましたら、お気軽に投稿してください。

于 2013-04-19T15:30:28.413 に答える
0

設計上、システムはパスワードなしでユーザーを認証することに注意してください。つまり、http://foo.comfoo.comからのユーザー アクセスの場合にアクセスを使用すると、認証後にパスワードを提供せずにユーザー権限を取得できます。あなた自身の問題を解決することを提案 したいPreAuthenticatedProcessingFilter: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#d0e6167getPreAuthenticatedPrincipalリクエスト URL からドメイン (サブドメインなし) 情報を抽出し、PreAuthenticatedAuthenticationProvider. AuthenticationUserDetailsServiceofPreAuthenticatedAuthenticationProviderは、データベースから登録済みドメインをロードする必要があります。

于 2013-04-19T15:01:45.030 に答える