“OAuth 2.0 provides specific authorization flows for web applications, desktop applications, mobile phones, and smart devices.”
每一个项目的设计都离不开认证授权,即使是公开访问的资源,也属于一种特殊的匿名认证。作为一个合格的Java研发,你需要知道认证的几种方式,怎么设计一个支持各种方式登录的服务器,如何控制第三方应用程序访问用户资源,本文带你一步步揭开认证授权的面纱!
欢迎关注我技术公众号 ,微信搜索 sugelakai
什么是OAuth2?
OAuth2.0授权框架使第三方应用程序能够代表资源所有者通过协调资源所有者和HTTP服务之间的批准交互,或允许第三方应用程序代表自己获得对HTTP服务的有限访问。
说人话:OAuth2是一种协议,用来定义如果有人想接入你写的服务,如何获取用户的授权并访问用户在你服务器上的资源,OAuth2就规定了整个流程该如何交互。
再通俗点,你点了个外卖,告诉外卖小哥你的地址。你家小区,就是你的服务器,你家小区大门口有人脸认证开门,如果有外卖进入,肯定进不来,那外卖小哥就给你打电话,你给保安大哥说给他个临时密码让他进来吧,然后外卖小哥把外卖送到你的地址。这就是OAuth2。
OAuth2.0中的角色
resource Owner 资源拥有者,简单理解为用户 (你自己)
resource server 资源服务,可以简单理解为接口提供者 (外卖地址)
client 客户端,想要接入的应用,包含第三方应用 (外卖小哥)
authorization server 认证服务器,负责颁发校验token(门口保安)
OAuth2.0的认证方式
Authorization Code
Implicit
Resource Owner Password Credential
Client Credentials
本篇文章主讲第一种也是最常用的一种Authorization Code ,
先看下该模式的整个流程。
流程图
A: 客户端发起认证请求,开启整个认证流程,通常是用浏览器,请求resource owner(资源拥有者,也就是用户)来同意自己获取该用户在resource server上的资源(通常是接口)
B:resource owner 资源拥有者进行认证,选择授权还是拒绝
C:如果资源拥有者同意授权,authorization server返回code
D: 客户端携带上一步返回的code请求token
E: 认证服务返回access_token 和 refresh_token
整个流程就是这样,具体的细节参数下面讲,可能有点绕,先有一个感性的认识,
基于上面流程分析一下gitlab使用github的第三方登录。
Gitlab登录页面,可以看到有Sign in with GitHub。那么GitLab在OAuth2.0的角色
是什么呢?
答案是client