天天看點

ASP.NET Core 2.0 多應用實作Cookie共享

ASP.NET Core 2.0 多應用實作Cookie共享

.NET Core 2.0 釋出之後,在Authentication中間件部分,相關API有不少改動(官方文檔),本文主要講的就是實作應用Cookie共享,對Cookie中間件使用不了解的可以去檢視官方文檔,希望本文對大家有一些幫助。

前言

ASP.NET Core 2.0 資料保護(Data Protection)

 在一些需要負載場景,需要Cookie共享,需要對Cookie進行加密和解密操作,那麼我們需要實作一些方法來對Data Protection進行分布式配置,本文主要介紹使用IXmlRepository接口。

IXmlRepository接口主要提供了持久化以及檢索XML的方法,它隻要提供了兩個API:

  //檢索所有存在的加密的xml檔案

IReadOnlyCollection<XElement> GetAllElements();

ASP.NET Core 2.0 多應用實作Cookie共享

  //存儲data protection xml

void StoreElement(XElement element, string friendlyName);

ASP.NET Core 2.0 多應用實作Cookie共享

IXmlRepository自定義實作

 備注:我這裡隻是簡單實作讀取應用根目錄的Key檔案,大家可以自定義存儲到DB或者Redis中。

public class XmlRepository:IXmlRepository
    {
        private readonly string _KeyContentPath = "";

        public XmlRepository()
        {
            _KeyContentPath = Path.Combine(Directory.GetCurrentDirectory(),"ShareKeys", "key.xml");
        }

        public IReadOnlyCollection<XElement> GetAllElements()
        {
            //加載key資訊
            var elements = new List<XElement>() { XElement.Load(_KeyContentPath) };
            return elements;
        }

        public void StoreElement(XElement element, string friendlyName)
        {
            //本文忽略實作存儲功能,因為我們隻需要讀取已存在的Key即可
        }
    }
      

注意:每個應用站點下的Key檔案存放位置和内容必須一緻,本文的Key放在了應用根目錄下面的“ShareKeys”檔案夾中,檔案為key.xml

ASP.NET Core 2.0 實作Cookie共享

Cookie共享又分為應用部署在同一機器和應用部署在不同機器或Docker

應用部署在同一機器上

 這種部署實作Cookie共享是比較簡單的,隻需設定每個應用中Data Protection中間件PersistKeys的方式相同即可,推薦使用PersistKeysToFileSystem

services.AddDataProtection()
          .SetApplicationName("cookieshare")
          //windows、Linux、macOS 下可以使用此種方式 儲存到檔案系統
          .PersistKeysToFileSystem(new System.IO.DirectoryInfo("C:\\share_keys"));      

應用部署在同不同機器上或Docker中

 這種部署實作Cookie共享需要借助上面我們實作的XmlRepository來進行設定,具體方式如下。

services.AddDataProtection()
          .SetApplicationName("cookieshare")
          .AddKeyManagementOptions(options =>
          {
              //配置自定義XmlRepository 
              options.XmlRepository = new XmlRepository();
          });
      

Make .NET Great Again

ASP.NET CORE 2.0 API雖然有一些改動,就整體而言我覺得是越來越好了,總有一些東西需要改變,我們需要去适應,并努力完善整個社群環境,而不是抱怨。如果大家覺得有用,請點一個贊,您的認可是我最大的動力。

示例源碼:https://github.com/myloveCc/CookieShare

參考文檔

 http://www.cnblogs.com/savorboard/p/dotnetcore-data-protected-farm.html

 http://www.cnblogs.com/dudu/p/6495951.html

 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore1x

 https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?tabs=aspnetcore1x

繼續閱讀