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” }