一、背景
当企业应用系统逐渐增多后,每个系统单独管理各自的用户数据容易形成信息孤岛,分散的用户管理模式阻碍了企业应用向平台化演进。
企业的互联网业务发展到一定规模,构建统一的标准化账户管理体系将是必不可少的,因为它是企业互联网云平台的重要基础设施,能够为平台带来统一的帐号管理、身份认证、用户授权等基础能力,为企业带来诸如跨系统单点登录、第三方授权登录等基础能力,为构建开放平台和业务生态提供必要条件。
二、名词定义
三、研发背景
单体应用体系下,应用是一个整体,一般针对所有的请求都会进行权限校验。请求一般会通过一个权限的拦截器进行权限的校验,在登录时将用户信息缓存到 session 中,后续访问则从缓存中获取用户信息。
随着 Restful API、微服务的兴起,基于 Token 的认证现在已经越来越普遍。Token 和 Session ID 不同,并非只是一个 key。Token 一般会包含用户的相关信息,通过验证 Token 就可以完成身份校验。
基于 Token 认证的优势如下:
基于 Token 认证的一个典型流程如下:
(1)获取凭证, 第三方应用客户端使用客户端编码/安全码、资源所有者用户名/密码等证件信息从授权服务器上获取Access Token资源访问凭证。
(2)登录授权,客户端携带Access Token凭证访问服务器资源,资源服务器验证Token、第三方应用凭证信息、资源所有者User合法性,通过Token读取资源所有者身份信息(user) 加载资源所有者的权限项执行登录。
(3)访问鉴权,第三方应用客户端访问服务端资源,系统验证访问者Access Token合法性、权限信息,验证凭证(Access Token)正确,此时资源服务器就会返回资源信息。
(4)凭证续约,Access token访问凭证过期需要进行凭证续约,刷新Token凭证有效期。
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息。
主要的四种授权方式:
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
第三方应用客户端使用客户端编码/安全码、资源所有者用户名/密码等证件信息从授权服务器上获取Access Token资源访问凭证。
系统授权颁发给客户应用Access Token:
客户端携带Access Token凭证访问服务器资源,资源服务器验证Token、第三方应用、资源所有者User合法性,通过Token读取资源所有者身份信息(user) 加载资源所有者的权限执行登录。
系统验证访问者Access Token合法性、权限信息,验证凭证(Access Token)正确,此时资源服务器就会返回资源信息。
Access token访问凭证过期需要进行凭证续约,刷新Token凭证有效期。
五、接口设计
获取授权凭证,校验客户端身份信息、校验资源所有者身份信息,下发Token凭证。
客户端编码/安全码需要第三方应用到系统注册审核通过后生成。
获取续约授权凭证,校验客户端身份信息、校验RefreshToken凭证,下发Token凭证。
出处:ttps://juejin.cn/post/6906149001520037902