NCC 單點登錄


 

 

1.1 第三方單點登錄NC Cloud概覽

第三方單點登錄的流程:

  1. 客戶端向服務端發起登陸NC Cloud請求。
  2. 向NC Cloud服務器注冊校驗用戶登陸和上下文信息。
  3. 如果校驗成功NC Cloud服務器響應給客戶服務器token信息
  4. 客戶服務器將token響應給客戶端
  5. 客戶端收到token后拼接請求NC Cloud節點的url信息。
  6. NC Cloud收到請求並驗證token是否合法,如果合法,則重定向到客戶端請求的節點頁面。

 

 

 

1.2 第三方系統單點登錄NC Cloud詳細流程

1.1.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:非本環節使用,設置為空

1.1.2 獲取登錄token

通過秘鑰對獲取登錄token,第三方服務訪問http://ip:port/service/genThirdPartyAccessToken 同時訪問參數為:

  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和當前系統時間動態拼接的字符串生成

 

package com.yomyou.nccloud.oauth2;

import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import nccloud.security.impl.SignatureTookKit;

import org.apache.commons.codec.binary.Base64;

public class PostThirdPartyAccessTokenTest {

    public static void main(String[] args) throws Exception  {
        String dsname = "devlop";
        String usercode = "admin";//nccy用戶編碼
        String client_id = "portal";//第三方系統id
        String client_security = "123qwe";//第三方秘鑰
        String langcode = "";//多語語種
        String busicentercode = "";//業務中心
        String groupcode = "";//集團編碼

        URL preUrl = new URL("http://127.0.0.1:6500/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", "admin");
        HttpURLConnection hc = (HttpURLConnection) uc;
        hc.setRequestMethod("POST");
        OutputStream os = null;
        DataOutputStream dos = null;
        String returnFlag = "";
        InputStream is = null;
        try {
            StringBuffer sb = new StringBuffer();
            String security = genKey(usercode,usercode + client_security + (System.currentTimeMillis() + "").substring(0, 6));
            sb.append("type=type_security&dsname="+dsname+"&usercode="+usercode+"&client_id="+client_id+"&security="+security);
            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);
            }
            System.out.print(returnFlag);
        } catch (Exception 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) {
            }
        }

    }

    private static String genKey(String userid,String key) throws Exception{
        return new Base64().encodeToString(SignatureTookKit.digestSign(userid.getBytes(), key.getBytes()));
    }

}

  

訪問NCC資源

提供登錄NC Cloud系統URL,token是從第二步成功返回結果,該值默認保留1分鍾,超時或使用過一次則失效。 URL信息如下: http://ip:port/uap/rbac/thirdpartylogin/main/index.html?accesstoken=xxx &redirect_uri=http://ip:port/nccloud。 ip和port是NC Cloud的服務地址的ip和端口號。 http://ip:port/uap/rbac/thirdpartylogin/main/index.html為固定地址。 accesstoken=xxx為(4)中獲取的臨時token 。 redirect_uri=http://ip:port/nccloud為成功登錄后要重定向的地址,如后面為空,默認跳到工作桌面。如果是列表或卡片節點,需改為節點的url的地址。如果是審批詳情頁面,需要客開,因為審批詳情頁面的url不同其他頁面,需要向NC Cloud服務器請求獲取。拼接完成訪問url時,NC Cloud服務器收到該請求,會驗證token和用戶登錄NC Cloud權限,驗證通過則重定向到redirect_uri。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM