rtx反向单点登录
1>通过ie浏览器的activx获取当前登录账户,其它浏览器不行,不支持activx。
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
<object id="RTXAX" data="data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA=="
classid="clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D" viewastext>
</object>
<script language="javascript" type="text/javascript">
var RTXCRoot = RTXAX.GetObject("KernalRoot"); //获取KernalRoot对象
var rtcData = RTXCRoot.Sign; //获取签名,并把它赋给rtcData
var strAccount = RTXCRoot.Account; //获取用户帐号
var strSignature = rtcData.GetString("Sign"); //获取rtcData对象的Sign 的内容,也就是用户签名
location.href = 'rtxsign.aspx?code=jsjd&user=' + encodeURIComponent(strAccount) + '&sign=' + encodeURIComponent(strSignature);
</script>
</body>
</html>
2>rtx常用接口封装
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; using System.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; /// <summary>
///RTXHelper 的摘要说明
/// </summary>
public class RTXHelper
{
private RTXSAPILib.IRTXSAPIRootObj rootObj; /// <summary>
/// 默认的RTX服务器的地址和端口是本机,如果夸服务器则从配置文件中读取
/// 默认值:IP(127.0.0.1) port(8006)
/// </summary>
public RTXHelper()
{
rootObj = new RTXSAPILib.RTXSAPIRootObjClass(); WebConfigHelper webConfig = new WebConfigHelper();
rootObj.ServerIP = webConfig.RTXServerIP;
rootObj.ServerPort = webConfig.RTXServerPort;
} public RTXHelper(String rtxServerIP, Int16 rtxServerPort)
{
rootObj = new RTXSAPILib.RTXSAPIRootObjClass();
rootObj.ServerIP = rtxServerIP;
rootObj.ServerPort = rtxServerPort;
} public bool SignatureAuth(string bstrUserName, string bstrSign)
{
RTXSAPILib.IRTXSAPIUserAuthObj2 AuthObj2 = (RTXSAPILib.IRTXSAPIUserAuthObj2)rootObj.UserAuthObj;
return AuthObj2.SignatureAuth(bstrUserName, bstrSign);
} public void SendIM(string bstrSender, string bstrPwd, string bstrReceivers, string bstrMsg, string bstrSessionID)
{
rootObj.SendIM(bstrSender, bstrPwd, bstrReceivers, bstrMsg, string.Format("{0}{1}{2}", "{", bstrSessionID, "}"));
} public void SendNotify(string bstrReceiver, string bstrTitle, int lDelayTime, string bstrMsg)
{
rootObj.SendNotify(bstrReceiver, bstrTitle, lDelayTime, bstrMsg); }
}
3>验收当前用户的账户。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; using XYL.IMS.Entities; public partial class RTXSign : System.Web.UI.Page
{
private String sysCode;
private String rtxUserId;
private String sign;
protected void Page_Load(object sender, EventArgs e)
{
InitParam();
if (PassSignatureAuth())
{
User user = new UserBLL().GetUser(sysCode, rtxUserId);
SysInfo sysInfo = new SysInfoBLL().GetSingleSignUrl(sysCode);
if (user == null)
{
Response.Write(String.Format("您的{0}没有账户与腾讯通绑定,请绑定账户", sysInfo.Name));
}
else
{
Response.Redirect(string.Format(sysInfo.SingleSignUrl, user.SysUserId, user.SysPassword));
}
}
else
{
Response.Write("账户未通过腾讯通服务器验证,请重新登录腾讯通,然后再尝试");
}
} private void InitParam()
{
sysCode = Request.QueryString["code"];
rtxUserId = Request.QueryString["user"];
sign = Request.QueryString["sign"];
} private bool PassSignatureAuth()
{
return new RTXHelper().SignatureAuth(rtxUserId, sign);
} private void setCookie()
{
HttpCookie cookie = new HttpCookie("rtx");
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(, , , , );
cookie.Expires = dt.Add(ts); cookie.Values.Add("user", HttpContext.Current.Request.QueryString["user"]);
cookie.Values.Add("sign", HttpContext.Current.Request.QueryString["sign"]); Response.AppendCookie(cookie);
} }
4>官网提供的demo,
<html>
<head>
<TITLE>签名验证</TITLE>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<script language="vbscript" id="clientEventHandlersVBS">
<!--
'从服务端获取SessionKey dim strAccount
dim strSignature Sub btnGetSign_onclick '服务器端代码,用于验证签名 on error resume next Set RTXCRoot = RTXAX.GetObject("KernalRoot") ' 获取KernalRoot对象
Set rtcData = RTXCRoot.Sign '获取签名,并把它赋给rtcData strAccount = RTXCRoot.Account '获取用户帐号
strSignature = rtcData.GetString("Sign") '获取rtcData对象的Sign 的内容,也就是用户签名 form1.user.value= strAccount
form1.sign.value = strSignature
If Err.Number <> 0 Then
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear ' Clear the error.
End If end sub
-->
</script>
</head>
<body >
<form name="form1" method="get" action="Default.aspx">
<p>用户名:
<input type="text" name="user">
</p>
<p> 签 名:
<input type="text" name="sign">
</p>
<p>
<INPUT name="btnGetSign" onclick="btnGetSign_onclick" type="button" id="btnGetSign" style="WIDTH: 100px; HEIGHT: 21px" value="获取签名" size="18" >
<INPUT name="btnAuthSign" type="submit" id="btnAuthSign" style="WIDTH: 100px; HEIGHT: 21px" value="签名验证" size="18" >
</p>
</form>
<p>
<OBJECT id=RTXAX
data=data:application/x-oleobject;base64,fajuXg4WLUqEJ7bDM/7aTQADAAAaAAAAGgAAAA==
classid=clsid:5EEEA87D-160E-4A2D-8427-B6C333FEDA4D VIEWASTEXT>
</OBJECT>
</p>
<p> </p>
</BODY>
</HTML>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<% string strName = HttpContext.Current.Request.QueryString["user"];
string strSign = HttpContext.Current.Request.QueryString["sign"]; RTXSAPILib.IRTXSAPIRootObj RootObj = new RTXSAPILib.RTXSAPIRootObjClass();
RTXSAPILib.IRTXSAPIUserAuthObj2 AuthObj2 = (RTXSAPILib.IRTXSAPIUserAuthObj2)RootObj.UserAuthObj; Response.Write(strName);
Response.Write(strSign); bool bOK = AuthObj2.SignatureAuth(strName, strSign); if (bOK == true)
{
Response.Redirect("OA.html");
}
else
{
Response.Redirect("error.html");
} %>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
程序员的基础教程:菜鸟程序员
rtx反向单点登录的更多相关文章
- SSO单点登录的发展由来以及实现原理
单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1.web单系统应用 早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的, ...
- SSO单点登录的发展由来以及实现原理【转】
单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1.web单系统应用 早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的, ...
- 编程界失传秘术,SSO单点登录,什么是单点,如何实现登录?
单点登录 多系统,单一位置登录,实现多系统同时登录的一种技术. 常出现在互联网应用和企业级平台中. 如:京东. 单点登录一般是用于互相授信的系统,实现单一位置登录,全系统有效的. 三方登录:某系统,使 ...
- 【SSO】单点登录系统
一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...
- 实战:ADFS3.0单点登录系列-集成Exchange
本文将介绍如何将Exchange与ADFS集成,从而实现对于Exchange的SSO. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0 ...
- cas单点登录系统:客户端(client)详细配置(包含统一单点注销配置)
最近一直在研究cas登录中心这一块的应用,分享一下记录的一些笔记和心得.后面会把cas-server端的配置和重构,另外还有这几天再搞nginx+cas的https反向代理配置,以及cas的证书相关的 ...
- Java架构师必知:什么是单点登录,主要会应用于哪些场景?
单点登录在大型网站里使用得非常频繁,例如,阿里旗下有淘宝.天猫.支付宝,阿里巴巴,阿里妈妈,阿里妹妹等网站,还有背后的成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都 ...
- 单点登录(sso)入门
单点登录的英文名叫做Single Sign On,简称SSO. 在以前,一般我们就单系统,所有的功能都在同一个系统上. 后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统. 比如阿里 ...
- 用户注册&单点登录
package com.tttttt.portal.controller; import java.util.HashMap; import java.util.Map; import javax.s ...
随机推荐
- 在AWS EMR上运行Map Reduce的Java示例程序 及 操作小计
下面的代码中AffairClient类中包含了三个内之类,分别对应于Hadoop Mapreduce程序运行所需的Mapper类,Reducer类,和主类.AffairClient类中其余方法用于配置 ...
- java代码---------实现布尔型的功能,是否执行下一步的关键
总结:灵活 package com.sads; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- Fiddler过滤操作
Fidller,不做过多的简介,其中的过滤操作肯定是绕不过去的.直接上图.
- python学习(二十三) String(下) 分片和索引
分片: 记住, 是开闭区间. a = "abcdef"print(a[:])print(a[1:])print(a[:3])print(a[-2])print(a[:-2])pri ...
- VS2015 异常 :遇到异常。这可能是由某个扩展导致的
原因是安装程序时将注册表修改了,解决方案: 修改注册表: 64位机器: [HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\ ...
- 【BZOJ】2938 [POI2000]病毒(AC自动机)
题目 传送门:QWQ 传送到洛谷QWQ 分析 夏爷爷传送门 代码 #include <bits/stdc++.h> using namespace std; ; ][], fail[N*] ...
- Java Thread 多线程同步、锁、通信
参看:http://www.cnblogs.com/hoojo/archive/2011/05/05/2038101.html
- TOTAL COMMAND自定义快捷键
- awk查看接口耗时情况
+1:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Ag ...
- JavaScript知识总结--对象的相关概念
一.定义 无序属性的集合. 说白了就是一个容器,可以容纳[基本值.对象或者函数],这些东西都叫做属性.每个属性都有一个名字,每个名字都映射一个值(可以是基本类型的值,也可以是引用类型的值).从以上描述 ...