4

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彼らのプロバイダーはまだリクエストを受け取っていません。

4

1 に答える 1

4

localhostRP を機能させるには、RPをホワイトリストに登録する必要があることをすでに認識しているようです。しかし、最近気付いたもう 1 つのことは、IIS が ASP.NET Web アプリ自体に対する HTTP GET の実行をブロックしていることです。Visual Studio Personal Web Server では機能しますが、RP と OP の両方が の下localhostの IIS でホストされている場合、IIS がブロックしている可能性があります。HttpWebRequestこれを確認または拒否するには、IIS でホストされている RP とコンソール アプリから手書きのテストを使用します。

両方が IIS の下にあり、それが問題である場合は、開発に Personal Web Server を使用するか、IIS 上の 2 つのサイトを別のアプリ プールに分離するか、またはそのような方法で解決する必要があります。

于 2009-12-04T21:36:38.303 に答える