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 ...
随机推荐
- JavaScript模块化-require.js,r.js和打包发布
在JavaScript模块化和闭包和JavaScript-Module-Pattern-In-Depth这两篇文章中,提到了模块化的基本思想,但是在实际项目中模块化和项目人员的分工,组建化开发,打包发 ...
- Android getevent用法详解
getevent 指令用于获取 input 输入事件,比如获取按键上报信息.获取触摸屏上报信息等. 指令源码路径:/system/core/toolbox/getevent.c getevent -h ...
- linux(7)
第十七单元 Samba服务 [本节内容]1. 掌握samba的功能: samba是一个网络服务器,用于Linux和Windows之间共享文件.2. 掌握samba服务的启动.停止.重启service ...
- DS05--查找
一.学习总结 1.查找的思维导图 2.查找学习体会 2.1 关联容器和顺序容器 c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector.list.deque等.其中vector表示 ...
- clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案
clientHeight , scrollHeight , offsetHeight相信每个人都用过,可是每次用都要查一下到底哪个是文档大小哪个是视口大小,还有头疼的兼容问题. 先来官方的了解一下这三 ...
- appium+python自动化37-adb shell模拟点击事件(input tap)
前言 appium有时候定位一个元素很难定位到,或者说明明定位到这个元素了,却无法点击,这个时候该怎么办呢? 求助大神是没用的,点击不了就是点击不了,appium不是万能的,这个时候应该转换思路,换其 ...
- java代码---------实现File的目录下创建文本文档
总结:虽然他没教给我们很多,但是他已经很棒了 package com.a.b; import java.io.*; public class dd { public static void main( ...
- Mybatis扩展
分页插件PageHelper 其实Mybstis内部有实现逻辑分页的功能,但是较为麻烦和难用.这里记录一个分页插件PageHelper的使用,我们可以在它的github地址https://github ...
- Ubuntu无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
结果终端提示:无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?” 解决办法如 ...
- django第一课大概了解
项目目录介绍: -------- manage.py : Django项目里面的工具,通过它可以调用django shell和数据库等. mysite/ 主要是项目配置的信息,通常一次生成后不需要其他 ...