web-dev-qa-db-ja.com

JavaからADFSと通信するにはどうすればよいですか?

CauchoResinで運営されているウェブサイトがあります。サイトの大部分はJSP/Javaです。サイトには独自のカスタム認証があります。つまり、サードパーティの認証フレームワークを使用していません。私たちはクライアントではなく、ウェブサイトをホストします。

大規模なクライアントは、ユーザーにActiveDirectoryの資格情報を使用してサイトにログインしてもらいたいと考えています。このため、SAMLを使用してADFSと通信することを想定しています。間違っている場合は、修正してください。

だから私の質問は、Javaでそれをどのように行うのですか?私が知る限り、OpenSAMLはすべてを実行しているわけではないように聞こえます。それ以上が必要な場合は、Shibbolethを使用する必要があります。他に選択肢はありますか?ユーザーがログインできるようにすることだけが必要な場合、最善のオプションは何ですか?

どんな情報でも役に立ちます。ありがとうございました。

編集:別のオプションがOAuthであることがわかりました。長所?短所?

6
casolorz

アプリケーションは、直接(コードから)または間接的に(たとえば、SAML SPリバースプロキシ、アプリケーションサーバーなどでサポート))、SAMLSPとして機能する必要があります。

直接オプション(アプリケーションにさらに変更を加える必要がある)の場合、次のことができます。

  • sAMLをコーディングするSP自分で(ほとんどの場合 OpenSAML で、既存の製品のソースで例を見つけることができます)
  • Spring SAMLOpenAM Fedlet などの既製の製品を使用してアプリケーションに統合します

間接オプション(アプリケーションへの変更が少なくてすむ)の場合、次のことができます。

  • 使用 Shibboleth SAML SPプラグイン Apacheリバースプロキシで(使用している場合)
  • sAML SPをコンテナ上の別のアプリケーション(Spring SAMLやOpenAMなど)としてデプロイし、アプリケーションと通信できるようにします-したがって、SAML SPはADFSで認証を実行し、共有Cookieやカスタムトークンなどを介してこれをアプリケーションに伝達します

あなたはより多くの比較の詳細と考慮事項を見つけることができます このスレッドで

ADFS3はOAuth Authorization Serverをサポートしている必要があり、統合するのがより簡単な方法である可能性があります。 ここ および ここ を参照してください。認証の実装OAuthの使用は、一般的にSAMLよりも大幅に簡単であり、関連する欠点はありません。

10

Cauchoが提供するResinAuthenticatorsは、フェデレーションには役立ちません。代わりに、認証されていないユーザーを検索するServletFilterを追加する必要があります。見つかったら、ログインページに誘導する必要があります。これについては、ユーザーに自分のサイトに直接ログインするか、別の組織に統合するかを尋ねる必要があります。 (これは、ユーザー名/パスワードフォームと信頼できるサードパーティのロゴを表示することで実行できます。)前者の直接ログインの場合は、Resin Authenticatorを使用してローカルユーザーリポジトリと照合するか、現在実行しています。フェデレーションの場合は、SAMLを使用します。

フェデレーションは、信頼できるパートナー(ADFSサーバー)に認証要求を送信することから始まります。これは 小さなXMLドキュメント フォームにパックされており、リクエストごとにいくつかの変更が必要になります(作成時間など)。これはString.formatで実行できます-複雑なことは何もありません。この認証要求を、ユーザーが選択した組織のSAMLサーバー(つまり、ADFS)に送信します。ログインして、作成する必要のある「アサーションコンシューマサービス」に認証応答を送信します。

ACSは、SAML認証応答を受信する単なるエンドポイントです。これは、ADFSからの応答を解析および検証する認証されていないエンドポイントである必要があります。これを行うには、OpenSAMLを使用します。それが有効であることを確認するためにあなたがしなければならないことはかなりたくさんあります。たとえば、アサーションのデジタル署名を確認する必要があります。また、発行時刻を確認する必要があります。これは将来ではないことを確認してください。確認データ、オーディエンス、および受信者の宛先を確認して、アサーションが適切であることを確認します。等等.

これがコーディングしたいものを超えている場合は、オープンソースまたは商用のSAMLサーバーをチェックアウトしてください。 SPとして機能する必要があり、物事を単純にするためにResinで実行する必要があります。意地悪で無駄のない候補の1つは、 Asimba です。 ( 私が働いている会社 はこのプロジェクトのメンテナーです。)これをResinにデプロイすると、要求と応答の両方が処理されます。

OAuthに関する注意

ここで検討しているのは、フェデレーション(またはWebシングルサインオン)です。 OAuthはフェデレーションには適していません。委任された認証を行うように設計されたプロトコルです。OpenIDFoundationは、OpenIDConnectでのフェデレーションをサポートするためにOAuth 2を拡張しましたOAuthのプロファイル。ADFSはこのフェデレーションプロトコルをサポートしておらず、WS-FederationとSAMLに限定されています。したがって、パートナーがADFSを使用する場合は、OAuth)を調べる必要はありません。

5
Travis Spencer