なぜ単純なリダイレクトではなく、自動HTML投稿をしますか?OpenID 2でHTML形式のリダイレクトが使用されるのはなぜですか?
これは、開発者がOpenIDがわかっているときにリモートサーバーにディレクトリを投稿するログインフォームを自動的に生成できるようにするためですか?
例えば、
- ユーザーはログインしていないため、ログインページにアクセスしています。
- クッキーからユーザーのopenIDを検出します。
- リモートOpenIDサーバーに直接ポストするフォームが生成されます。
- リモートサーバーはユーザーをウェブサイトにリダイレクトします。
- ウェブサイトにログインします。
この場合、私は利益を見ることができます。しかし、これは、ログアウト時にユーザーのopenIDをクッキーに保持していることを前提としています。
この仕様をどのように実装するのが最もよいかに関する情報はほとんど見つかりません。公式スペックで
を参照してくださいHTML FORMリダイレクト:
http://openid.net/specs/openid-authentication-2_0.html#indirect_comm
私はPHP OpenID Library(バージョン2.1.1)を見てからこれを見つけました。
// Redirect the user to the OpenID server for authentication.
// Store the token for this authentication so we can verify the
// response.
// For OpenID 1, send a redirect. For OpenID 2, use a Javascript
// form to send a POST request to the server.
if ($auth_request->shouldSendRedirect()) {
$redirect_url = $auth_request->redirectURL(getTrustRoot(),
getReturnTo());
// If the redirect URL can't be built, display an error
// message.
if (Auth_OpenID::isFailure($redirect_url)) {
displayError("Could not redirect to server: " . $redirect_url->message);
} else {
// Send redirect.
header("Location: ".$redirect_url);
}
} else {
// Generate form markup and render it.
$form_id = 'openid_message';
$form_html = $auth_request->htmlMarkup(getTrustRoot(), getReturnTo(),
false, array('id' => $form_id));
// Display an error if the form markup couldn't be generated;
// otherwise, render the HTML.
if (Auth_OpenID::isFailure($form_html)) {
displayError("Could not redirect to server: " . $form_html->message);
} else {
print $form_html;
}
}
http://trac.openidenabled.com/trac/ticket/376を参照してください。 – crb