
1-广东省网上办事大厅统一身份认证平台对接规范V1.0.1.doc
17页省网上办事大厅统一身份认证平台业务系统接入规V1.0.1省网上办事大厅二O一四年十月目录一、 前言3二、 目标4三、 对接方案43.1. 单点登录43.1.1. 系统结构53.1.2. 集成模式53.1.3. 任务分工63.2. OAuth2认证63.2.1. 系统结构63.2.2. 集成模式73.2.3. 任务分工8四、 应用程序改造说明84.1. 单点登录集成84.2. OAuth2认证集成94.3. 用户库改造说明10五、 改造环节与示例代码说明115.1. 单点登录改造说明115.1.1. 详细流程115.1.2. 组件调用说明135.1.3. 示例代码说明135.2. OAuth2认证改造说明145.2.1. 详细流程145.2.2. 登录页面改造说明165.2.3. 组件调用说明16六、 接口与参数说明166.1. 单点登录接口说明166.1.1. 设置认证服务URL166.1.2. 获取用户信息176.2. OAuth2认证接口说明196.2.1. 获取授权码196.2.2. 获取token206.2.3. 获取用户信息21一、 前言按照《关于做好全省网上办事大厅建设相关筹备工作的通知》〔粤办函〔2012〕369号〕等相关文件与省政府推进全省网上办事大厅建设的工作部署的总体要求,构建全省统一身份认证平台,主要目的是服务于全省网上办事业务信息化开展,为省直部门业务系统、各地市分厅等各类业务系统提供“用户名/密码〞普通账户和CA 账户认证服务,并提供跨域单点登录服务,逐步实现“一个账号,全省通用〞,建成全省标准统一、安全可靠、互联互通、应用方便的统一身份认证应用支撑体系,全面提升省网办大厅的用户体验与安全保障能力。
本规文件按照省网上办事大厅工作的总体要求,指导各类业务系统建设单位开展统一认证对接工作,说明相关对接流程和步骤,提供相应服务接口与应用实例,完成各业务系统与省统一身份认证平台对接工作二、 目标各类业务系统接入省统一身份认证平台,主要目标如下:〔1〕统一认证:各类业务系统通过省统一身份认证平台获取符合OAuth2认证协议的用户账户认证服务,支持省统一身份认证平台用户能够登录进入各类业务系统,实现“一个账号,全省通用〞〔2〕单点登录:各类业务系统按照省统一身份认证平台接入规进展sso接口集成改造,接入到省统一身份认证平台中,通过省统一身份认证平台实现各类业务系统的单点登录服务,实现“一点登录,多点漫游〞〔3〕CA认证:省统一身份认证平台将接入省数字证书交叉认证平台、各市级数字证书交叉认证系统等数字证书交叉认证平台,并为业务系统提供CA账户认证服务,满足全省CA用户的统一身份认证服务三、 对接方案根据省网上办事大厅统一认证建设目标,根据各类业务系统不同的对接工作容,其相应的接入集成方式分别如下:3.1. 单点登录防止重复建设,提高使用效率,遵循“统一认证〞架构,各类业务系统接入省统一身份认证平台后,通过SSO服务,使用户进入省网上办事大厅、各省直部门业务系统、地市分厅系统等业务系统办理业务时只需要一次登录认证。
在用户进展单点登录之前的身份认证方式可以有多种选择,省统一身份认证平台提供多种第三方信任源进展认证,包括各省直业务部门账户系统、市级身份认证平台、以与其它第三方信任源3.1.1. 系统结构系统建设逻辑结构如下列图所示:用户通过省统一身份认证平台进展登录认证,认证通过后单点登录访问业务系统,提供统一安全登录服务,从而防止用户屡次重复登录各个不同系统,实现电子政务便民的工作目标3.1.2. 集成模式 省统一身份认证平台提供统一身份管理和认证功能,并建立与各业务系统用户关联关系,防止最终用户在多个系统中重复登录,从而有效提高用户操作的方便性,达到“统一认证、统一登录〞的目标在省统一身份认证平台统一用户访问入口的情况下,业务系统单点登录集成改造工作主要包括:1、在业务系统中部署单点登录组件,配置相应数字证书;2、在业务系统中集成单点登录接口,实现对通过省统一身份认证平台统一认证后所签发的单点登录用户信息的认证与解析;3、在业务系统数据库中增加关联字段,用于建立与省统一身份认证平台用户的关联关系;3.1.3. 任务分工l 省统一身份认证平台系统集成商:1. 提供单点登录组件与其相应的集成操作文档;2. 协助业务系统开发商调用省统一身份认证平台统一认证服务,配合联调测试,实现安全认证登录;l 业务系统开发商:1. 业务系统开发商需要调用省统一身份认证平台的单点登录组件,修改数据库,实现单点登录服务。
3.2. OAuth2认证3.2.1. 系统结构 用户直接访问业务系统,之后选择以省统一身份认证平台作为第三方信任源登录,认证后返回至该系统,系统结构图如下:如上图所示,用户在业务系统登录页面,选择省统一身份认证平台作为第三方信任源登录,业务系统登录页面、后台程序需要进展改造,实现承受省统一身份认证平台作为第三方信任源的OAuth2认证,实现用户认证信息共享3.2.2. 集成模式采用业务系统登录页面选择省统一身份认证平台或第三方信任源认证方式来进展用户认证,其实施步骤如下:1. 在业务系统登录页面参加省统一身份认证平台认证,调用省统一身份认证平台OAuth2认证接口,实现用户身份认证;2. 省统一身份认证平台提供OAuth2认证接口,供业务系统调用,实现用户身份认证信息的安全传输;3. 省统一身份认证平台和其它第三方信任源之间实现OAuth2认证,调用第三方信任源的OAuth2认证接口,实现第三方信任源的用户共享3.2.3. 任务分工l 省统一身份认证平台系统集成商:1. 提供OAuth2认证接口与其相应的集成操作文档;2. 协助业务系统开发商调用OAuth2认证接口认证服务,实现OAuth2认证;3. 调用其它第三方信任源Oauth2认证接口,实现省统一身份认证平台与其它第三方信任源间的OAuth2认证。
l 业务系统开发商:1. 需要调用统一身份认证平台OAuth2认证接口认证服务,实现OAuth2认证;2. 增加用户数据库字段,标明认证来源、认证标识号等参数3.3. CA认证由省数字证书交叉认证平台、市级交叉认证平台提供多家CA数字证书认证服务,并作为第三方信任源接入到省统一身份认证平台,由省统一身份认证平台统一为各业务系统提供多CA认证服务,其具体实现方案可参考上一章节的OAuth2.0认证四、 应用程序改造说明4.1. 单点登录集成用户在省统一身份认证平台完成登录认证之后,可以直接进入业务系统办理相应的业务事项,实现“一点登录,多点漫游〞的目标具体流程如下列图所示:1、 确定业务系统单点登录入口页面;2、 业务系统应用服务器上部署安全组件和票据解析组件;3、 在系统中增加票据接收页面;4、 修改票据接收页面,在票据解析成功后跳转到系统的主页;5、 解析成功后取用户唯一标识UID字段,同存储在数据库中的用户身份信息进展比对;如首次登录,可建立关联关系4.2. OAuth2认证集成用户通过省直部门、地市分厅系统页面,选择以省统一身份认证平台进展认证,具体流程如下列图:1、 在业务系统登录页面增加省统一身份认证平台入口;2、 在应用服务器上部署OAuth2认证组件;3、 在业务系统中调用用户信息获取接口;4、 承受信息成功后,跳转到业务系统页面;6、 从用户信息中取用户唯一标识UID字段,同存储在数据库中的用户身份信息进展比对;如没有,那么创建新用户,如已经存在,那么直接登录进入系统。
4.3. 用户库改造说明业务系统实现对接功能,除调用单点登录与OAuth2认证组件实现认证改造外,还需要实现省统一身份认证平台用户信息与业务系统现有用户信息之间的关联,相应用户数据库的表结构需要相应调整,如下列图:为建立关联关系,需要增加用户数据库的字段,主要包括:1、用户认证来源:该项容用于描述用户信息的来源,通过该项容可以判断用户信息是从哪个数据源获取;长度为100个字节;2、用户认证方式;该项容用于描述用户当前凭证类型为证书还是用户名口令,从而在用户登录时,采用正确的认证方式;长度为40个字节;3、是否实名:该项容用于描述用户是否通过了实名认证,通过该项容可以给用户展现不同的业务数据容长度为20个字节;4、用户信息唯一标识UID:该项容用于描述用户信息的唯一标识号,每一个标识号代表一个独立的用户长度为32个字节五、 改造环节与示例代码说明5.1. 单点登录改造说明5.1.1. 详细流程流程描述如下:1、 用户访问省统一身份认证平台,并输入身份认证凭证;2、 省统一身份认证平台对用户身份进展登录凭证验证;3、 由省统一身份认证平台对用户进展身份认证后,返回用户token;4、 用户选择需要业务系统;5、 省统一身份认证平台将用户token、随机数与签名形成单点登录票据,并发送给业务系统;6、 业务系统接收省统一身份认证平台单点登录票据,并对票据进展解析,获取随机数和Token,并对随机数进展签名处理;7、 业务系统将相应的随机数签名值和Token提交给省统一身份认证平台;8、 省统一身份认证平台验证用户token与随机数,获取用户UID;9、 省统一身份认证平台将用户信息〔含UID等〕返回给接入业务系统;10、 根据用户UID,业务系统判断用户是否有权限登录,验证通过后,用户成功登录进入业务系统。
5.1.2. 组件调用说明需要在业务系统中引入BJCA-UAMS-SDK-1.0.jar,根据相应的API接口说明,调用jar包相应方法实现用户信息的获取5.1.3. 示例代码说明业务系统验证token后,用token得到userIdCode,用于用户权限判断,代码示意如下: clientResponse = clientResource.path("identity").path("attributes").queryParam("subjectid", URLEncoder.encode(tokenId, "utf-8")).queryParam("attributenames", "useridcode").header("Content-Type", "application/json;charset=UTF-8").get(ClientResponse.class); if (clientResponse.getStatus() != 200) { //判断返回结果,200为成功 request.setAttribute("error", "获取userIdCode失败!"); request.getRequestDispatcher("../success.jsp").forward(request, response); return; } String resultTemp = clientResponse.getEntity(String.class); String[] result = resultTemp.split("\r\n"); HashMap












