统⼀门户的⼏种建设⽅案(备忘录)
1.知识涉及点
微服务架构相关概念:服务注册、服务发现、API ⽹关
⾝份认证和⽤户授权:SSO、CAS、OAuth2、JWT
2.⽬前产品现状及背景
2.1我们产品明确⾛微服务⽅向且⾛向SAAS平台
2.2 现有产品耦合度⾼,新来开发者⽆法尽快进⼊产品中开发,代码熟悉过程较长
2.3 ⼏套产品”各⾃为政”,产品现状⼀体化较难
3.需求分析
3.1 解决产品现状中⾛向SAAS平台
产品架构微服务化,功能组件化,模块化,
3.2 统⼀⾝份管理
统⼀⾝份管理(UIM)是整个平台帐号和权限管控的基础,由此构建的系统称为UIMS(Unified Identity Management System),平台下所有系统的账户管理、⾝份认证、⽤户授权、权限控制等⾏为都经由 UIMS 处理,提供帐号密码管理、基本资料管理、⾓⾊权限管理等功能。UIMS 提供统⼀的 API 与各⼦系统连接。
可以看到,众多系统和众多服务都将依赖于 UIMS 。
3.3产品⼀体化
账户管理:账号密码管理, 基本资料管理, ⾓⾊权限管理
权限管理:权限控制,⽤户授权,产品授权,⾝份认证等
3.4单点登录(SSO)
平台涉及众多⼦系统,为简化各⼦系统的⽤户管理,提升⽤户体验,因此实现 SSO 是统⼀⾝份认证的重要⽬标:⼀次登录,全部访问。对于内部应⽤来说,SSO 是必须的选项,例如企业 OA、HR、CRM 等内部系统;对于外部应⽤来说,SSO 是可选项,具体哪个应⽤应当加⼊ SSO 系统,由该业务
系统决定,例如外部商城、物业系统等对外服务系统。⽆论何种应⽤是否采⽤ SSO,UIMS 在技术上应当具备SSO 的能⼒。
3.5授权登录(第三⽅平台接⼊功能)
随着平台业务的逐渐增长,依托于平台的,和平台依托的⼚商和客户等资源将极⼤的丰富平台,因此必须构筑开放的⽣态系统,以⽀撑业务的进⼀步发展。必须开放平台级的授权登录功能,以允许第三⽅应⽤接⼊。通过三⽅授权登录,将平台的服务各能⼒开发给第三⽅,并将第三⽅的服务和能⼒接⼊平台
3.6 服务间鉴权
1. 传统的 Cookie + Session 解决⽅案,有状态会话模式;
2. 基于令牌/票据的解决⽅案,⽆状态交互模式。
具体有:分布式 Session,OAuth2.0,JWT,CAS
上述⽅案各有利弊:
1. 分布式 Session 是⽼牌的成熟解决⽅案,但因其状态化通信的特性与微服务提倡的API导向⽆状态通信相互违背,且共享式存储存在
安全隐患,因此微服务⼀般不太采⽤。
2. OAuth2.0 是业内成熟的授权登录解决⽅案,然⽽ OA2.0 提供了4种授权模式,能够适应多种场景,作为基于令牌的安全系统,可以⼴泛⽤于需要统⼀⾝份认证和授权的场景。
3. JWT(JSON Web Token)是⼀种简洁的⾃包含的 JSON 声明规范,因其分散存储的特点⽽归属于客户端授权模式,⼴泛⽤于短期授权和单点登录。由于 JWT 信息是经过签名的,可以确保发送⽅的真实性,确保信息未经篡改和伪造。但由于其⾃包含的客户端验签特性,令牌⼀经签发,即⽆法撤销,因此单纯采⽤ JWT 作为统⼀⾝份认证和授权⽅案⽆法满⾜帐号统⼀登出和销毁、帐号封禁和解除这⼏种类型的需求。
4.2 技术选型
在做技术选型时,应从以下⼏点考虑:
1. 满⾜ SSO 的技术需求;
2. 满⾜简便性和安全性的需求;
满⾜开放性和扩展性的需求。
4.3 最佳⽅案 OAuth2.0
4.3.1 OAuth2.0 的四种授权模式
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
其中密码模式常⽤于外部服务的鉴权,客户端模式常⽤于内部服务鉴权和开放平台应⽤的授权,授权码模式常⽤于社会化登录和 SSO,因此 OAuth2.0 可作为完整的统⼀⾝份认证和授权⽅案。
4.3.2 UIMS 提供的功能:
其中,注册接⼝、SignUp-Page 和 Login-Page 页⾯是⾮受控接⼝/页⾯,意味着⽆须鉴权即可访问。
对于已发出的令牌,客户端在下⼀次请求之前,服务端的令牌系统对此没有控制能⼒,例如 SSOff 将⽆法很好地实现。
4.4.2. 客户端鉴权和⽤户鉴权
与 OAuth2.0 ⽅案⼀致,客户端同样需要使⽤ ClientId 和 ClientSecret 鉴权。
4.4.3. 公钥和密钥
JWT 规定采⽤⾮对称加密算法对 Header 和 Payload 进⾏签名。
1)⾮对称算法
⾮对称算法的重要特点是,使⽤密钥加密时,必须⽤公钥解密;⽤公钥加密时,必须⽤密钥解密。利⽤此特性,通常在服务端采⽤密钥加密信息,然后客户端采⽤公钥解密信息。由于密钥存储在服务端,因此安全性⾼;公钥本⾝可以公开,因此可以在客户端存储。
2)公钥解密
JWT 经由服务端⽤密钥加密后,发往客户端,客户端使⽤公钥进⾏解密,便得到了 JWT 的明⽂。JW
T 包含了丰富的信息(通常是⽤户基本信息和权限标识符),只要解密成功,客户端完全可以信任此 JWT,因此不必再依赖于服务端重复鉴权。
4.4.4. 跨域问题
与 OAuth2.0 的跨域解决⽅案⼀致
1. ⽬前要做哪些
5.1功能
5.1.1 系统设置
系统标识管理
服务账户管理
5.1.2 账户实体管理
组织实体管理
组织架构管理
个体账户管理
5.1.3 账户权限管理
⽤户组管理
⾓⾊管理
资源权限管理
权限策略组管理
web端登录5.1.4 认证审核管理
个⼈认证管理
组织认证管理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论