日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core实践系列之SSO-跨域实现

發(fā)布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core实践系列之SSO-跨域实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

接著上篇的《.net core實踐系列之SSO-同域實現(xiàn)》,這次來聊聊SSO跨域的實現(xiàn)方式。這次雖說是.net core實踐,但是核心點使用jquery居多。

建議看這篇文章的朋友可以先看上篇《.net core實踐系列之SSO-同域實現(xiàn)》做一個SSO大概了解。

源碼地址:https://github.com/SkyChenSky/Core.SSO.git

效果圖

知識點回顧

實現(xiàn)原則

只要統(tǒng)一Token的產(chǎn)生和校驗方式,無論授權與認證的在哪(認證系統(tǒng)或業(yè)務系統(tǒng)),也無論用戶信息存儲在哪(瀏覽器、服務器),其實都可以實現(xiàn)單點登錄的效果

實現(xiàn)關鍵點

  • Token的生成

  • Token的共享

  • Token校驗

Token共享復雜度

  • 同域

  • 跨域

Token認證方式

  • 業(yè)務系統(tǒng)自認證

  • 轉發(fā)給認證中心認證

同源策略

所有支持JavaScript 的瀏覽器,都必須遵守的安全策略,也是瀏覽器最基本的安全功能。

如果沒有處理過發(fā)起跨域請求,就算服務器接收到了,響應成功了瀏覽器也是會攔截的。

同源

指域名,協(xié)議,端口相同

目的

瀏覽器為了阻止惡意腳本獲取不同源上的的敏感信息。

跨域請求

然而在實際情況下跨域請求的場景也是存在的,解決方案有兩種:

  • JSONP

  • 響應頭設置“Access-Control-Allow-Origin”

Cookie

Cookie的讀取和發(fā)送也是必須遵循同源策略的。

雖說請求共享可以設置響應頭Access-Control-Allow-Credentials、Access-Control-Allow-Origin與Ajax請求屬性xhrFields: {withCredentials: true}進行解決,但是!

就算響應頭有set-cookie瀏覽器也是無法正常保存的。

SSO跨域解決方式

針對cookie認證,我唯一能找到的解決方案就是跳轉頁面。

具體步驟:

  • 認證中心登錄成功后,請求登錄中心接口獲得token

  • 攜帶token逐個跳轉到業(yè)務系統(tǒng)的中轉頁面。

  • 跳轉完成后,返回到認證中心登錄頁面進行引導。

  • ?PS:如果哪位朋友有更加好的方案,可以及時與我溝通,非常感謝

    實現(xiàn)方式

    登錄中心授權

    業(yè)務系統(tǒng)Token保存與注銷

    public class TokenController : Controller

    ? ? {

    ? ? ? ? public static TokenCookieOptions CookieOptions { get; set; }


    ? ? ? ? public IActionResult Authorization(string token, List<string> hostAuthorization = null)

    ? ? ? ? {

    ? ? ? ? ? ? if (CookieOptions == null || string.IsNullOrEmpty(token))

    ? ? ? ? ? ? ? ? return BadRequest();


    ? ? ? ? ? ? HttpContext.Response.Cookies.Append(CookieOptions.Name, token, new CookieOptions

    ? ? ? ? ? ? {

    ? ? ? ? ? ? ? ? Domain = CookieOptions.Domain,

    ? ? ? ? ? ? ? ? Expires = DateTimeOffset.UtcNow.Add(CookieOptions.Expires),

    ? ? ? ? ? ? ? ? HttpOnly = CookieOptions.HttpOnly,

    ? ? ? ? ? ? ? ? IsEssential = CookieOptions.IsEssential,

    ? ? ? ? ? ? ? ? MaxAge = CookieOptions.MaxAge,

    ? ? ? ? ? ? ? ? Path = CookieOptions.Path,

    ? ? ? ? ? ? ? ? SameSite = CookieOptions.SameSite

    ? ? ? ? ? ? });


    ? ? ? ? ? ? if (hostAuthorization.Any())

    ? ? ? ? ? ? ? ? hostAuthorization = hostAuthorization.Where(a => !a.Contains(HttpContext.Request.Host.Host)).ToList();


    ? ? ? ? ? ? if (!hostAuthorization.Any())

    ? ? ? ? ? ? ? ? hostAuthorization = new List<string> { "http://www.sso.com" };


    ? ? ? ? ? ? return View(new TokenViewData

    ? ? ? ? ? ? {

    ? ? ? ? ? ? ? ? Token = token,

    ? ? ? ? ? ? ? ? HostAuthorization = hostAuthorization

    ? ? ? ? ? ? });

    ? ? ? ? }


    ? ? ? ? public IActionResult Logout(List<string> hostAuthorization = null)

    ? ? ? ? {

    ? ? ? ? ? ? HttpContext.Response.Cookies.Delete(CookieOptions.Name);


    ? ? ? ? ? ? if (hostAuthorization.Any())

    ? ? ? ? ? ? ? ? hostAuthorization = hostAuthorization.Where(a => !a.Contains(HttpContext.Request.Host.Host)).ToList();


    ? ? ? ? ? ? if (!hostAuthorization.Any())

    ? ? ? ? ? ? ? ? hostAuthorization = new List<string> { "http://www.sso.com" };


    ? ? ? ? ? ? return View(new TokenViewData

    ? ? ? ? ? ? {

    ? ? ? ? ? ? ? ? HostAuthorization = hostAuthorization

    ? ? ? ? ? ? });

    ? ? ? ? }

    ? ? }

    Token生成與認證

    與同域的實現(xiàn)的方式一致。

    生成與認證是一對的,與之對應的就是AES的加密與解密。

    業(yè)務系統(tǒng)自主認證的方式,對于系統(tǒng)的代碼復用率與維護性都很低。如果想進行轉發(fā)到認證系統(tǒng)進行認證,可以對[Authorize]進行重寫。

    大致思路是:

    訪問業(yè)務系統(tǒng)時,由自定義的[Authorize]進行攔截

    獲取到Token設置到請求頭進行HttpPost到認證系統(tǒng)提供的/api/token/Authentication接口

    響應給業(yè)務系統(tǒng)如果是成功則繼續(xù)訪問,如果是失敗則401或者跳轉到登錄頁。

    結尾

    最近事情比較多,demo與文章寫的比較倉促,如果朋友們有更好的實現(xiàn)方式與建議,麻煩在下面評論反饋給我,先在此感謝。

    原文地址:?https://www.cnblogs.com/skychen1218/p/9805995.html


    .NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的.NET Core实践系列之SSO-跨域实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。