OAuth2.0與OpenId
兩者有些模糊,對應第三方應用來說有以下區別
OAuth2.0:用於獲取權限訪問第三方(非認證驗證方)的資源(當然,獲取權限前需要身份認證);
OpenId:僅僅用於標識身份,沒有第三方訪問權限(舉例說明:假如我的應用app1通過第三方的openid認證,那麼我只知道當前登錄的用戶對應第三方的openid,我無法根據我的openid在我應用app1之外獲取資源)。
openId可以通過OAuth2獲取(此時openid作爲資源,除此之外,openid可以通過自身的協議進行獲取,不在本文討論範圍)。
QQ的OAuth過程
Step1:獲取Authorization Code
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101181432&state=1&redirect_uri=http://www.shikongxian.com/index.htm
得到:http://www.shikongxian.com/index.htm?code=3243401EAEBDCBABB58EF523AC2422BA&state=1Step2:通過Authorization Code獲取Access Token
https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101181652&redirect_uri=http://www.shikongxian.com/index.htm&client_secret=2##@#4d7b6e734324d69163&code=3243401EAEBDCBABB58EF523AC2422BA
得到:access_token=7C8A1946B280982357F533770D7C9156&expires_in=7776000&refresh_token=991042FB2AB176AEF0784FB7FEAAAF5DStep3:使用Access Token來獲取用戶的OpenID(屬於資源訪問)
https://graph.qq.com/oauth2.0/me?access_token=7C8A1946B280982357F533770D7C9156
得到:
callback( {“client_id”:”101181652”,”openid”:”6D5C9B3434D434599543二3B5FCC9”} );Step4 調用API獲取用戶信息(此步驟的openid有些多餘,access_token可以確定一個用戶)
https://graph.qq.com/user/get_user_info?access_token=7C8A1946B280982357F533770D7C9156&oauth_consumer_key=101181652&openid=6D5C9B84516B59543F13B65CC9
{ “ret”: 0, “msg”: “”, “is_lost”:0, “nickname”: “111”, “gender”: “男”, “province”: “111”, “city”: “122”, “year”: “1941”, “figureurl”: “http:\/\/qzapp.qlogo.cn\/qzapp\/101181652\/6D5C9B343E94D16B599CB27F13B5FCC9\/30”, “figureurl_1”: “http:\/\/qzapp.qlogo.cn\/qzapp\/101181652\/6D5C9B843D16B599CB27F13B5FCC9\/50”, “figureurl_2”: “http:\/\/qzapp.qlogo.cn\/qzapp\/101181652\/6D5C9B85494D16B599CB27F13B5FCC9\/100”, “figureurl_qq_1”: “http:\/\/q.qlogo.cn\/qqapp\/101181652\/6D5C9B81BE94432B599CB27F13B5FCC9\/40”, “figureurl_qq_2”: “http:\/\/q.qlogo.cn\/qqapp\/101181652\/6D5C9B81BE23435B599CB27F13B5FCC9\/100”, “is_yellow_vip”: “0”, “vip”: “0”, “yellow_vip_level”: “0”, “level”: “0”, “is_yellow_year_vip”: “0” }