1

私は JanRain ライブラリを使用しており、サーバーの例と非常によく似たコードを実装しています (基本的に、独自の openid プロバイダーを作成しています)。動作していますが、指定された ID とは異なる ID をコンシューマーに返そうとすると、次のエラーが発生します。

リクエストはhttp://example.com/に対するもので、ID http://example.com/openid/33では返信できません

この場合、一意の ID/URL はhttp://example.com/openid/33であり、消費者に指定されたものは ですhttp://example.com

私はこのようなものを使用しています:

$request  =  $server->decodeRequest();
$request->answer( true, null,  $id_url, $request->identity );

$request->identityとを切り替えてみました$id_url。上記の状態でのみエラーが発生し、他の状態は機能しますが、消費者に正しいものを返していないようです。ここにある OP Simple Registration テストを使用しています: http://test-id.org/OP/Sreg.aspx、それらを切り替えると動作しますが$id_url、ログのどこにも見つかりません。

私の推測では、エンドユーザーが指定した ID とは異なる ID について、プロセスの早い段階で消費者に伝える必要があると思いますが、これまでのところ、正しいことを試していません。これが yahoo の OpenID のしくみなので、これが可能であることはわかっています。

アイデアや提案は大歓迎です。ありがとう!

4

1 に答える 1

2

エンドポイント URL を、要求された識別子または OP ローカル識別子と混同しています。

ワークフローは次のようになります。

  • ユーザーはユーザー提供の識別子を入力します
  • 消費者はそれに対して検出を実行し、次のいずれかになります。
    • プロバイダー エンドポイントの URL/バージョン。この場合、要求された識別子/op-local 識別子は次のようになります。http://specs.openid.net/auth/2.0/identifier_select
    • プロバイダー エンドポイント URL、プロトコル バージョン、要求された識別子 (ユーザーが指定した識別子)、および OP ローカル識別子

したがって、取得した場合にのみ新しい識別子を提供する必要がありますhttp://specs.openid.net/auth/2.0/identifier_select

于 2010-08-31T15:35:54.370 に答える