2

背景(これまでDNOAについて尋ねてきた多数の質問からすでに明らかかもしれません):私は雇用主のイントラネットで実行されているWebアプリケーションポータルに取り組んでいます。ただし、これはイントラネットであるため、さまざまな依存関係者(およびプロバイダー)のすべてに、次のようなURLがありますhttp://servername/path。特にTLDが欠落しています。

DotNetOpenAuth(UntrustedWebRequestHandler.IsUriAllowable(Uri uri))のこのコードは、次のチェックを実行します。

if (!uri.Host.Contains(".")) {
    return failsUnlessWhitelisted("it does not contain a period in the host name.");
}

明らかに、私のRPはすべてTLDのない単なるサーバー名であるため、すべてこのチェックに失敗します。今、私はそれらすべてをweb.configホワイトリストに追加できることに気付きました(これはいくつか試しましたが、期待どおりに機能します)が、新しいサーバーが動的に追加されるため、これは理想的ではありません解決。

だから私の質問は:web.configを動的に変更しようとすべきですか?(これについて私が行った予備調査では、それは苦痛であることが示されています)または、プログラムでホワイトリストを設定する方法はありますか?

4

1 に答える 1

1

残念ながら、ホストのホワイトリストをプログラムで変更する方法はありません。

信頼できる環境にいる場合は、UntrustedWebRequestHandlerクラスを回避して、ホスト名チェックを含まない(または、必要なポリシーに一致するかどうかをチェックする)Web要求ハンドラーを使用できます。DotNetOpenAuth.Messaging.StandardWebRequestHandlerDotNetOpenAuthに接続を要求するすべてのサーバーを信頼する場合に推奨される、ストレートパススルー(ネットワークレベルのセキュリティチェックを追加しない)を使用できる組み込み機能があります。

var rp = new OpenIdRelyingParty();
rp.Channel.WebRequestHandler = new StandardWebRequestHandler();

var op = new OpenIdProvider();
op.Channel.WebRequestHandler = new StandardWebRequestHandler();

より慎重なポリシーを適用したい場合(おそらくホワイトリストに登録されたホストの集中リストがある場合)、IDirectWebRequestHandler自分で実装でき、必要に応じて既存のUntrustedWebRequestHandlerクラスを使用してインスピレーションを得ることができます。次に、もちろん、上記のプロパティを独自の実装に設定します。

于 2012-11-25T01:27:39.180 に答える