ITPub博客

首页 > 应用开发 > IT综合 > .NET环境构建CAS客户端

.NET环境构建CAS客户端

原创 IT综合 作者:cbcgorilla 时间:2008-06-24 20:59:11 0 删除 编辑

仿照java版本的CAS客户端过滤器,可在.NET环境中写出具备同样功能的CAS客户端过滤组件。

主要部分有如下几个功能类:

Utility.CasClient.UserAuthentication :CAS主要处理类

Utility.CasClient.Validator.ServiceTicketValidator:ticket验证类

Utility.CasClient.Validator.ProxyTicketValidator:该类由ServiceTicketValidator派生,继承ServiceTicketValidator中的主要验证功能。

Utility.Http.HttpUtil:工具类,通过HTTP请求发送并接受服务端数据。

Utility.CasClient.Handler.ITrustHandler:本地登录接口

下面给出主要处理类的代码,其他类可以根据java版本很容易改造出来。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Web;
using System.Web.SessionState;
using Utility.CasClient.Handler;
using Utility.CasClient.Validator;

namespace Utility.CasClient
{
/**
* 用户身份验证处理类
*/
public class UserAuthentication
{
//*********************************************************************
// Constants
public static String CAS_FILTER_USER = "edu.yale.its.tp.cas.client.filter.user";

private ITrustHandler handler;
private String casLogin, casValidate, casAuthorizedProxy, casServiceUrl, casRenew, casServerName;
private String redirectURL;
private String desktopURL;

public UserAuthentication()
{
handler = (ITrustHandler)Activator.CreateInstance(Type.GetType("Utility.CasClient.Handler.LocalTrustHandler"));

this.casLogin = "https://172.19.1.138:9443/web/login";
this.casValidate = "http://172.19.1.138:9080/web/serviceValidate";
this.casServerName = "localhost:7010";
this.casServiceUrl = "http://localhost:7010/WEB/LoginPage.aspx";
this.redirectURL = "http://172.19.1.138:9080/web/logon.jsp";
this.desktopURL = "Default.aspx";
this.casRenew = "false";
}

/**
* 登录入口
*/
public void Login(HttpContext context)
{
HttpRequest request = context.Request;
HttpResponse response = context.Response;
response.AddHeader("Pragma", "no-cache");
response.AddHeader("Cache-Control", "no-store");
response.Expires = -1;
HttpSessionState session = context.Session;
// 若会话信息中用户名已存在,则使用该用户名直接登录本地系统。
if (session != null && session[CAS_FILTER_USER] != null)
{
String loginUser = session[CAS_FILTER_USER].ToString();
//使用CAS用户登录本地系统
LoginToClientService(context, loginUser);
return;
}
// 根据当前传入的ticket 获取用户登录名
String ticket = request.Params["ticket"];
if (ticket == null)
{
response.Redirect(casLogin + "?service=" + GetService(request));
}
else
{
String username = GetAuthenticatedUser(request);
if (username != null)
{
// 登录本地系统
if (session != null)
{
session.Add(CAS_FILTER_USER, username);
}
LoginToClientService(context, username);
}
}
}

/**
* 调用远程SSO服务端Servlet验证用户Token,获取用户登录名。
*/
private String GetAuthenticatedUser(HttpRequest request)
{
ProxyTicketValidator pv = new ProxyTicketValidator();
pv.SetCasValidateUrl(casValidate);
pv.SetServiceTicket(request.Params["ticket"]);
pv.SetService(GetService(request));
pv.SetRenew(Boolean.Parse(casRenew));
pv.Validate();
if (pv.IsAuthenticationSuccesful())
{
return pv.GetUser();
}
else
{
return null;
}
}

/**
* 调用本地登录接口函数
*/
private void LoginToClientService(HttpContext context, String username)
{
if (username == null || username.Trim().Length == 0)
{
// send redirect;
}
else
{
int loginCode = handler.LoginWithUserName(context, username);
if (loginCode == 100)
{
context.Response.Redirect(desktopURL);
}
}
}

/**
* 获取SSO服务地址
*/
private String GetService(HttpRequest request)
{
//TODO 添加GetService方法内容

return HttpUtility.UrlEncode(casServiceUrl);
}
}
}

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8700374/viewspace-1006078/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    7
  • 访问量
    17293