1. 程式人生 > >ASP.NET Core Authentication系列(四)基於Cookie實現多應用間單點登入(SSO)

ASP.NET Core Authentication系列(四)基於Cookie實現多應用間單點登入(SSO)

前言 === 本系列前三篇文章分別從ASP\.NET Core認證的三個重要概念,到如何實現最簡單的登入、登出和認證,再到如何配置Cookie 選項,來介紹如何使用ASP\.NET Core認證。感興趣的可以瞭解一下。 - [ASP.NET Core Authentication系列(一)理解Claim, ClaimsIdentity, ClaimsPrincipal](https://www.cnblogs.com/liang24/p/13910368.html) - [ASP.NET Core Authentication系列(二)實現認證、登入和登出](https://www.cnblogs.com/liang24/p/13912695.html) - [ASP.NET Core Authentication系列(三)Cookie選項](https://www.cnblogs.com/liang24/p/13919397.html) 這三篇文章都是從單應用角度來介紹如何使用ASP\.NET Core認證,但是在實際開發中,往往都是多應用、分散式部署的,僅通過上面的內容沒辦法直接應用到多應用上。例如有3個應用,分別對應PC端、移動端和服務端,假設它們的域名分別為www.91suke.com,m.91suke.com以及service.91suke.com,如何讓這三個應用都共享認證。 本文將介紹如何通過共享授權Cookie來實現多應用間單點登入(SSO)。 原始碼下載地址:[https://github.com/liang24/SSO](https://github.com/liang24/SSO) 如何實現 === 前面我們已經解決了如何使用Cookie來實現認證功能,要實現共享授權Cookie還需要解決以下兩個問題: 1. Cookie共享 2. Cookie的認證票據的解析 第一個問題比較簡單,只要設定Cookie的域為根域,其他子域都能獲得這個Cookie。 ```csharp services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.Cookie.Name = "TestCookie"; //設定統一的Cookie名稱 options.Cookie.Domain = ".91suke.com"; //設定Cookie的域為根域,這樣所有子域都可以發現這個Cookie }); ``` 第二個問題主要是讓多個應用共用解析演算法,在ASP\.NET Core裡是通過`services.AddDataProtection`配置資料加密儲存方式。資料加密配置儲存方式現階段ASP\.NET Core支援: - 儲存到檔案:PersistKeysToFileSystem - 儲存到資料庫:PersistKeysToD