我有以下情況:提供在Metro應用谷歌登錄,避免重複許可的授予(的oauth2 /谷歌的OpenID)
目前,我正在嘗試寫一個Metro風格的應用程序,以讓能力用戶使用他的Google帳戶登錄,並且該應用程序請求多個權限,如Userinfo.profile和Userinfo.email。
爲此,我正在使用OAuthv2,並要求詳細的工作很好(經過相當多的努力和研究)。
URL中使用:
const string url = "https://accounts.google.com/o/oauth2/auth?" +
"client_id=" + clientId +
"&redirect_uri=" + "urn:ietf:wg:oauth:2.0:oob" +
"&response_type=code" +
"&scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email" +
"&access_type=offline";
現在的問題是,如果我想將用戶留驗證,我想要麼通過保存令牌在客戶方這樣做,由用戶,或找到某種方式使用Google登錄,保持會話並檢查他是否通過身份驗證。
問題是,我不知道如何執行後者,也不知道如何使用它。 目前,每次打開應用程序時,用戶都會被重定向到google授權頁面,整個過程在每次重新啓動時都會重新開始。
我想要完成的是,如果用戶登錄,我有一些方法可以識別他,而不是總是通過重新請求給定詳細信息的權限來爲他添加負擔。
我看着OpenID,但我總是
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/server</Type>
<Type>http://openid.net/srv/ax/1.0</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
<Type>http://specs.openid.net/extensions/pape/1.0</Type>
<URI>https://www.google.com/accounts/o8/ud</URI>
</Service>
</XRD>
</xrds:XRDS>
作爲此網址的響應:
https://www.google.com/accounts/o8/id?openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=urn:ietf:wg:oauth:2.0:oob&openid.ns.ui=http://specs.openid.net/extensions/ui/1.0&openid.ns.ax=http://openid.net/srv/ax/1.0&openid.ax.mode=fetch_request&openid.ax.required=email,firstname,language,lastname,country&openid.ns.ext=http://specs.openid.net/extensions/oauth/1.0&openid.ext2.consumer=https://www.google.com/accounts/o8/ud?openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=urn:ietf:wg:oauth:2.0:oob&openid.ext2.scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email
難道我構建它錯了嗎?
如果有任何建議,無論是對如何執行這個「正確」,就是我試圖完成(與谷歌的整合,允許用戶登錄使用谷歌電子郵件和只有如果他不是招't授權該應用程序,請求他這樣做,再加上尋找一種方式,讓他登錄第二次以後的時間),或者如何才能做到這一點,請放心。
此外,通過使用.Net 4.5框架的精簡版本,似乎我無法使用OpenID庫,因爲它們依賴於完整的4.5。
* 編輯 *望着MSDN此出現:
To support SSO, the online provider must allow you to register a redirect URI in the form ms-app://appSID, where appSID is the SID for your app.
這是否意味着它僅僅是不可能的?因爲在谷歌我只能請求與http(s)://
域的密鑰?
是的,我確實收到了一個授權令牌,將它換成訪問令牌等。這很好,但如果用戶退出應用程序,我應該重定向到哪些Google url以接收它們適當的標識符,所以我可以找出使用哪個標記?就像用戶登錄頁面一樣,我收到他的userId,所以我知道使用哪個令牌?所有[此授權](https://developers.google.com/accounts/docs/OAuth2InstalledApp)均正常運行。 – Daneo
對於已安裝的應用程序,我們目前沒有辦法讓您將用戶發送給我們,也沒有提示他們。這對於js客戶端應用程序是可能的,但出於安全原因,我們爲安裝的應用程序阻止它。註銷應用程序的用戶應該非常少見,例如,如果他們想要切換應用程序。你可以讓他們永久登錄,並讓他們添加accts並切換。 –
我明白了,作爲一個側面問題(也許更新你的答案和安全原因部分),clientSecret和Id的存儲位置在哪裏?因爲如果一個應用程序被拆卸,他們可能只是在看這個祕密,所以在這種情況下我應該怎麼做?或者沒有那麼重要? – Daneo