.NET環境構建CAS客戶端
仿照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 = "";
this.casValidate = "";
this.casServerName = "localhost:7010";
this.casServiceUrl = "";
this.redirectURL = "";
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);
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8700374/viewspace-1006078/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CAS SSO單點登入客戶端環境搭建客戶端
- 3.CAS SSO單點登入客戶端環境搭建客戶端
- CAS SSO單點登入客戶端環境搭建之多租戶saas企業開發架構客戶端架構
- CAS SSO單點登入客戶端環境搭建之框架深度分析客戶端框架
- 構造CAS客戶端的登入Servlet客戶端Servlet
- 關於CAS SSO單點登入客戶端環境搭建原始碼分析客戶端原始碼
- 3.CAS SSO單點登入客戶端環境搭建&原始碼獲取客戶端原始碼
- CAS SSO單點登入客戶端環境搭建之Spring Cloud + Spring Boot 企業架構客戶端CloudSpring Boot架構
- Spring Cloud + Spring Boot 企業架構之CAS SSO單點登入客戶端環境搭建CloudSpring Boot架構客戶端
- Spring Cloud構建客戶端SpringCloud客戶端
- CAS SSO單點登入客戶端環境搭建解析之Spring Cloud + Spring Boot企業架構客戶端CloudSpring Boot架構
- Spring Cloud + Spring Boot + Mybatis 企業架構之CAS SSO單點登入客戶端環境搭建CloudSpring BootMyBatis架構客戶端
- CAS (2) —— Mac下配置CAS到Tomcat(客戶端)MacTomcat客戶端
- CAS (3) —— Mac下配置CAS客戶端經代理訪問Tomcat CASMac客戶端Tomcat
- SpringCloud大型企業分散式微服務雲架構原始碼+CAS SSO單點登入客戶端環境搭建SpringGCCloud分散式微服務架構原始碼客戶端
- CAS SSO單點登入客戶端環境搭建之java版spring cloud 分散式微服務企業快速架構客戶端JavaSpringCloud分散式微服務架構
- Java版分散式微服務雲開發架構 Spring Cloud之CAS SSO單點登入客戶端環境搭建Java分散式微服務架構SpringCloud客戶端
- spring系列—CAS客戶端與SpringSecurity整合Spring客戶端Gse
- 修改CAS客戶端 使用簡單HTTP協議客戶端HTTP協議
- SpringCloud分散式、微服務、雲架構快速開發平臺原始碼之CAS SSO單點登入客戶端環境搭建SpringGCCloud分散式微服務架構原始碼客戶端
- CAS SSO單點登入客戶端環境搭建之Java版微服務雲開發架構 Spring Cloud+Spring Boot客戶端Java微服務架構CloudSpring Boot
- [BI專案記]-搭建程式碼管理環境之客戶端客戶端
- centos6.2lnmp環境下安裝zabbix(中文環境)並且監控客戶端CentOSLNMP客戶端
- 配置ORACLE 11g綠色版客戶端和PLSQL環境Oracle客戶端SQL
- CAS SSO單點登入服務端環境搭建服務端
- ClearCase遠端客戶端軟體在網路環境下的配置應用客戶端
- Netflix奈飛客戶端客戶端
- .net客戶端呼叫activeMQ程式碼客戶端MQ
- dockerfile構建flask環境DockerFlask
- docker構建php環境DockerPHP
- Netflix客戶端:Netflix for Mac客戶端Mac
- [精華][推薦]CAS SSO單點登入服務端客戶端例項服務端客戶端
- 改造CAS單點登入 --- 自定義登陸頁面(客戶端)客戶端
- 使用 .NET MAUI 開發 ChatGPT 客戶端UIChatGPT客戶端
- Clicker for Netflix :奈飛客戶端客戶端
- .net 獲取客戶端真實ip客戶端
- Docker 構建PHP 映象環境DockerPHP
- 構建ORACLE高可用環境Oracle