NCC2005 单点登录,常见问题和解决方案
NCC2005 单点登录,常见问题和解决方案
设计思路
要单点登录到NCC,首先需要在服务器端向NCC服务器注册将要登录的用户的信息以及其他一些需要的信息,这些信息将被保存在NCC服务器上,通过ssoKey进行关联映射。
在完成注册信息后,客户端在登录时需要提供ssoKey,通过该值获得登录用户的相关信息,进入NCC系统。
实现过程
1、在NCC的系统注册表sm_oauth_security注册第三方系统
- CLIENT_ID 第三方系统编码,必需项
- CLIENT_NAME 第三方系统名称,非必需
- CLIENT_SECURITY 第三方系统和NCC共同维护的秘钥对
- PK_OAUTH_SECURITY 主键(可通过V0插入,也可以随便填写,不重复即可)
- CLIENT_URL 第三方系统的url(供NCC集成访问第三方系统使用,本环节不需要)
- CLIENT_AUTHCLASS 登录第三方系统授权类 (供NCC集成访问第三方系统使用,本环节不需要)
- PK_GROUP非本环节使用,设置为空
2、在前台页面提供单点登录ncc的地址,完整url为http://ip:port/uap/rbac/thirdpartylogin/main/index.html?accesstoken=xxx &redirect_uri=http://ip:port/uap/rbac/thirdpartylogin/main/index.html
- accesstoken代表登录token,具体内容会在下一步获取
- redirect_uri表示登录成功后重定向的地址,如工作桌面地址http://ip:port/NCCloudloud/
3、单点登录前,客户端先会向第三方服务器获取accesstoken,第三方服务器则通过事先保存秘钥对,访问http://ip:port/service/genThirdPartyAccessToken进行验签和服务器ip白名单验证,获取登录token,ip白名单配置文件home\ierp\sf\nccssoConfig.xml
- dsname 数据源名称,必需项
- usercode NCC用户编码,必需项
- client_id第三方系统id,即第一步在sm_oauth_security注册的系统编码,必需项
- security第三方由共同维护的秘钥对根据给定的算法自己生成的秘钥值,必需项
- langcode 多语语种,非必需项,为空默认中文语种
- busicentercode 账套编码,非必需项,为空登录时会循环在数据源中查找用户
4、单点登录时,NCC服务器会校验accesstoken,token正确则重定向到redirect_uri
注意:
http://ip:port/uap/...是开发环境下地址,如在正式或者测试环境,地址应为http://ip:port/nccloud/resources/uap/...
常见问题
1、验签时接口报401错误
- 检查白名单是否配置了IP,这里的IP是第三方服务器的IP;如果配置了IP还是不行,可以直接解除限制用
*.*.*.*
代替即可; - 检查秘钥是否填写正确,秘钥尽量用简单的一些,防止接口中编码时发生错误;如果还是不行,不填秘钥也是可以的,在注册表里sm_oauth_security将秘钥设置为空;
但是这种方式不够安全,慎用
2、拿到了accesstoken,但是登录时提示未检测到第三方系统
- 检查IP白名单是否配置,
- 一个accesstoken只能使用一次,而且还有时间限制
3、登录时显示的是空白页,或页面缺失
- NCC2005版本缺少一个补丁包,需要打补丁后方能正常访问
4、秘钥匹配不正确
- sm_oauth_security表里的CLIENT_SECURITY 值,与genThirdPartyAccessToken接口里的参数security不是同一个值;security是通过CLIENT_SECURITY 通过给定的算法加密出来的,具体的加密方法可以跟一下代码看一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构