为什么是HTML形式定向使用OpenID2?
题
为什么你会做一个自动HTML后而不是一个简单的重新定向?
这是使开发者可以自动生成一个登录的形式员额的目录到远程服务器时OpenID是知道?
例如。
- 用户是不是记录在您的登录访问的网页。
- 你检测用户的openID从cookie。
- 形成产生直接的员额远程OpenID服务器。
- 远程服务器重定向用户回到网站。
- 网站的日志中的用户。
如果是这种情况下,我可以看到的好处。但是这种假设你保持用户的openID在cookie当他们登出。
我可以找到很少的信息就如何实现这一规范应更好实施。
见HTML形式重新定向正式规格:
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;
}
}
解决方案
主要动机是,正如马布拉克特说,限制对有效载荷大小强加通过使用定向和得到的。一些实现有足够的智慧仅仅使用后当消息超过一定规模,作为肯定有缺点后的技术。(其中最主要的是事实,你的背部按钮不起作用。) 其他的实现,就像本代码你出去的简单性和一致性,并留出有条件的。
其他提示
我可以想到的几个原因:
- 一点点的安全通过默默无闻-这是稍微更多的工作要篡改后的提交比让
- 缓存和重新规则更具限制性的后于得到。我不完全确定这事OpenID使用的情况下,虽然。
- 机器人不会跟随后形式,但将按照重定向。这可能会影响服务器的负载。
- 不同的浏览器具有不同的最大的长度对于获得请求,但他们都一样大的职位。
- 一些浏览器将警告在重定向到另一个领域。他们还警告,如果你提交后到非HTTPS网址。
- 通过转JavaScript,我可以有一个相对安全的经验,而不是默默地重新定向到另一个领域。
我不知道,任何这些都是一个扣篮的理由选择后,除非量的数据被发送超过查询的长度为一些主要的浏览器。
同样的办法用于临的网络浏览器SSO的轮廓。主要动机的使用HTML后向是:
几乎无限的长度有效载荷:在CA有效载荷是一个XML文件签署与XMLDSig和base64编码。它比通常的1024characters限制的网址(最佳做法不仅支持任何浏览器,但中介网络设备,如防火墙、反代理,负载平衡)。
W3C HTTP标准说,得到的是幂等(同一网址获得执行的多次,总是应该导致同样的反应),因此可以缓存,而后是不是,并且必须达到的URL目标。响应的一个OpenID HTML形式发布或CA HTML形式不应该被缓存。它必须达到的目标,以便启动认证的会议。
你可以认为,使用HTTP得到重定向会的工作,以及由于网址查询永远改变你会权利的做法。然而,这将是一个解决办法的W3C的标准,因此,不应该被一个标准,但一个备用的执行,每当两端的同意。