nodejs訪問WCF服務
單點登入
1.SSO站點地址
http://172.20.112.215
2.WebService地址
http://172.20.112.215/TokenService.svc?wsdl
3 需要單點登入的站點地址
http://192.168.2.66/
## 單點登入流程 ##
一.A系統沒有登入,沒有token引數
1.A系統內部處理跳到 SSO站點 http://172.20.112.215/GetToken.aspx?RequestUrl=http:((192.168.2.66 這個地址
2.SSO站點判斷當前使用者之前有沒有在SSO登入過:
1).有登入過: 跳回:http://192.168.2.66?token=bpwkVnpgzNVa(IEQ2ps2XAV(ZjpWT3eVp4MEJq2sUcIkXKnTJEG42uiEl8p6Wr1fwJ9YAvRH6fI)
2).沒有登入過:跳到:http://172.20.112.215/LoginPage.aspx?RequestUrl=http:((192.168.2.66 這個地址進行登入re
二.A系統沒有登入,有token引數
1.A系統內部處理,呼叫Webservice介面方法:ValidateLoginedByToken
1).如果返回的是NULL或者空,說明該token引數無效或者過期,A系統內部處理跳到http://172.20.112.215/LoginPage.aspx?RequestUrl=http:((192.168.2.66 進行登入
2).如果返回的是工號,說明該token有效,A系統對工號進行相應操作處理
URL轉碼
url_helper.js
function UrlReplaceToBase64(urlString) {
return urlString.replace(/\-/gi, "+").replace(/\(/gi, "/").replace(/\)/gi, "=").replace(/\]/gi, "&");
}
function Base64ReplaceToUrl(base64) {
return base64.replace(/\+/gi, "-").replace(/\//gi, "(").replace(/=/gi, ")").replace(/&/gi, "]");
}
exports.UrlReplaceToBase64 =UrlReplaceToBase64 ;
exports.Base64ReplaceToUrl =Base64ReplaceToUrl ;
訪問WCF服務
參考:http://www.open-open.com/lib/view/open1336640628390.html
var WCF=require('wcf.js');
var url_helper=require("../models/url_helper.js");
var htmlparser = require("htmlparser2");
var wcf_handle_token=function (url_token,callback) {
var token=url_helper.UrlReplaceToBase64(url_token);
var BasicHttpBinding=WCF.BasicHttpBinding
, Proxy = WCF.Proxy
, binding = new BasicHttpBinding({})
, proxy = new Proxy(binding, "http://172.20.112.215//TokenService.svc?wsdl")
, message = "<Envelope xmlns='http://schemas.xmlsoap.org/soap/envelope/'>" +
"<Header />" +
"<Body>" +
"<ValidateLoginedByToken xmlns='http://tempuri.org/'>" +
"<token>" + token + "</token>" +
"</ValidateLoginedByToken>" +
"</Body>" +
"</Envelope>";
proxy.send(message, "http://tempuri.org/ITokenService/ValidateLoginedByToken", function (response, ctx) {
var parser = new htmlparser.Parser({
ontext: function(text){
//擷取出的原始文字為11040876_1後面的_1表示WCF服務環境為中文環境
var usercode=text.slice(0,-2);
console.log("工號:"+usercode);
callback(usercode);
}
}, {decodeEntities: true});
parser.write(response);
parser.end();
});
};
exports.wcf_handle_token =wcf_handle_token ;
需要安裝WCF模組,npm install wcf
由於WCF服務交換資料的格式為xml(輸入和輸出)
htmlparser2是一個xml解析器 (比xml2json快:詳情參考 http://blog.csdn.net/weichuang_1/article/details/48861199 ),直接提取出xml中的文字,再擷取就得到工號
說明
http://172.20.112.215/TokenService.svc?wsdl 瀏覽器開啟是一個xml檔案,列舉這可以提供的服務
WCF服務是在webservice的基礎之上構建的資料交換方式,傳入引數和返回結果都是xml格式
相關文章
- 使用nodejs和Java訪問遠端伺服器的服務NodeJSJava伺服器
- .NET開發WinForm(C/S)專案整合三種SOA服務訪問(直連、WCF、WebAPI)模式ORMWebAPI模式
- docker內服務訪問宿主機服務Docker
- Java與WCF互動(一):Java客戶端呼叫WCF服務 (轉)Java客戶端
- WCF服務端的.NET Core支援專案Core WCF 正式啟動服務端
- kubernetes如何訪問pod服務
- Nginx 實戰-02-nginx proxy_pass 服務代理訪問 使用筆記 ubuntu nodejsNginx筆記UbuntuNodeJS
- 如何使用RestTemplate訪問restful服務REST
- 寶塔 ftp訪問不了的問題 filezilla訪問不了Purefpt服務FTP
- 使用Dockerfile部署nodejs服務DockerNodeJS
- Kubernetes:37---服務(無法訪問服務的一些原因)
- 記一次域名服務訪問超時問題
- NodeJs服務註冊與服務發現實現NodeJS
- 如何實現在家訪問公司內網服務內網
- 配置ACL在網路服務中訪問控制
- Linux一個服務被訪問的過程Linux
- k8s中ingress訪問不到服務K8S
- 使用 grpcurl 通過命令列訪問 gRPC 服務RPC命令列
- SpringCloud 實戰:禁止直接訪問後端服務SpringGCCloud後端
- 記一次程式訪問無法訪問虛擬機器部署的服務虛擬機
- Holer實現外網訪問內網NodeJS內網NodeJS
- Nodejs 使用 ZooKeeper 做服務發現NodeJS
- 淺談NodeJS搭建GraphQL API服務NodeJSAPI
- “文章助手”小程式已服務十萬次 URL 訪問
- 服務端指南 | 基於資料的訪問控制服務端
- 外網如何透過https訪問自己的服務HTTP
- Cloudflare DNS 服務中斷,大量網站和服務無法訪問CloudDNS網站
- Google Cloud Function函式訪問AWS的Redis服務(二)GoCloudFunction函式Redis
- FRP指定訪問者:安全地暴露內網服務FRP內網
- OPPO雲資料庫訪問服務技術揭祕資料庫
- 日誌服務之分析使用者訪問行為
- linux安裝nodejs及服務部署(二)LinuxNodeJS
- 使用nodejs和express搭建http web服務NodeJSExpressHTTPWeb
- 阿里雲Serverless Kubernetes通過Ingress提供7層服務訪問阿里Server
- 什麼是安全訪問服務邊緣(SASE)?—Vecloud微雲Cloud
- 【Kubernetes學習筆記】-服務訪問之 IP & Port & Endpoint 辨析筆記
- 在kubernetes 叢集內訪問k8s API服務K8SAPI
- 記-Nodejs埋點服務-定位cpu瓶頸NodeJS
- Docker入門(三):nodejs後端服務部署DockerNodeJS後端