我在使用openid check_authentication时遇到了一些麻烦。来自openid提供者的答案(我尝试使用google和myopenid)总是:is_valid:false
我已经获得了openid.sig和openid.identity,但是当我尝试时 使用check_authentication调用验证我的数据,它始终返回 is_valid:假
到目前为止我做了什么(在这个例子中使用google openid进行身份验证,但是对于myopenid来说是相同的):
我将网页用户从我的网页重定向到以下网址:
https://www.google.com/accounts/o8/ud ?openid.ns = http://specs.openid.net/auth/2.0 &安培; openid.claimed_id = http://specs.openid.net/auth/2.0/identifier_select &安培; openid.identity = http://specs.openid.net/auth/2.0/identifier_select &安培; openid.return_to = http://localhost:104/evalgoogle.aspx &安培; openid.mode = checkid_setup
(当然没有换行符,我只把它们放在这篇文章中 保持可读性。 localhost:104 / evalgoogle.aspx是我的本地测试环境)
然后我会被重定向到我可以签名的谷歌登录页面 并接受我将登录Localhost。 我虽然取消选中了记住复选框。
登录后,我将被重定向到我设置的return_to页面 在请求中获取以下数据:
openid.ns = HTTP%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0 &安培; openid.mode = id_res &安培; openid.op_endpoint = HTTPS%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud &安培; openid.response_nonce = 2010-02-12T14%3A46%3A52Z1PDyxBssEN9p5g &安培; openid.return_to = HTTP%3A%2F%2Flocalhost%3A104%2Fevalgoogle.aspx &安培; openid.assoc_handle = AOQobUfpVnBFYzFO15z92rru88nWjEnw0u8ethVscpjDwkssp8GjVc0u &安培;和openid.signed = op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to %2Cresponse_nonce%2Cassoc_handle &安培; openid.sig = 24Hetky5HrNwrY3%2B%2B2vtIGnvmnI%3D &安培; openid.identity = HTTPS%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3D {SOMEID} &安培; openid.claimed_id = HTTPS%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3D {SOMEID}
(其中{SOMEID}是我的谷歌ID)
要验证此签名和Google ID,我创建了一个webrequest 按照openid.net/specs/openid-authentication-1_1.html#mode_check_authentication
中的描述调用check_authentication我现在的问题是这总是返回is_valid:false
为了消除我的webrequest中可能存在的问题,我现在只创建一个 我从谷歌回来的数据的html表格如下:
<form method="post" action="<%=Request.Params["openid.op_endpoint"] %>">
<div>
<input type="text" name="openid.mode" value="check_authentication" />
<input type="text" name="openid.assoc_handle" value="<
%= Request.Params [“openid.assoc_handle”]%&gt;“/&gt; “/&gt; “/&gt; “/&gt; “/&gt; “/&gt; “/&gt;
但这也只会产生is_valid:false
有没有人知道我的做法有什么问题?
非常感谢
答案 0 :(得分:2)
现在check_authentication请求确实返回is_valid:true。
但这引出了我的下一个问题。即使我连续多次执行请求,它也会返回is_valid:true。它不应该返回is_valid:false我第二次查询以确保只能有一个相应的checkid_setup和check_authentication请求吗?