1. 一个例子
有三个干系人:房主,中介,购房者。房主把钥匙放在了中介那里。
1.购房者有看房意愿,只能找中介,告诉中介,我是购房者张三。
2.中介看到是张三,就和房主沟通,房主同意,就把钥匙给了张三。
3.张三带着钥匙去看房。
重复上面的场景:
1.网站A被浏览器打开,用户想登录,网站就把用户跳转到了IdentityServer4服务器的页面,页面中要求输入用户名密码。
2.IdentityServer4服务器发现zhang3是合法用户,也有权限访问网站A,就把AccessToken传回给zhang3,也就是又跳转回网站A同时带着AccessToken。
3. zhang3用这个AccessToken继续访问网站A。
2. OAuth 2.0 的四种方式
例子中使用了四种方式中的一种,叫授权码模式。
2.1 授权码模式
IdentityServer4服务器不想让网站A知道用户名和密码,所以有如下详细流程:
1. 网站A在跳转链接中添加自己的标志符,跳转到IdentityServer4服务器页面
2. IdentityServer4服务器页面中要求用户再输入用户名密码,这样,IdentityServer4服务器就知道了用户要访问的应用,也就是网站A,也知道了用户名密码。
3. IdentityServer4服务器查询自己的数据库,发现用户合法,就发给网站A一个授权码(authorization code)。
4. 网站A收到了授权码,再使用这个授权码跳转到IdentityServer4服务器,IdentityServer4服务器再发放access_token到网站A。
5.网站A收到access_token,允许用户继续访问。
2.2 第二种方式:隐藏式
1. 网站A在跳转链接中添加自己的标志符,然后跳转到IdentityServer4服务器
2. IdentityServer4服务器查询自己的数据库,发现合法,就发给网站A一个access_token
3.网站A收到access_token,允许用户继续访问。
2.3 第三种方式:密码式
1. 用户要在网站A中输入用户名密码,然后跳转到IdentityServer4服务器
2. IdentityServer4服务器查询自己的数据库,发现用户合法,就发给网站A一个access_token
3.网站A收到access_token,允许用户继续访问。
2.4 第四种方式:凭证式
1. 网站A中在跳转链接中添加自己的标志符和密码,然后跳转到IdentityServer4服务器
2. IdentityServer4服务器查询自己的数据库,发现用户合法,就发给网站A一个access_token
3.网站A收到access_token,允许用户继续访问。
3. 更新令牌
IdentityServer4服务器在发放access_token时会带有一个refresh_token, 网站A中的access_token过期时,可直接用refresh_token来换取access_token,不用再走复杂流程。
4. 参考
OAuth 2.0 的四种方式 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.htmlOAuth 2.0 — OAuth
https://oauth.net/2/