搭建基于OAuth2和SSO的开放平台

搭建基于OAuth2和SSO的开放平台

原创文章,转载或摘录请说明文章来源:http://heartlifes.comgit

开放平台介绍

什么是开放平台

开放平台在百科中的定义:
开放平台(Open Platform) 在软件行业和网络中,开放平台是指软件系统经过公开其应用程序编程接口(API)或函数(function)来使外部的程序能够增长该软件系统的功能或使用该软件系统的资源,而不须要更改该软件系统的源代码。github

通俗或者说应景点的说法,开放平台,就是互联网企业,将其内部的资源(通常是数据),好比用户数据,平台业务数据,以技术的手段(通常是RESTFul接口API),开放给受控的第三方合做伙伴,活公司内部的其它一些产品,造成一个安全受控的资源暴露平台。spring

为何要搭建开放平台

搭建开放平台的意义,通常在于:
1.搭建基于API的生态体系
2.利用开放平台,搭建基于计费的API数据平台
3.为APP端提供统一接口管控平台,相似于网关的概念
4.为第三方合做伙伴的业务对接提供授信可控的技术对接平台编程

开放平台体系结构图

open

开放平台核心模块

一个典型的开放平台,至少包含如下几个核心模块:
1.平台门户
平台门户负责向第三方展现用于进行业务及技术集成的管理界面,至少包含如下几个功能:
1.服务商入住(第三方合做伙伴入住)
2.应用配置(第三方应用管理)
3.权限申请(通常包括接口权限和字段权限)
4.运维中心(开放平台当前服务器、接口状态,服务商接口告警等)
5.帮助中心(入住流程说明,快速接入说明,API文档等)浏览器

2.鉴权服务
鉴权服务负责整个平台的安全性
1.接口调用鉴权(第三方合做伙伴是否有权限调用某接口)
2.用户受权管理(用户对某个第三方应用获取改用户信息的权限管理)
3.用户鉴权(平台用户的鉴权)
4.应用鉴权(第三方合做伙伴的应用是否有权调用该平台)安全

3.开放接口
开放接口用于将平台数据暴露给合做伙伴
1.平台用户接口(用于获取公司APP生态链中的用户信息)
2.平台数据接口(平台中的一些开放数据)
3.其它业务接口(平台开放的一些业务数据)服务器

4.运营系统
运营系统是整个平台的后台业务管理系统,负责对第三方合做伙伴提出的各类申请进行审核操做,对当前应用的操做进行审计工做,对当前业务健康度进行监控等
1.服务商管理(对第三方合做伙伴的资质进行审核、操做)
2.应用管理(对第三方应用进行审核、上下线管理)
3.权限管理(对合做伙伴申请的资源进行审核、操做)
4.统计分析(监控平台当前运行状态,统计平台业务数据)cookie

OAuth2介绍

什么是OAuth2

百科:OAUTH协议为用户资源的受权提供了一个安全的、开放而又简易的标准。与以往的受权方式不一样之处是OAUTH的受权不会使第三方触及到用户的账号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就能够申请得到该用户资源的受权,所以OAUTH是安全的。oAuth是Open Authorization的简写。网络

简单来讲:OAuth2协议,定义了一套用户、第三方服务和存储着用户数据的平台之间的交互规则,可使得用户无需将本身的用户名和密码暴露给第三方,便可使第三方应用获取用户在该平台上的数据,最多见的场景即是如今互联网上的各类使用XXX帐号登陆。session

OAuth2协议中角色介绍

OAuth2协议中,共有四个参与方(角色):
1.resource owner:资源拥有者
即用户
2.resource server:资源服务器
即存储用户数据的服务器,通常对外都以RESTFul API的形式暴露用户数据,client使用access token访问resource server申请被保护起来的用户数据
3.client:客户端
即第三方应用
4.authorization server:受权服务器
用来鉴权第三方应用合法性,并对用户登陆、是否受权第三方应用获取数据进行响应,并根据用户操做,想第三应用颁发用户token或者告知受权失败

OAuth2经常使用协议介绍

OAUTH2标准业务协议,以下图所示
oauth
A.第三方应用向用户请求受权,但愿获取用户数据
B.用户赞成受权
C.第三方应用拿着用户受权,向平台索要用户access token
D.平台校验第三应用合法性及用户受权真实性后,向平台发放用户access token
E.第三方应用拿着用户access token向平台索要用户数据
F.平台在校验用户access token真实性后,返回用户数据

OAuth2使用场景介绍

目前,OAuth2协议使用最多的场景仍是用以给第三方应用获取用户信息,业务流程以下图所示
case
1.在浏览器中,用户点击第三方应用按钮,由第三方应用发起请求,向平台发起受权请求。
2.平台在接收到第三方应用请求后,浏览器跳转用户登陆界面,请求用户进行登陆。
3.用户在平台登陆界面输入用户名、密码进行登陆
4.平台判断用户合法性,校验失败,在浏览器中提示错误缘由
5.平台判断用户是否须要对该第三方应用进行受权。(不须要受权的状况有两种:a.平台信任该第三方应用,如公司内部应用,无需用户进行受权,默认给予用户数据。b.该用户以前已经给该应用授予过权限,而且仍在有效期内)
6.如需受权,平台跳转浏览器界面至受权界面,告知用户将授予哪一个第三方哪些数据权限
7.用户受权后,将用户受权码回调给第三方url
8.第三方在获取用户受权码后,带着用户受权码访问平台鉴权接口,请求用户token
9.平台在收到第三方请求后,校验受权码真实性,并返回用户token
10.第三方使用用户token向平台请求用户接口
11.平台接口判断用户token真实性,并向第三方返回用户数据

OAuth2核心功能说明

1.应用注册
应用注册后,OAuth2会下发应用app_id和app_secret,用以标记该应用的惟一性,而且这两个参数将贯穿整个OAuth协议,用以对应用合法性进行校验。同时,应用须要提供redirect_uri,用以和平台进行异步交互,获取用户令牌及错误信息。
2.受权/鉴权中心
a.对用户的应户名、密码进行鉴权
b.对第三方应用的app_id,app_secret进行鉴权
c.展现受权界面,并对用户对第三方应用的受权操做进行响应
d.对用户受权码及用户token的真实性进行鉴权
3.token管理
a.建立token、刷新token
b.查询token详细数据
c.校验token时效性

OAuth2体系结构

case

开放平台集成OAuth2体系

1.平台门户:
门户应用入住界面,须要集成OAuth2应用建立接口,录入第三方回调地址,并回显app_id和app_secret参数
2.鉴权服务:
鉴权服务需集成OAuth2的authorize及token接口,用以提供用户受权及code/token鉴权功能
3.开放接口:
开放接口需集成OAuth2的resource server角色,对用户数据进行安全管理,对第三方应用发起的请求作出响应,并对token进行真实性校验
4.运营系统:
运营系统需提供对当前OAuth2应用的管理功能,用户受权列表管理,用户token管理等OAuth2协议相关管理功能。

SSO介绍

什么是SSO

百科:SSO英文全称Single Sign On,单点登陆。SSO是在多个应用系统中,用户只须要登陆一次就能够访问全部相互信任的应用系统。它包括能够将此次主要的登陆映射到其余应用中用于同一个用户的登陆的机制。它是目前比较流行的企业业务整合的解决方案之一。

简单来讲,SSO出现的目的在于解决同一产品体系中,多应用共享用户session的需求。SSO经过将用户登陆信息映射到浏览器cookie中,解决其它应用免登获取用户session的问题。

为何须要SSO

开放平台业务自己不须要SSO,可是若是平台的普通用户也能够在申请后成为一个应用开发者,那么就须要将平台加入到公司的总体帐号体系中去,另外,对于企业级场景来讲,通常都会有SSO系统,充当统一的帐号校验入口。

CAS协议中概念介绍

SSO单点登陆只是一个方案,而目前市面上最流行的单端登陆系统是由耶鲁大学开发的CAS系统,而由其实现的CAS协议,也成为目前SSO协议中的既定协议,下文中的单点登陆协议及结构,均为CAS中的体现结构
CAS协议中有如下几个概念:
1.CAS Client:须要集成单点登陆的应用,称为单点登陆客户端
2.CAS Server:单点登陆服务器,用户登陆鉴权、凭证下发及校验等操做
3.TGT:ticker granting ticket,用户凭证票据,用以标记用户凭证,用户在单点登陆系统中登陆一次后,再其有效期内,TGT即表明用户凭证,用户在其它client中无需再进行二次登陆操做,便可共享单点登陆系统中的已登陆用户信息
4.ST:service ticket,服务票据,服务能够理解为客户端应用的一个业务模块,体现为客户端回调url,CAS用以进行服务权限校验,即CAS能够对接入的客户端进行管控
5.TGC:ticket granting cookie,存储用户票据的cookie,即用户登陆凭证最终映射的cookies

CAS核心协议介绍

case
1.用户在浏览器中访问应用
2.应用发现须要索要用户信息,跳转至SSO服务器
3.SSO服务器向用户展现登陆界面,用户进行登陆操做,SSO服务器进行用户校验后,映射出TGC
4.SSO服务器向回调应用服务url,返回ST
5.应用去SSO服务器校验ST权限及合法性
6.SSO服务器校验成功后,返回用户信息

CAS基本流程介绍

如下为基本的CAS协议流程,图一为初次登陆时的流程,图二为已进行过一次登陆后的流程
case
case

代码及示例

spring提供了整套的开源包,用以搭建OAUTH2+SSO的体系:
1.spring-oauth2:用以实现OAuth2协议,提供了上述全部四个角色提供的功能
2.spring-cas:用以实现和cas的集成,将OAuth2的登陆、登出功能委托给CAS处理,并提供了统一的回调机制及凭证校验机制
3.CAS,耶鲁大学官方提供的SSO开源实现,本文的单点登陆协议即按照CAS进行的说明

本文还提供了基于GO语言实现的简单OAuth2+SSO功能,详见github:
https://github.com/janwenjohn/go-oauth2-sso

相关文章
相关标签/搜索