ASP.NET Core 2.0 多应用实现Cookie共享_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > ASP.NET Core 2.0 多应用实现Cookie共享

ASP.NET Core 2.0 多应用实现Cookie共享

 2017/8/23 16:08:45  雨~桐  程序员俱乐部  我要评论(0)
  • 摘要:前言.NETCore2.0发布之后,在Authentication中间件部分,相关API有不少改动(官方文档),本文主要讲的就是实现应用Cookie共享,对Cookie中间件使用不了解的可以去查看官方文档,希望本文对大家有一些帮助。ASP.NETCore2.0数据保护(DataProtection)在一些需要负载场景,需要Cookie共享,需要对Cookie进行加密和解密操作,那么我们需要实现一些方法来对DataProtection进行分布式配置
  • 标签:.net ASP.NET 实现 net 应用 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();

  //存储data protection xml

void StoreElement(XElement element, string friendlyName);

IXmlRepository自定义实现

 备注:我这里只是简单实现读取应用根目录的Key文件,大家可以自定义存储到DB或者Redis中。

class="brush:csharp;gutter:true;">  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 Greate 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

 

上一篇: 特斯拉Model X在加速赛中击败兰博基尼Aventador 下一篇: 没有下一篇了!
发表评论
用户名: 匿名