1

DotNetOpenAuth で OpenID プロバイダーを実装しようとしています。私が OpenID URL を提供すると、消費者は私のエンドポイントを発見します。

プロバイダーにログインすると、プロバイダーはクレーム ID とローカル ID をコンシューマーに返します。

ただし、消費者の応答には次の例外があります。

The OpenID Provider issued an assertion for an Identifier whose discovery information did not match. 
Assertion endpoint info: 
  ClaimedIdentifier: http://localhost/OpenIDUser.aspx/myuser
  ProviderLocalIdentifier: http://localhost/OpenIDUser.aspx/myuser 
  ProviderEndpoint: http://localhost/OpenIDAuth.aspx
  OpenID version: 2.0 
  Service Type URIs: 
Discovered endpoint info: []

http://localhost/OpenIDAuth.aspx私のエンドポイントです。 http://localhost/OpenIDUser.aspx/myuserは私のユーザー識別子の URL であり、正常に参照できます。次のように、ヘッダーにエンドポイントへのリンクがあります。 <link rel="openid.server" href="http://localhost/OpenIDAuth.aspx"></link>

何を試しても、例外の「検出されたエンドポイント情報: []」の部分は常に空の配列です。

誰でも助けてもらえますか?

4

1 に答える 1

2

このエラーを確認するには、RPがプロバイダーにリダイレクトする前に検出フェーズを正常に完了できている必要があるか(この場合、2回目に失敗するのはなぜですか)、またはこれが一方的なアサーションであるため、ここまで到達したことは不可解です。 (これは問題ありませんが、珍しいです)。

しかし、私が見る1つの欠陥は、あなたのタグです。

<link rel="openid.server" href="http://localhost/OpenIDAuth.aspx"></link>

はOpenID1.1のアドバタイズメントですが、プロバイダーはOpenID2.0をアサートしています。IIRC、正しいタグは次のようになります。

<link rel="openid2.provider" href="http://localhost/OpenIDAuth.aspx"></link>

ヒント:プロバイダーを開発してDotNetOpenAuth RPでテストする場合は、検出結果をweb.configにキャッシュしないようにRP(およびOPの場合もあります)を設定して、成功と障害は実際には現在のコードで発生しています。

<dotNetOpenAuth>
    <openid cacheDiscovery="false">

その他の構成オプションと、上記のxmlがドキュメントに表示されるコンテキストを確認できます。

于 2012-09-06T21:38:47.697 に答える