我已經經歷了大量Google文檔和SO Q/A,但沒有運氣。我想知道是否有人已經按照Google的建議成功地使用了OpenId到OpenId Connect的遷移。Google OpenId Connect遷移:在ASP.NET應用程序中獲取openid_id
這是我們用來做:
IAuthenticationResponse response = _openid.GetResponse();
if (response != null) {
//omitted for brevity
} else {
IAuthenticationRequest req = _openid.CreateRequest("https://www.google.com/accounts/o8/id");
req.AddExtension(new ClaimsRequest
{
Country = DemandLevel.Request,
Email = DemandLevel.Request,
Gender = DemandLevel.Require,
PostalCode = DemandLevel.Require,
TimeZone = DemandLevel.Require
});
req.RedirectToProvider();
}
這是使用版本DotNetOpenAuth的可以追溯到幾年完成。由於Google不贊成使用OpenId身份驗證,因此我們正在嘗試轉移到OpenID Connect。這裏的關鍵問題是:我能否以某種方式使用最新版本的DotNetOpenAuth庫或其他任何方式獲得OpenId標識符(形式爲https://www.google.com/accounts/o8/id?id=xyz)?
我試過最新的DotNetOpenAuth,我可以讓它工作,但它給了我一個新的Id(這是預期的)。我也用這個URL嘗試JavaScript的方式(換行符爲了可讀性):
https://accounts.google.com/o/oauth2/auth?
scope=openid%20profile%20email
&openid.realm=http://localhost/palkkac/
&client_id=//here is the client id I created in google developer console
&redirect_uri=http://localhost/palkkac/someaspxpagehere
&response_type=id_token%20token
我檢查(使用招),我們使用舊DotNetOpenAuth代碼發送當前的境界值,它是http://localhost/palkkac/
。我已經在上面的url中放置了相同的領域。重定向網址與域值開始,但它不完全相同。
當我重定向到一個簡單的頁面解析id_token和密碼進行解密(使用https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=zyx
終點)我得到這樣的:
audience "client id is here"
email "[email protected]"
expires_in 3597
issued_at //some numbers here
issued_to "client id is here"
issuer "accounts.google.com"
user_id "here is a sequence of numbers, my id in the OpenID Connect format that is"
verified_email true
因此,有沒有,你會期望找到openid_id領域的標誌在這裏,儘管該消息的整個結構似乎與Google文檔不同,但例如,沒有標題爲sub的字段。我想知道我是否真的在使用錯誤的端點,參數或其他東西?
我一直在閱讀的是移植指南:https://developers.google.com/accounts/docs/OpenID
。我跳過了第2步,因爲它看起來像是一個可選步驟。在第3步中,討論了openid_id字段,我想首先將其作爲概念證明。
我們在Google上註冊了應用程序,以創建客戶端ID等。現在還有許多允許的重定向網址以及在Google開發控制檯中列出的JavaScript來源。讓我知道如果這些可能會搞砸這個系統,我會在這裏張貼他們的評論。
注意:我們應該將應用程序移動到嚴格防火牆的環境中,在那裏我們需要打開端口才能在服務器端執行此操作。因此,首選客戶端JavaScript解決方案來訪問谷歌並結合HTTPS並將結果重定向到服務器(除非有其他說法與此相反)。
上有SO對此同樣問題的其他資源,儘管所有這些似乎都使用不同的庫在服務器端做的工作,似乎沒有人在使用Javascript作出的任何嘗試:
- 這裏(
https://stackoverflow.com/questions/22842475/migrating-google-openid-to-openid-connect-openid-id-does-not-match
)我認爲通過將領域設置爲與舊的OpenId2.0流程相同,解決了問題。這似乎不適用於我的情況。 - over here openid_id字段也不存在,但這裏的問題更多地是關於如何使用DotNetOpenAuth以外的庫從Google請求id_token。
- 和here似乎有類似的問題讓谷歌返回openid_id字段。
幫助我們也一直無法經過一個多月的搜索後找到解決這個問題的辦法。 – spadelives 2014-11-05 20:46:55
@spadelives我看到你終於想出瞭如何使用Owin和ASP.NET MVC發送領域參數(參考你的SO問題)。但是你仍然沒有得到兩個身份證,是這樣嗎? – mikkark 2014-11-07 06:17:56
是的,我使用cortex93 – spadelives 2014-11-08 17:42:49