
# 一、业务场景
很多客户经常需要使用自己的认证中心登录EAS Cloud,但是经常不是很确定改哪里,改哪里影响最小,可维护性最高。这时候需要有一个契合EAS Cloud的最佳二开解决方案进行参考。基于此,根据以往客户二开出现过的各种问题进行整理总结出的一套当前最佳二开解决方案。
# 二、实践思路
1、最小化改动标准代码,便于补丁升级后维护的便利性。
2、由于标准的验证过滤器做了一些额外的处理,不能直接在web.xml去掉标准SSO过滤器而加入自己的过滤器。
基于以上两点,采用在标准过滤器中嵌入客户自定义过滤的方式进行处理,具体实践方案如下:

# 三、详细设计
## (1)集成第三认证登录设计
以下是这个实践方案的详细设计,请结合下一章节【代码样例】说明进行参考。

## (2)第三方账号映射设计
由于使用第三方认证中心登录,登录的账号在EAS端的账号经常是不一致的,针对此种情况一般需要做映射二开处理。
一般有以下3种方案,选择其中一种方案即可。
### 1、第三方认证中心端处理
如果第三认证中心可以二开,建议使用此方案。

### 2、EAS端二开映射处理
如果需要再EAS端二开,则使用此方案,此方案在拿到第三方用户信息后做转换处理即可。

### 3、维护EAS已存在AD域映射表
T_SSO_External2EasUsers
此种方案限制条件:不会使用AD域登录方式,否则会和AD域登录映射冲突。

此方案需要维护映射表T_SSO_External2EasUsers,新增映射参考语句:
```
INSERT INTO T_SSO_External2EasUsers (FID,feasusername,fexternalusername ) VALUES (newbosid('149FF98E'),'eas账号','第三认证中心账号' )
```
# 四、代码样例
**代码请参考附件**
## (1)实践框架代码说明
### 1、标准会话校验过滤器
过滤器类:com.kingdee.bos.sso.client.filter.authentication.KDPortalAuthenticationFilter
修改作用:嵌入调用自定义过滤器
参考代码:doFilter中嵌入调用客户自定义认证过滤器。**嵌入点遵循原则:一定要在判断是否存在登录会话之后**

### 2、标准票据校验过滤器
过滤器类:com.kingdee.bos.sso.client.filter.validation.KDPortalTicketValidationFilter
修改作用:因为这里是标准票据校验,由于这个都会转到自定义嵌入过滤器校验处理,所以这里需要做忽略处理。
参考代码:doFilter核心代码参考如下

### 3、自定义嵌入过滤器
过滤器类:com.kingdee.bos.sso.client.thridauth.ThridValidationNestedFilter
修改作用:这个是方案中最核心的类,也是新加的类,所有的集成第三认证及票据校验都在这里处理。
参考代码:doFilter核心代码参考如下

## (2)实践个性化代码说明
由于每个客户使用的认证中心及实际情况不完全一样,需要在实实践框架代码补充个性化代码,编写点主要包括以下:
1)票据信息抽取,这部分主要根据实际认证中心认证成功后重定向后的参数获取

2)本步骤是主要讲请求过来后的票据进行认证,而认证调用客户按照使用的认证中心进行实际编写即可。

3)请求的EAS的serviceUrl构建 ,主要做票据认证时需要去掉票据相关的参数内容,代码参考如下:

# 五、注意事项
1、由于使用第三方认证中心,如果认证中心和EAS Cloud 域名不一样,会涉及到跨域问题,导致登陆跳转报404问题。
**解决办法**
修改CSRF校验配置,配置文件所在路径:apusic\domains\serverX\config\web.xml,主要有以下两种修改方式
1)可直接关闭CSRF校验,将enableCSRFCheck设置成false。(简单方式)
2)不关闭CSRF校验,此时修改参数serverNameWhiteList设置白名单,将第三方认证中心的域名或IP加入到白名单。(建议方式)
基于安全考虑建议使用方式2修改。

# 六、补丁影响
(1)一般二开部署私包和标准包代码存在冲突(优先加载私包),如果私包不是基于当前环境补丁包代码二开的,则可能会存在问题。
(2)本实践方二开代码涉及的PORTAL领域,如果需要安装【门户管理】的补丁,则需要安装补丁前检查补丁代码是否存在改动,如果有改动,则需要基于本补丁的代码类来升级私包。
二开代码样例.rar