概述
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(authorization layer)。“客户端"不能直接登录"服务提供商”,只能登录授权层,以此将用户与客户端区分开来。"客户端"登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。"客户端"登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放用户储存的资料。 客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)
客户端接入
我们通过一个案例,讲解如何将第三方平台接入OAuth2的单点登录,这里以纸蜂平台为例。下图是纸蜂平台接入OAuth2单点登录的时序图。1、注册客户端
1.1、clientId 和 clientSecret
由于我们选用的是授权码模式,当新的客户端接入单点登录时,都需要在认证中心注册对应的 clientId和clientSecret。而客户端只需要保存 clientId和对二者加密后的 Authorization值,如果纸蜂的clientId为paperbeeClient1.2、token 的过期时间
我们OAuth2签发的令牌是通过Jwt来生成token的,每个客户端可以自定义jwt token的过期时间,然后注册在认证中心。2、前端路由守卫控制
纸蜂的前端是由路由守卫控制,路由守卫的过滤规则是判断LocalStorage中是否有access_token,如果有access_token,并且未过期则页面路由放行。2.1、获取token
当前端路由守卫在LocalStorage中获取不到access_token时,则跳转至认证中心的授权登录地址:{认证中心域名}/uaa/oauth/authorize?response_type=code&client_id=paperbeeClient&redirect_uri=http://paperbee.definesys.com/login/loading- {认证中心域名}/uaa/oauth/authorize:授权地址
- response_type=code:授权码模式
- client_id=paperbeeClient:客户端的clientId
- redirect_uri=http://paperbee.definesys.com/login/loading ,登录成功后的重定向地址。http://paperbee.definesys.com/login/loading 是纸蜂平台自定义开发的页面,用于拿到授权码后获取 access_token
2.2、刷新过期的token
路由守卫虽然在LocalStorage中检测到access_token,但当检测到该jwt 的token已过期,则需要拿 refresh_token通过调用接口 - {认证中心域名}/uaa/oauth/token ,来获取最新的access_token和refresh_token,并在LocalStorage中替换。 刷新token的接口(POST)调用方式为:2.3、校验jwt token
access_token是第三方系统的前端来获取的,所以对于前端来说,本身就已经保证了token的合法性,用户的账号信息可以直接通过对token的base64解码来获取。 但是前端在调用后端接口时也是要携带token,为了防止伪造,第三方的后端服务就需要拿这个token去认证中心的服务器上去校验token的合法性,并获取对应token的用户信息。 临时提供的接口地址 - {认证中心域名}/uaa/user/parseJwt (GET):3、注销
授权登录都是跳转到认证中心域名下的登录页面,在登录成功后,会在该域名下生成认证的Cookie。 优点:在同一个浏览器上,只要有一个接入单点登录的第三方系统登录后,其他的系统无需登录就能获取到授权码。 缺点:如果想重新登录,就需要清除当前浏览器中,认证中心域下的Cookie。 认证中心已经提供了一个注销的地址 - {认证中心域名}/uaa/logout ,当的第三方系统页面上点击注销,只需要跳转到该地址,会自动清除认证中心域名下的Cookie,并重定向回第三方系统的当前页面。4、客户端后台接口
第三方系统的前端在调用后端接口时,会携带 jwt 的 access_token,由于jwt的密钥只存在认证中心的服务器上,第三方系统的后台是没有办法去验证并解析获取到的access_token的。 所以当客户端后台需要获取当前access_token用户的信息,只能通过携带access_token调用认证中心开放的指定接口,并由认证中心来验证当前access_token是否合法授权。![0f059eb3f02daf42c3e5b63a5c520c3a.png](https://i-blog.csdnimg.cn/blog_migrate/f9006c56fa91afdcb7c9446550804d39.jpeg)
关于得帆
![7bf9dea4f7e86bf1d8dfcdf7608e8904.png](https://i-blog.csdnimg.cn/blog_migrate/f48cbb03654d576de4fa3d74779ecca5.jpeg)
上海得帆信息技术有限公司(简称:得帆信息),公司注册在上海张江高科技园区,经过创始团队10年的经营发展,得帆信息已经成为中国在企业级中间件(ESB,Portal,BPM,微服务)和中间件云产品领域人员规模大、服务范围广、客户群体多的IT咨询服务公司之一。
经过10年的砥砺前行,拥有超过300+的大中型客户,实施超过1000+的中间件项目,每年收入50%以上来源于老客户,成为当之无愧的中间件技术服务领导者,用口碑和技术实力践行了得帆的使命“用信息技术帮助客户幸福和成功”。
得帆信息的服务领域包括企业级中台系统咨询和实施、ESB信息系统集成、BPM业务流程系统实施、企业集团全球官网实施、企业内网门户及身份管理实施、大数据规划和实施等服务,为推动客户在数字化,互联网+和工业4.0转型提供专业的信息化支撑和保障。
![cd13049bd127efea87e54e5895eb1a2b.png](https://i-blog.csdnimg.cn/blog_migrate/0541fae52b745dab4dcfb5c610be0be1.jpeg)