Skip to main content

asp.net Single Sign-On(SSO) from SAP

公司的主系统是SAP的东西,有的时候老板想要一些小的新功能或是某个部门需要一个自己使用的小系统又不想买SAP的东西(贵啊),只有自己写和使用一些第三方免费或是开源的系统,这个时候就难免涉及到Single Sign-On。而在asp.net 2.0下是非常容易实现的。有SAP提供的“Sapsecu.dll”,“sapssoext.dll”2个dll再加上由公司SAP系统提供的"verify.pse"就足够了。

第一步

复制Sapsecu.dll到system32目录,并使用Rersrv32注册。

第二步

在项目里添加对sapssoext.dll的引用,vs2005会自动生成Interop.SAPSSOEXT.dll来让.net使用。

第三步

在你项目的根目录创建sap目录,并将SAP系统那边提供的verify.pse复制过去。位置倒到不是一定要在这里,只要你找得到就好。

第四步

在SAP系统那边,需要生成一个类似:http://yourserver/login.aspx?sso=werwerwerwe的链接,当然具体的页面需要你和那边的管理员商量来决定。这个链接是有时效性的,我在做测试的时候他们给的测试链接通常只能用一天。现在我们要做到就是我们这边的编码,在login.aspx的page_load里面实现:
protected void Page_Load(object sender, EventArgs e)
{
  string sso= Request.QueryString["sso"];
  SAPSSOEXT.SSO2Ticket objSSO = new SAPSSOEXT.SSO2Ticket();
  objSSO.CryptLib = "sapsecu.dll";
  string strKeypath = Server.MapPath("~/sap/verify.pse");    //放在根目录比较容易找
  object tt;
  tt = objSSO.EvalLogonTicket(strTicket, strKeypath, String.Empty);    //讲了这么多废话,关键的就是要调用这个函数
  object[] ts = tt as object[];    //处理过后的其实是个对象数组,有很多东西,而我们要关心的是第一个:用户的id
  string userId = ts[0].ToString();
  loginToMySystem(userID);    //调用函数来登入自己的系统。
}

EOF

Comments

Anonymous said…
这个是登录SAP的GUI还是Portal?
谢谢!
將王車 said…
不是登錄SAP,是登錄SAP以後,跳到第3方。

Popular posts from this blog

欠税了!!!!

上个礼拜,收到政府发来的信,大概知道是和缴税有关的,由于本人英文不好,而且我们缴税的方面一向是由公司负责的,以为是普通的通知。因为同事收到的信都和我的不一样,还是决定带给老大看看是什么东西。结果把老大吓了一跳,红的,居然是红的(我怎么看都只有一点淡淡的红色。)。这意味着我欠税了。在这个资本主义国家,最恐怖的事情莫过去欠税了!!!我的工作准证很可能被吊销。 下午立马跑回公司找人事部的。我居然公司成立几十年来第一个红单。。。人事部的人说还好公司一贯信誉良好,他们会和那边联系,让我先放心。 我倒是很放心,一点都不急。其实我想回家了,和女朋友的关系这几天又到了谷底,想回去了,虽然房子钱还没有着落。

ipod touch

昨天晚上买了iPod Touch 8G S$388,晚上手机没法照,上一张官网的图: 拿在手里的感觉很不错,超薄。终于可以用上传说中的多重触控了。音质?汗,我素木耳。 昨晚太赶,忘了贴膜,配套的套子也没有。今天再去森林看看。这些杂物好贵啊啊啊。