2010-02-15 41 views
0

我在使用openid check_authentication時遇到了一些麻煩。從OpenID提供(我試圖與谷歌和myOpenID來說)的回答總是:is_valid:假openid check_authentication問題

我已經得到了openid.sig和openid.identity但是當我嘗試 驗證我的數據與check_authentication叫它總是返回 is_valid:false。

我至今(認證與谷歌的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是我的本地測試環境)

然後我將重定向到google登錄頁面,我可以在其中登錄 並接受我將在Localhost登錄。 雖然我沒有選中記住複選框。

登錄,我將重定向到的return_to頁予設置和 獲得請求中的以下數據後:

openid.ns = HTTP%3A%2F%2Fspecs.openid.net%2Fauth%2F2 0.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 = AOQ obUfpVnBFYzFO15z92rru88nWjEnw0u8ethVscpjDwkssp8GjVc0u &和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)

要驗證此簽名和谷歌ID,我組成了一個webrequest 如openid.net/specs/openid-authentication-1_1中所述調用check_authentication。HTML#mode_check_authentication

我現在的問題是,這總是返回is_valid:假

爲了消除我的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」]%>」 /> 「/> 」/> 「/> 」/> 「/> 」/>

但是,這也只是產生了is_valid:假

有沒有人有一個想法有什麼不對我的做法?

非常感謝你

+1

您對OpenID 1.1規範的引用表明您正在查看錯誤的規範。你應該指的是OpenID 2.0規範。 我懷疑你的實現中有一些很大的安全漏洞,這取決於你想要做的一些事情。你有沒有考慮過使用經過驗證的庫,如DotNetOpenAuth? http://blog.nerdbank.net/2008/04/argument-for-extra-dependency-of.html –

回答

2

啊,我發現了這個問題。我忘了發回openid.claimed_id。

現在check_authentication請求確實返回is_valid:true。

但是這導致我到下一個問題。它確實返回is_valid:即使我連續多次執行請求也是如此。不應該返回is_valid:false我第二次查詢以確保只能有一個相應的checkid_setup和check_authentication請求?