1

私はSSOセットアップ用のOpenIdプロバイダーに取り組んでいます。これは基本的に、ユーザーがアクセスできる「アプリケーション」のいずれかと資格情報を共有するWebアプリケーションポータルです。プロバイダーを設定し、すべてが正常に機能していますが、セキュリティについて質問があります。

プロバイダーがRPに肯定的なアサーションを送信する前に、プロバイダーに対していくつかのアクセス許可チェックを実行したいと思います。つまり、ユーザーは実際にリクエストを行っているアプリケーションへのアクセス許可を持っているということです。

現在入手しているプロバイダーコードは次のとおりです(スニペットのみで、必要に応じてさらに追加できます)。

private bool AutoRespondIfPossible(out ActionResult response)
    {
        if (ProviderEndpoint.PendingRequest.IsReturnUrlDiscoverable(OpenIdProvider.Channel.WebRequestHandler) == RelyingPartyDiscoveryResult.Success
            && User.Identity.IsAuthenticated && this.RealmIsValid(ProviderEndpoint.PendingAuthenticationRequest.Realm)) {
                if (ProviderEndpoint.PendingAuthenticationRequest != null) {
                    if (ProviderEndpoint.PendingAuthenticationRequest.IsDirectedIdentity
                        || this.UserControlsIdentifier(ProviderEndpoint.PendingAuthenticationRequest)) {
                            ProviderEndpoint.PendingAuthenticationRequest.IsAuthenticated = true;
                            response = this.SendAssertion();
                            return true;
                    }
                }

                //we don't want anon requests
                if (ProviderEndpoint.PendingAnonymousRequest != null) {
                    ProviderEndpoint.PendingAnonymousRequest.IsApproved = false;
                    response = this.SendAssertion();
                    return true;
                }
        }

        response = null;
        return false;
    }

基本的に、私が行っているのは、(RealmIsValidメソッド内の)要求のレルムが、受け入れ可能なホスト名のリスト内のホスト名と一致することを検証し、ホスト名に基づいてユーザー権限を比較することです。

私が疑問に思っているのは、どれくらい正確かということですProviderEndpoint.PendingAuthenticationRequest.Realm。私が正しく理解していれば、レルムは証明書利用者によって設定されます-エンドポイントが、そのリクエストで指定されたレルム以外のURIからリクエストを受信する可能性はありますか?または、レルムが常に正確である(つまり、証明書利用者のURIと一致する)と想定しても安全ですか?

4

1 に答える 1

1

はい、OpenID 2.0とDotNetOpenAuthの2つのステップにより、OpenIDレルムは信頼できます。

  1. OpenID return_to URLは、レルムURLの派生物である必要があります。したがって、誰でもOpenIDリクエストを任意の証明書利用者からのものであるかのように作成できますが、申し立てられた証明書利用者が常に実際に応答を受信するため、別のRPを操作する攻撃者は応答を取得しません。
  2. 一部の「オープンリダイレクター」攻撃では、攻撃者が正当なレルムURLに基​​づくreturn_to URIを使用できる可能性がありますが、たまたま攻撃者のWebサイトにリダイレクトするURLであるため、攻撃者にアサーションが配信されます。IsReturnUrlDiscoverableこれは、コードスニペットにメソッドの呼び出しに含まれる「RPDiscovery」によって軽減されます。RPは、RP Discovery XRDSドキュメントに許可されたreturn_toURLを明示的にリストして、オープンリダイレクタエンドポイントが許可されないようにする必要があります。

とはいえ、OpenIDは主にユーザーを識別することであり、特定のRPにユーザーを許可することではありません。したがって、あなたがしていることは問題ないかもしれませんが、OpenIDを使用するための道から少し外れているので、セキュリティへの影響を慎重に検討してください(今やっているように聞こえます)。

于 2012-11-23T02:10:51.957 に答える