DotNetOpenAuth サンプル プロバイダーをローカルで実行していますが、Web ブラウザー経由で要求を正しく処理しているようです。デバッガーで承認用のハンドラーをステップ実行できます。
Google や他のプロバイダーで認証できるプロジェクトがありますが、サンプル プロバイダーでは失敗します。サンプル プロバイダーは要求をまったく認識せず、依存側は例外をスローします。No OpenID endpoint found.
証明書利用者で次のことを行うとします。
string providerURL = "http://localhost/openid/provider";
// Now try the openid relying party...
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
Identifier id;
if (Identifier.TryParse(providerURL, out id))
{
// The following line throws the exception without ever making
// a request to the server.
var req = openid.CreateRequest(providerURL);
// Would redirect here...
}
}
UntrustedWebRequestHandler
クラスがホスト名への接続を防止することに気付きましlocalhost
たが、テストケースに従って、または手動でホワイトリストに登録されたホストとして追加しても、役に立たないようです。
ホストが次の方法で到達可能であることを確認しました。
// Check to make sure the provider URL is reachable.
// These requests are handled by the provider.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(providerURL);
HttpWebResponse httpRes = (HttpWebResponse)request.GetResponse();
考え?なぜそれがまったく要求をしないのかについて、私は機知に富んでいます。
編集:次localhost
のようにホワイトリストに登録されました:
(openid.Channel.WebRequestHandler as UntrustedWebRequestHandler).WhitelistHosts.Add("localhost");
web.config
また、次のように追加してホワイトリストに登録しようとしました:
<dotNetOpenAuth>
<messaging>
<untrustedWebRequest>
<whitelistHosts>
<add name="localhost"/>
</whitelistHosts>
</untrustedWebRequest>
</messaging>
</dotNetOpenAuth>
どちらのアプローチを使用しても、デバッガーで調べると、ホワイトリストに登録されたホストのリストにlocalhost
表示されます。UntrustedWebRequestHandler
彼らのプロバイダーはまだリクエストを受け取っていません。