为什么你会做一个自动的 HTML 帖子而不是一个简单的重定向?
这样开发人员可以在知道 OpenID 时自动生成将目录发布到远程服务器的登录表单吗?
例如。
- 用户未登录并访问您的登录页面。
- 您从 cookie 中检测到用户的 openID。
- 生成的表单直接发布到远程 OpenID 服务器。
- 远程服务器将用户重定向回网站。
- 网站登录用户。
如果是这种情况,我可以看到好处。但是,这假设您在用户注销时将用户的 openID 保存在 cookie 中。
我几乎找不到关于如何最好地实施这个规范的信息。
请参阅官方规范中的 HTML FORM 重定向:
http://openid.net/specs/openid-authentication-2_0.html#indirect_comm
我通过查看PHP OpenID 库(版本 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;
}
}