您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页NCC2005单点登录

NCC2005单点登录

来源:易妖游戏网

第三方系统单点登陆NC Cloud

1 第三方单点登录NC Cloud概览

第三方单点登录的流程:

详细流程图见下图:

    

 

2 第三方系统单点登录NC Cloud详细流程

2.1 在NC Cloud的系统注册表sm_oauth_security注册第三方系统

表中各字段含义如下:

  1. CLIENT_ID :第三方系统编码,必需项
  2. CLIENT_NAME: 第三方系统名称,非必需
  3. CLIENT_SECURITY: 第三方系统和NC Cloud共同维护的秘钥对
  4. PK_OAUTH_SECURITY: 主键,
  5. CLIENT_URL: 第三方系统的url (供NC Cloud集成访问第三方系统使用,本环节不需要)
  6. CLIENT_AUTHCLASS: 登录第三方系统授权类 (供NC Cloud集成访问第三方系统使用,本环节不需要)
  7. PK_GROUP:非本环节使用,设置为空

2.2 获取登录token

通过秘钥对获取登录token,第三方服务访问 同时访问参数为:

  1. ype 获取方式,此方式为固定为 type_security且必需项
  2. dsname 数据源名称,必需项
  3. usercode NC Cloud用户编码,必需项
  4. langcode 多语语种,非必需项,为空默认中文语种
  5. busicentercode 账套编码,非必需项,为空登录时会循环在数据源中查找用户
  6. ts ,第三方系统加签的时间,用来生成校验秘钥对,必需项
  7. client_id第三方系统id,即第一步在sm_oauth_security注册的系统编码,必需项
  8. security第三方由共同维护的秘钥对根据给定的算法自己生成的秘钥值,必需项。 security是通过SHA256加签,其中是根据usercode,ts,client_security和当前系统时间动态拼接的字符串生成

   注:8中的client_security为第三方密钥,当第三方不需要该密钥时,与1.1.1第三方系统注册中CLIENT_SECURITY参数保持一致。

代码如下:

 String CLIENTID = "NCCceshi";
      
 String CLIENTSECURITY = "123qwe";
  
 //系统编码
 String appCode = "CA_SYS";
         
 //当前待办需要打开的环境Url(即用友NC服务器)http://ip:port/
 String signUrl = http://127.0.0.1:8009/;
         
 //当前系统使用的账套
 String accCode = "NCC";
         
 //当前系统帐套编码关联的数据源
 String ds = "desgin";
 
 //用户编码
 String userCode = "test"
 
 //获取用户单点凭证
 String nccToken = HttpRequestUtil.getNCCToken(signUrl, ds, userCode, CLIENTID, CLIENTSECURITY, accCode);
 
 String redirectUrl = signUrl + "/nccloud/resources/uap/rbac/thirdpartylogin/main/index.html?accesstoken=" + nccToken + "&redirect_uri=" + signUrl + "/nccloud/resources/workbench/public/common/main/index.html#/";
 
 // 跳转到主页桌面
 resp.sendRedirect(redirectUrl);

token获取

 public class HttpRequestUtil {
     
     public static String getNCCToken(String url, String dsname, String usercode, String nccClient_id, String nccClient_secret, String accCode) throws Exception {
         OutputStream os = null;
         DataOutputStream dos = null;
         InputStream is = null;
         
         String returnFlag = "";
         
         try {
             URL preUrl = new URL(url + "/service/genThirdPartyAccessToken");
             
             URLConnection uc = preUrl.openConnection();
            
             uc.setDoOutput(true);
             
             uc.setUseCaches(false);
             
             uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
             
             uc.setRequestProperty("Content-Length", "10000" );
             
             uc.setRequestProperty("userid", usercode);
             
             HttpURLConnection hc = (HttpURLConnection) uc;
             
             hc.setRequestMethod("POST");
             
             StringBuffer sb = new StringBuffer();
             
             String security = genKey(usercode,usercode + nccClient_secret + (System.currentTimeMillis() + "").substring(0, 6));
             
             sb.append("type=type_security&dsname="+dsname+"&usercode="+usercode+"&client_id="+nccClient_id+"&security="+security+"&busicentercode="+accCode);
             
             os = hc.getOutputStream();
             
             dos = new DataOutputStream(os);
             
             dos.writeBytes(sb.toString());
             
             dos.flush();
 
             is = hc.getInputStream();
             
             int ch;
             
             while ((ch = is.read()) != -1) {
                 returnFlag += String.valueOf((char) ch);
             }
             
             if(returnFlag == null || returnFlag.trim().length() == 0){
                 throw new BusinessException("获取NCC Token失败,请检查");
             }
             
         } catch (Exception e) {
             e.printStackTrace();
             throw e;
         } finally {
             if (dos != null) {
                 try {
                     dos.close();
                 } catch (Exception e2) {
                 }
             }
            if (os != null) {
                 try {
                     os.close();
                 } catch (Exception e2) {
                 }
             }
            if (is != null)
                 try {
                     is.close();
                 } catch (Exception e2) {
             }
         }
         return returnFlag;
     }
     
     private static String genKey(String userid,String key) throws Exception{
         return new Base().encodeToString(SignatureTookKit.digestSign(userid.getBytes(), key.getBytes()));
     }
 }

3 信任IP添加

在home\ierp\sf\nccssoConfig.xml中添加

  <?xml version="1.0" encoding="UTF-8"?>
  <NCCSSOConfigVO>
      <authenticator id="default" classname="ncc.sso.bs.DefaultNCCSSOAuthenticator">
          <regTimeOut>200</regTimeOut>
          <listParam key="IPAddress">
              <string>127.0.0.1</string>
          </listParam>
      </authenticator>
      <authenticator id="type" classname="nc.sso.bs.AAA">
         <regTimeOut>200</regTimeOut>
         <listParam key="IPAddress">
             <string>127.0.0.1</string>
         </listParam>
     </authenticator>
 </NCCSSOConfigVO>

NCC2005产品本身单点登录有点问题,需要对应补丁包,否则可能会出现token获取成功,重定向后页面白板

有问题可以互相学习讨论

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务