1

別々のドメインに 2 つのサイトがあります。Thinktecture IdentityModel を使用して SSO を実装しています。

ユーザーがサイト A にログインします。ある時点で、ユーザーはリンクをクリックしてサイト B に移動します。サイト A は、JWT トークンを使用してユーザーをサイト B/Login.aspx?token=< token > にリダイレクトします。次に、サイト B は、サイト A で API を呼び出してユーザーを認証することにより、トークンを検証します。認証された場合、ユーザーは自動的にサイト B にログインします。

デフォルトでは、Thinktecture トークンは 10 時間持続し、トークンを殺す方法はありません (私が知る限り)。ユーザーがサイトからログアウトしても、トークンは引き続き有効です。ブラウザーの履歴を見て、"Login.aspx?token=< トークン >" URL を取得すると、自動的に再度ログインできます。ユーザーがログアウトしたときにすべてのユーザー トークンを削除する方法はありますか? トークンをクエリ文字列の一部として渡すべきではありませんか? リプレイ攻撃を防ぐ最善の方法は何ですか?

4

2 に答える 2

1

@leastprivilege が質問にコメントしたように、同じ IDP を信頼する RP (証明書利用者) として両方のサイトを定義するだけで、両方のサイトの SSO を簡単に実現できます。もちろん、それによって認証ソリューションのアーキテクチャが簡素化されます。

とはいえ、WS-Fed を使用したパッシブ認証は、依然としてリプレイ攻撃に対して脆弱です。トークンはサイトに投稿されますが、ブラウザーで [戻る] を数回 (サインアウトした後でも) 押すと、トークンがサイトに再投稿され、ユーザーが再びサインインします。

幸いなことに、WIF にはその攻撃を軽減する方法があります。構成することにより:

    <identityConfiguration>
     .......
 <tokenReplayDetection enabled="true" />
     .....
    </identityConfiguration>

その後、Wif は使用されたトークンをサーバーにキャッシュし、一度だけ使用されるようにします。(リプレイ攻撃が検出された場合、適切な例外が発生しますSecurityTokenReplayDetectedException)。

もちろん、このキャッシュはプロセスのリサイクルに耐えられず、Web ファームのシナリオでは十分ではありません。これらのシナリオでもこの攻撃を軽減したい場合は、何らかの分散および永続キャッシュが必要になります。

Thinktecture.IdentityModel への貢献として実装しました。調べて使用できます。

于 2014-01-15T13:45:00.000 に答える
0

少なくとも、あなたが説明するこの最も明白なシナリオでは、POSTing トークンが問題を解決するはずです。JWT トークンは使用していませんが、SAML トークンは通常 POST されます。jwtトークンも投稿するようにサーバーを構成できると思います。

于 2013-11-25T20:23:04.850 に答える