资料出处:https://www.zhihu.com/question/19781476#answer-382596
https://open.weibo.com/wiki/Oauth
🍐 钥匙
新浪微博就是你的家。偶尔你会想让一些人(第三方应用)去你的家里帮你做一些事,或取点东西。你可以复制一把钥匙(用户名和密码)给他们,但这里有三个问题:
1)别人拿了钥匙后可以去所有的房间 2)别人拿到你的钥匙后也许会不小心丢到,甚至故意送到它人手里。这样你都不知到谁有你家钥匙。 3)过一段时间你也许会想要回自己的钥匙,但别人不还怎么办?
OAuth 是高级钥匙:
1)你可以配置不同权限的钥匙。有些只能进大厅(读取你的微博流)。有些钥匙可以进储藏柜(读取你的相片) 2)钥匙上带着指纹验证的(指纹 = appkey)。 收到钥匙的人只能自己用,不能转让 3)你可以远程废除之前发出的钥匙
相对来说, OAuth比给出用户名密码安全
🍐用户使用 github 登录网站留言
github 有账号,账号对应着多项权限,比如读取账户信息,比如拉取仓库代码等;
我是blibli的无账号访客,有一天想发一条弹幕,网站提示我登录,1、先注册再登录。2、使用github账号登录;我选择了2。
背景:Blibli向github建立合作关系
- github的账户下,新增:"blibli的图标+需要"读取账户信息”权限+blibli的域名";
- Github,发送给blibli两张门票:Client_Id + Client_Secret;
- 用户点击了“使用github账号登录”,
第一步:blibli将门票client_id交给用户
- 用户拿着client_id进入github的授权页面;
- github看到用户手里的门票后,知道是blibli让他过来的,于是把blibli想要的权限“读取账户信息”摆出来,询问用户是否同意;
//github授权地址
GET:'https://github.com/login/oauth/authorize'
//用户携带的门票
params= {
client_id:”xxx”,
redirect_url:"https://www.bilibili.com"
}
- 用户选择不同意,整个授权流程结束;
- 用户选择同意,github返回给用户一张盖章后的门票code;
- 用户返回blibli网站
Location: “https://www.bilibili.com/?code=xxx”
第三步:blibli拿着“用户带回的盖章门票code+ github上次发的client_secret”,去拜访github
其中client_secret是用于给github确认,过来拜访的是blibli无误;
blibli拿到GitHub发放的绿卡access_token(有有效期,过期需要使用refresh_token重新认证)
//github授权地址
POST:'https://github.com/login/oauth/authorize'
//blibli携带的盖章门票及身份ID
params={
code=“xxx”,
client_id=“xxx”,
client_secret=“xxx”,
redirect_url:”https://www.bilibili.com”,
}
//blibli拿到github发放的绿卡
response={
access_token:”xxx”,
Scope:”读取账户信息的权限”,
token_type=“xxx”,
refresh_token=“xxxxxx”,
}
用户发送弹幕
此时,blibli拿着绿卡access_token,调用github提供的api读取到了用户头像和昵称,
GET: "http://api.github.com/user?access_token=xxx"
网友评论