OAuth 认证允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的账户密码或他们的所有数据。在产品上的经典例子是,我做了A网站,但是用户可以通过微博、微信、github登录。
阅读资料
- 理论学习:阮一峰老师的一篇文章:理解OAuth 2.0
- 服务商视角:ImportSource博主的文章:创建一个Spring Security OAuth认证服务,其中的实战部分讲解了作为服务商如何构建OAuth服务;
- 第三方网站视角:OAuth 2.0 认证的原理与实践,这篇文章的例子是作为第三方网站如何与服务商(github)交互的流程。
概念阐述
OAuth是用户、服务提供商(用户信息的提供者)、第三方网站(用户资源的使用者)三者之间通过协作来完成信息的请求、授权、使用的协议。
- 用户:第三方网站的使用者
- 服务商:用户信息的管理者
- 第三方网站:用户信息的访问者
场景重现:授权码(访问令牌)模式
- 用户访问第三方网站,第三方网站想对用户存放在服务商的某些资源进行操作。
- 第三方网站向服务商请求一个临时令牌。
- 服务商验证第三方网站的身份后,授予一个临时令牌。
- 第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
- 用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所想要和能够访问的资源。
- 授权成功后,服务商将用户导向第三方网站的返回地址。
- 第三方网站根据临时令牌从服务商那里请求访问令牌。
- 服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
- 第三方网站使用获取到的访问令牌访问存放在服务商对应的用户资源