不会鉴权不行啊,通过Github理解鉴权
因为最近的一些需求,我不得不对鉴权反复翻检。如是
我通过了一些简单的例子对OAuth全面理解。其实并不高深,大约10分钟,就可以完全理解它。
OAuth 2.0
注册Github OAuth
最后如图
初步握手,获取Code
接口地址
https://github.com/login/oauth/authorize
请求参数
参数 | 描述 |
---|---|
client_id | 如上图所示,他是鉴别OAuth的 |
state | 状态标识,面向第三方,可自定义 |
redirect_uri | 回调地址,需要和Github中填写的一致 |
最后拼接
https://github.com/login/oauth/authorize?client_id=937bcc8fee696da4dde7&state=1&redirect_uri=https://img.i5res.com/#/login
请求后他能给我些什么?
?code=0dbc9506a2a4a0c1a1c9&state=1
请求鉴权回调返回access_token
接口地址
https://github.com/login/oauth/access_token
请求参数
参数 | 描述 |
---|---|
client_id | 如上图所示,他是鉴别OAuth的 |
client_secret | 如上图所示,OAuth的秘钥(高密) |
code | 回调的用户鉴别 |
redirect_uri | 回调地址 |
最后拼接
https://github.com/login/oauth/access_token?client_id=937bcc8fee696da4dde7&client_secret=63b41a1c278b37f348c956785e7d6d1fbc2084d9&code=4f9968079245b9ddbb8a&redirect_uri=https://img.i5res.com/#/login
请求后返回?
{
"access_token":"ACCESS_TOKEN",
"token_type":"bearer",
"expires_in":2592000,
"refresh_token":"REFRESH_TOKEN",
"scope":"read",
"uid":100101,
"info":{...}
}
使用Github的RSET API进行操作
具体参见: GitHub's rest API documentation
https://github.com/login/oauth/access_token
这两个都建议使用GET
请求,也可以使用POST
https://api.github.com/user
需要使用HTTP模拟的GET
请求!
OAuth的持续发展
是什么
https://blog.csdn.net/a595077052/article/details/118996218
OAuth 2.0 是一种开放协议。
OAuth 2.0 的标准是 RFC 6749 文件。
举例:我们都在网站或者手机应用中见过 “谷歌登陆” 和 “绑定 Facebook“ 这样的按钮。如果你点击这个按钮,就会有一个窗口弹出并显示“这个应用想要访问你的公共个人主页、通讯录……“,同时它会询问你是否授权。概括而言,这就是 OAuth
如今过半数的APP都使用到了这一鉴权方式,他相比对OAuth 1.0的安全性有大幅度提升
发展历程
- 2007年发布了OAuthCore 1.0:此版本的协议存在严重的安全漏洞
- 2009年6月发布了OAuthCore 1.0 Revision A:修复了前一版本的安全漏洞,并成为RFC5849
- 2010年4月发布了OAuth2.0,是OAuth协议的下一版本,但与OAuth 1.0版本互不兼容。
所以我们现在可以只关注 OAuth2.0
OAuth core docs: https://oauth.net/
单点登录
开源项目jwt有简单的描述。
很简单的剖析一下,
一、假设你有很多服务器(集群),你需要一个所有集群都认可的鉴权。
二、你需要携带这份密钥行进在各页面之间。
如果解决这两大问题,那么就可以实现了。
jwt是目前很多公司的解决方案(包括我的学校)