DiscuzX2与IDS轻量级集成手册

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DiscuzX2与IDS轻量级集成手册
一、单点登录
1、用户从IDS端登录
1)用户输入用户名密码,从IDS登录;
2)discuz端首次打开的时候通过ids_client.php方法ids_user_token() 重定向去IDS获取全局会话ID
3)discuz端依据全局会话ID,向IDS获取已登录用户完整信息
请求地址:http://IDS的地址/service?idsServiceType=httpssoservice&serviceName=findUserBySSOID 具体参见ids_client.php方法ids_check_login($ssoId)
4) discuz取到用户信息以后,执行本地登录。

具体参见ids_login.php
a、用户在IDS和论坛都存在,并且密码相等(密码取自IDS字段:plainUserPwd),
论坛直接登陆。

b、用户在IDS存在但是在论坛不存在,论坛走匿名用户显示当前页面。

c、用户在IDS和论坛都存在,但密码不相等(密码取自IDS字段:plainUserPwd),
论坛走匿名用户显示当前页面(用户名重复,不是同一用户)。

2、用户从discuz端登录
1) 首次登录discuz,判断本地是否登录。

如果没有本地登录,判断cookie是否存在IDS全局会话ID。

2)如果本地cookie中没有全局会话ID,则向IDS的LoginServlet地址,发起重定向请求,获取全局会话ID。

3) discuz获取到全局会话ID后,根据全局会话ID向IDS请求判断是否存在登录用户信息
请求地址:http://IDS的地址/service?idsServiceType=httpssoservice&serviceName=findUserBySSOID 具体参见ids_client.php方法ids_check_login($ssoId)
4)如果discuz取到已登录的用户信息,则执行本地登录;
5)如果discuz没有取到已登录用户信息,则跳转到登录页面,让用户登录;并且,登录时,discuz需要调用IDS的登录服务请求接口,请求IDS做全局登录。

请求地址:http://IDS的地址/service?idsServiceType=httpssoservice&serviceName=loginBySSOID 具体参见ids_client.php方法ids_user_login($username, $password, $sourceName, $clientIp)
a、用户在IDS和论坛都存在,并且密码相等(密码取自IDS字段:plainUserPwd),
IDS先登陆,用返回的用户名和密码做论坛本地登陆。

b、用户在IDS存在但是在论坛不存在(IDS【message】返回值为‘不存在该用户!’),直
接走论坛本地登陆。

c、用户在IDS和论坛都存在,但密码不相等(密码取自IDS字段:plainUserPwd),
IDS提示用户名密码错误后走论坛本地登陆(此时记录一条日志)。

以上的a、b、c总结到一起就是:当提交登陆的用户名和密码通过IDS接口后返回用户数据那么就替换用户提交的登陆用户名和密码为相应的返回值做本地登陆,一旦返回的
是错误就直接走本地登陆。

注释:uc用户表pre_ucenter_members中的用户密码为IDS同步推送用户数据中的plainUserPwd字段的值进行md5($password.$user['salt']),discuz论坛用户表pre_common_member中的密码为IDS同步推送用户数据中的plainUserPwd字段的值。

二、用户同步
1、在IDS管理台配置discuz 同步方式
在IDS端注册的discuz应用,用户同步方式配置为HTTP同步,并且需要配置在discuz添加用户,修改用户,删除用户三个URL地址;
2、从IDS添加用户,同步推送到discuz
1)IDS注册一条用户信息以后,根据是否有discuz访问登录的权限判断,会向discuz应用配置的添加用户URL推送用户数据;
2)discuz添加用户的URL,按照IDS用户同步设置页面提示的属性名,如userName,email, plainUserPwd等格式接收用户数据,并保存到本地数据库;
3、从IDS修改用户密码等信息,同步推送到discuz
1)IDS修改用户密码以后,根据是否有discuz访问登录的权限判断,会向discuz
应用配置的修改用户URL推送用户数据;
2)discuz修改用户的URL,按照IDS同步设置页面提示的属性名,如userName,email, plainUserPwd等格式接收用户数据,并更新到本地数据库;
4、从discuz前台注册或者后台添加用户,都不同步推送到ids
三、部署说明
版本约束:要求IDS版本高于如下版本:TRSIDS35_SP_Build3500.86614_20130403。

如果版本太低,请先升级到质保发布的 3.5 SP版本:TRSIDS35_SP_Build3500.86614_20130403
1、集成介质
集成介质分两部分:
1)模板部分:
包含template目录及其下所有文件,作用是取消掉discuz论坛自动登录功能,现阶段discuz的自动登录功能无法实现单点登录。

这一部分不更新也可,需跟客户说明,discuz的自动登录不能单点登录,只能对discuz实现自动登录,访问ids时需要手动登录。

2)单点登录与用户同步:
本部分介质目录结构如下图所示:
本介质的用户同步是单向的,只能从ids向discuz论坛同步。

即ids新增用户、修改密码都可以同步到discuz,但discuz论坛新增用户、修改密码都不同步到ids。

如果是从IDS同步过来的用户,单点登录没有问题。

如果是从论坛注册添加的用户,只能登录论坛,无法单点登录。

2、部署步骤
1)Discus论坛更新
●备份介质
对原介质api,source,uc_client,cookie.php做好备份。

如果项目中还没有部署discuz,请先下载安装discuzX2标准版本介质。

●将集成介质所有更新文件拷贝到discuz论坛相应目录下覆盖更新即可。

●修改api\ids\ids_client\ids_config.php配置文件
// IDS相关配置
define('IDS_URL', 'http://192.168.10.120:8081/ids'); // IDS的根地址,“http://192.168.10.120:8081/id”改为实际环境的ids地址
define('IDS_SERVICE_URL', 'http://192.168.10.120:8081/ids/service'); // IDS的服务接口地址,“http://192.168.10.120:8081/ids/service”改为实际环境的ids服务
接口地址
define('IDS_COAPP_NAME', 'discuz'); // 在IDS中注册的应用名,“discuz“改为实际环境的ids中注册的应用名
define('IDS_COAPP_ID', 1); // 当前应用的ID,“1”改为实际环境的ids注册的应用的ID
// 应用相关配置
define('APP_URL_ROOT', 'http://192.168.10.119/'); // 应用根地址,“http://192.168.10.119/”改为实际环境的dicuz地址。

define('APP_SURL', 'http://192.168.10.119/api/ids/ids_login.php'); //ids登录时请求discuz的地址,“http://192.168.10.119/api/ids/ids_login.php”改为实际环境中的disucz论坛介质中相应的地址。

2)Ids升级配置
●版本约束:
要求IDS版本高于如下版本:TRSIDS35_SP_Build3500.86614_20130403。

如果版本太低,请先升级到质保正式发布的 3.5 SP版本:TRSIDS35_SP_Build3500.86614_20130403。

●新建discuz应用
管理员登录IDS管理台,访问应用菜单,点击“添加应用”,新建disucz应用时注意如下配置:
应用根地址:http://192.168.10.115这个为实际环境的discuz论坛地址
ids通知应用的URL:http://192.168.10.115/api/ids/ids_client/ids_client.php这个为实际环境的discuz论坛相应的地址
主页:http://192.168.10.115/forum.php这个为实际环境的discuz论坛地址
设置应用的人员同步方式
管理员登录IDS管理台,访问应用菜单,点击设置协作应用的用户同步方式图标,如下:
同步操作:添加用户删除用户更新用户/修改密码
开通用户访问权限时:通知应用添加用户
取消用户访问权限时:通知应用删除用户
添加的URL:http://192.168.10.119:82/dz/cookie.php?type=insert
删除的URL:http://192.168.10.119:82/dz/cookie.php?type=del
更新的URL:http://192.168.10.119:82/dz/cookie.php?type=update
开通用户访问权限时通知应用的URL:http://192.168.10.119:82/dz/cookie.php?type=insert
取消用户访问权限时通知应用的URL:http://192.168.10.119:82/dz/cookie.php?type=del
●设置匿名应用
目前discuzX2和IDS的集成,需要将discuzX2配置为匿名应用。

目前需要执行SQL完成,修改完之后ids需要重启。

update idscoapp set allowguest=1 where coappid=discuz应用的ID
应用ID查看方式为,管理员点击discuz应用名,查看detail详细信息
●设置discuz应用属性读写权限
对于IDSv4.0及以上版本,IDS默认会控制协作应用读写用户属性的权限,即IDS 默认同步给应用的属性,以及协作应用调API向IDS写入的属性,是需要在IDS后台配置的。

如果没有配置,有些属性协作应用是取不到,也无法写入的。

具体请参见《TRS IDS V4.0 管理员使用手册》6.2.3 应用的用户属性读写控制有关章节内容。

登录IDS管理台,当前视图位置:【导航栏→应用→“操作”列→用户属性读写控制图
标】
点击用户属性读写控制图标链接,打开修改用户属性控制信息页面,如图:
注意勾选上discuz需要读写的属性,其中必须勾选上reversiblePasswd(可逆密文)、encryptPasswd(密码密文)、以及email(邮箱)属性的读写权限。

其它属性根据需要进行设置。

●重启IDS应用
四、常见问题
1、目前discuzX2和IDS的集成方式与以前的集成有何不同?
答:目前的集成方案与以前discuz和IDS的集成方案原理不太一样,
不是基于Filter拦截机制,基于discuz每次访问主动向IDS重定向,并且调用IDS提供的http接口完成认证登录。

因此,不涉及拦截过程。

另外,使用匿名访问流程,需要修改为匿名应用,不能使用IDS的登录页面登录。

2、IDS推送过来的会员信息需要保持和IDS的会员ID一样吗?
答:不需要一样
3、如何检查单点登录失败的日志:
答:
一方面是论坛记录的通知IDS登录的日志,参见文档《DiscuzX2与IDS轻量级集成方案》
请求IDS的登陆接口记录所有相应信息:登陆成功失败的日志,记录直接写在论坛主目录下/data/log/年月_idsuserlogin.php 文件里
另一方面是IDS的管理台审计业务日志和IDS的log4j日志,记录用户登录日志。

登录日志需要打开系统->用户管理->记录登录成功的访问类日志的开关。

4、ids_config.php配置文件中IDS_TOKEN、APP_KEY、APP_COSESSIONID、APP_NOTIFYLOGIN_TYPE]几个选项具体含意?
答:ids_config.php配置文件中,后面的几个配置项默认不用调整
IDS_TOKEN // IDS中登录的凭证,默认为trsidssdssotoken,不需要调整
APP_KEY // 应用的密钥,目前没有校验,使用默认配置即可
APP_COSESSIONID // 协作应用的本地会话,目前主要基于ssoSessionId控制,没有校验,使用默认配置即可
APP_NOTIFYLOGIN_TYPE // 通知其他应用同步的方式,sync(同步)或者async(异步),跨域下目前需要配置为sync。

相关文档
最新文档