OAuth授权的工作原理

资料出处: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建立合作关系

  1. github的账户下,新增:"blibli的图标+需要"读取账户信息”权限+blibli的域名";
  2. Github,发送给blibli两张门票:Client_Id + Client_Secret;
  3. 用户点击了“使用github账号登录”,

第一步:blibli将门票client_id交给用户

  1. 用户拿着client_id进入github的授权页面;
  2. github看到用户手里的门票后,知道是blibli让他过来的,于是把blibli想要的权限“读取账户信息”摆出来,询问用户是否同意;
//github授权地址
GET:'https://github.com/login/oauth/authorize'
//用户携带的门票
params= {
 client_id:”xxx”,
 redirect_url:"https://www.bilibili.com"
}

  1. 用户选择不同意,整个授权流程结束;
  2. 用户选择同意,github返回给用户一张盖章后的门票code;
  3. 用户返回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"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容