.Net 接入CAS 遇到的坑

来源:https://www.cnblogs.com/ZyCoder/archive/2019/03/06/10486040.html
-Advertisement-
Play Games

關於CAS是個什麼東西,就不多閑扯了,相信每個有過SSO經驗的都聽過CAS大名,百度百科地址: https://baike.baidu.com/item/CAS/1329561?fr=aladdin 項目所用https:/github.com/apereo/dotnet-cas-client 在.N ...


關於CAS是個什麼東西,就不多閑扯了,相信每個有過SSO經驗的都聽過CAS大名,百度百科地址:

https://baike.baidu.com/item/CAS/1329561?fr=aladdin

項目所用https:/github.com/apereo/dotnet-cas-client

在.Net 中集成CAS 網上也有很多的教程,關於無限重定向的解決方案,網上也有眾多解決方案,第一點就是<sessionState>節點的配置,這個簡單扯一下,在.Net 中,session有四種存儲方式,而sessionState節點的mode模式有4種,分別為Off、InProc、StateServer、SqlServer。 四種存儲方式分別為自定義數據存儲、IIS進程、狀態伺服器、資料庫。預設情況下,session保存在IIS進程中,其預設超時時間為20分鐘。

說明

Custom

會話狀態將使用自定義數據存儲區來存儲會話狀態信息。

InProc

會話處於正在處理 ASP.NET 輔助進程的狀態。

Off

會話狀態被禁用。

StateServer

話狀態將使用進程外 ASP.NET 狀態服務來存儲狀態信息。

SQLServer

會話狀態將使用進程外 SQL Server 資料庫來存儲狀態信息。

 

一般情況下,解決無限重定向,我們只需要配置sessionState 節點為<sessionState mode="StateServer" cookieless="UseCookies" timeout="1440"></sessionState> timeout 即為超時時間,單位為分鐘,這個根據實際情況可自由配置。

關於其他的配置就不多說了,官方文檔講述的很詳細。

這次所遇到的坑 就是,在對接其他公司提供的CAS平臺時,我們需要獲取到平臺返回的用戶信息,預設情況下,能夠獲取到的只是當前用戶名,不太容易滿足我們的需求。在CAS服務端進行配置,可以獲取到用戶的擴展屬性,比如ID、類型、郵箱、頭像等等。客戶所提供的文檔 有Java、Python、Php的實現方案,從attributes里獲取用戶的基本信息,.Net平臺下官方文檔對此沒有介紹,開始盲人摸象。看源代碼,發現在 Assertion 下有Attributes屬性,開始嘗試使用,起初獲取信息代碼為:

var user = HttpContext.Current.User;

var casPrincipal = (ICasPrincipal)user;

var dict= casPrincipal.Assertion.Attributes;

但是我發現,無論怎麼整,獲取的attributes總為null。所以一直在想,到底是我的代碼不對,還是他們給的文檔不對,網上沒有找到對應的解決方案,無奈只有回到百科查看cas介紹。一張圖點亮了我:

這是百科上的cas協議圖,結合實際情況,項目確實成功集成了CAS,登錄成功後確實跳轉到了我們的客戶端,思路主要在第5步上,服務端在驗證service ticket以後才會返回給我們用戶信息,所以就在這裡跟代碼,看服務端到底返回給了我們什麼信息。代碼在TicketValidator這一塊,

可以看到,服務端確實成功返回給了我們用戶擴展屬性。在這裡吐槽一下某公司,給的文檔完全和這信息不匹配。

既然服務端成功返回給了我們數據,為什麼沒有格式化拿到數據呢,接著往下走

發現在這裡少了Attributes屬性,故加上Attributes屬性,格式如上,

[XmlElement("attributes")]

public object Attributes

{

get;

set;

}

代碼接著往下走,如下圖所示,在所處位置加上如下代碼,解析attributes構造成一個字典,並附加到Assertion的Attributes中即可。

還是起初獲取用戶信息的代碼,在Attributes中便可獲取到服務端返回的擴展信息。

這種解決方案不會適配所有情況,但是目前解決了我的問題,各位有好的解決方案希望能夠提供。

 

到此結束,主要問題就是DotNetCasClient這個庫在反序列化信息的時候,丟失了attributes,我們做的就是加上了這個屬性,讓其成功反序列化,從而獲取結果。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、使用Java EE 在eclipse 開發動態的Web工程(Java web項目)1)開發開發選項切換到JavaEE2)可以在Windows->show view中找到package explorer,並將其托拽到開發區的左邊3)在servers面板中新建tomcat伺服器,一定要關聯到tomc ...
  • ...
  • 1. nginx+lua學習 1.1. 網關架構 1.2. nginx命令和信號控制 1. nginx s stop 快速關閉,不管有沒有正在處理的請求 nginx s quit 優雅關閉方式,推出前完成已經接受的連接請求 2. nginx c nginx配置文件地址 啟動 3. nginx s r ...
  • 前面介紹各種容器之時,通過在容器名稱後面添加包裹數據類型的一對尖括弧,表示該容器存放的是哪種類型的元素。這樣一來總算把Java當中的各類括弧都湊齊了,例如包裹一段代碼的花括弧、指定數組元素下標的方括弧、容納方法輸入參數的圓括弧,還有最近跟在容器名稱之後的尖括弧。可是為什麼尖括弧要加到容器後面呢?它還 ...
  • 問題 在實際開發過程當中我們可能會針對某些類型使用動態代理技術(AOP),註入了一些攔截器進行處理,但是一旦某個類型被動態代理了,那麼就會生成一個代理類。這個時候在該類內部使用 方法獲取到的 類型並不是實際類型的 ,而是代理類的 。 解決 那麼我們如何在代理類當中獲取到具體類型的 呢?其實 Cast ...
  • .NET開源快速開發框架Colder(NET452+AdminLTE版) 引言 ==== 半年前將基於Easyui的快速開發框架開源,三個版本(NET4.52,NETCore和NET4.0)總共榮獲200+星,得到了大家的認可,也很高興能夠幫助到大家。但不可否認的是Easyui在現在各大主流UI框架 ...
  • 在通過MVC和Angular聯合開發項目時,項目里有幾個重要的配置文件,下麵列出這幾個配置文件的分析和比較; 主要配置文件有appsettings.json,tsconfig.json,package.json,bower.json,.bowerrc,後面隨著學習的深入再繼續補充: e.g.: bo ...
  • 本來計劃接著上篇 C# Winform模仿百度日曆,發現一時半會寫不完,只寫了一小半還不全,暫且擱置下。現在計划下班後每天至少寫一篇博客,未能完成的等周末(不加班都情況)補充完整。 本篇博客窗體換膚,不是本人原創是之前 程式員之窗的作品。我看界面挺好,當時特別特別菜(當然現在依然也很菜),對此佩服的... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...