OAuth2.0协议基本概念
OAuth 2.0是行业标准的授权协议。OAuth 2.0取代了2006年创建的原始OAuth协议所做的工作.OAuth 2.0专注于客户端开发人员的简单性,同时为Web应用程序,桌面应用程序,移动电话和客厅设备提供特定的授权流程。该规范及其扩展正在IETF OAuth工作组内开发。
OAuth2.0协议中的授权模式
- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)
OAuth2.0协议实现第三方登录
刚开始我特别疑惑,OAuth2.0的目的是实现授权的功能,和应用实现三方登录有什么联系呢?然后看了慕课网上JoJozhai老师的《Spring Security开发安全的REST服务》课程,恍然大悟。
OAuth2.0可以帮组我们获取三方应用的授权,如果我们从三方应用获取到用户信息,就可以拿到用户信息在本地应用构建属于我们自己的用户,也就是把三方应用的用户变成我们自己的用户。
但是新的问题又来了,难道每次用户通过三方登录都要重新构建用户吗?这倒不用,我们可以将从三方应用获取到用户ID和本地构建的用户的ID建立映射关系。
那么OAuth2.0协议三方登录的具体流程是如何的呢?这里我只介绍一下OAuth2.0协议的授权码模式是如何帮助我们实现三方登录的。
OAuth2.0协议第三方登录流程图(图片截图自慕课网课程,如有侵权,请联系我删除)
说明:
当用户访问我们本地应用的时候,我们将用户指向第三方认证服务器,用户在上面确认是否同意授权的动作(注意:这个动作是在第三方应用上确认的),当用户确认授权后,第三方应用会返回到我们本地应用的某个地址,这个地址是本地应用和第三方应用之前就协商好了的,同时也会携带一个授权码回来。
本地应用获取到来自第三方应用的授权码之后,再把授权码带上去第三方应用认证服务器申请Token,获取到Token之后,之后就可以带上这个Token去请求一些指定的用户信息(Token具有时效性和功能性)。
如果要实现第三方登录,这时候本地应用请求的就是一些用户的可以公开的信息,比如用户昵称,用户ID。本地应用拿到这些信息就可以在本地构建一个本地用户,和第三方应用的用户建立好映射关系以便下次登录,这样就实现了第三方登录。