前言

.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中。

  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

ASP.NET Core 2.0 多应用实现Cookie共享的更多相关文章

  1. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  2. .NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布

    众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...

  3. ASP.NET Core 1.0 开发记录

    官方资料: https://github.com/dotnet/core https://docs.microsoft.com/en-us/aspnet/core https://docs.micro ...

  4. ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录

    升级文档: Migrating from DNX to .NET Core Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2 Migrating ...

  5. ASP.NET 5 改名 ASP.NET Core 1.0

    今天,Scott Hanselman在其博客上宣布<ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0>, ...

  6. ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

    Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...

  7. 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)

    上一篇:<坎坷路:ASP.NET 5 Identity 身份验证(上集)> ASP.NET Core 1.0 什么鬼?它是 ASP.NET vNext,也是 ASP.NET 5,以后也可能 ...

  8. vs2015 已经支持开发asp .net core 1.0 rc2 程序了

    vs2015 已经支持开发asp .net core 1.0 rc2 程序了 http://mp.weixin.qq.com/s?__biz=MzI0MzM1ODczOQ==&mid=2247 ...

  9. [转]Writing Custom Middleware in ASP.NET Core 1.0

    本文转自:https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ One of the new ...

随机推荐

  1. BUG YII2.0 $ is not defined

    来源:https://www.cnblogs.com/attitudeY/p/6279985.html BUG描述:$ is not defined 没有加载jquery成功 原因:Yii2.0将JS ...

  2. Python-IDLE实现清屏

    1.将下面文件复制到命名为ClearWindow.py的文件下,移动到 …Python\Python36-32\Lib\idlelib下. ############################## ...

  3. java常用设计模式十二:命令模式

    一.概述 定义:命令(Command)模式又叫作动作(Action)模式或事务(Transaction)模式,是一种对象的行为模式.将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对 ...

  4. C++ 中 new 操作符内幕:new operator、operator new、placement new

    一.new 操作符(new operator) 人们有时好像喜欢有益使C++语言的术语难以理解.比方说new操作符(new operator)和operator new的差别. 当你写这种代码: st ...

  5. Apache hadoop安装配置

    1.网络中继更改问题 命令:   vi /etc/sysconfig/network-scripts/ifcfg-eth0 需要修改的代码 DEVICE=eth0 HWADDR=00:0C:29:11 ...

  6. Silverlight子窗口(ChildWindow)传递参数到父窗口演示

    在企业级项目中,子窗口(ChildWindow)是一个常用控件,其展示方式是以弹出窗口来显示信息. 这里我将演示,子窗口传递参数到父窗口的方法.由于我的开发环境都是英文环境,所以部分中文可能显示不正常 ...

  7. MIT Molecular Biology 笔记2 DNA的突变和修复

    视频  https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...

  8. golang web sample

    一.学习想法 用两天的时间学习golang,但这次是先不看书的,直接写代码先. 我们常习惯边看书边学习写代码,但发现过程是比较缓慢的,所以我就先想写代码, 边写边查.就我们所知,web app一般是基 ...

  9. python的基础socket知识

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 代码意思if __name__ == '__main__':是主文件的话就先执行main函数, ...

  10. SSM_CRUD新手练习(1)创建项目

    最近看了SSM框架,网上找了个入门视频的比较简单的小项目熟悉一下框架.现在把整个过程记录下来. 1.创建Maven工程,注意我们选择的是simple project就够了. 这样我们的Maven项目就 ...