私は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と一致する)と想定しても安全ですか?