DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie

这是这两天ASP.NET Core迁移中遇到的一个问题。2个ASP.NET Core站点(对应于2个不同的ASP.NET Core Web应用程序),2个站点都可以登录,但在其中任1个站点登录后,在当前站点处于登录状态,访问另外1个站点却处于未登录状态。

开始以为是CookieAuthenticationOptions的设置不一致引起的,检查代码后确认AuthenticationScheme,CookieName,CookieDomain都是一样的。

app.UseCookieAuthentication(new CookieAuthenticationOptions
{CookieName = ".AspNetCore.Cookies",CookieDomain = ".cnblogs.com"});

(AuthenticationScheme的默认值是"Cookies")

之后怀疑是DataProtection的密钥不一致引起的,我们用的是同一个阿里云redis实例存储密钥,存储方式上不会造成不一致。

if (Environment.IsDevelopment())

{

    services.AddDistributedMemoryCache();

}

else

{

    services.AddDistributedServiceStackRedisCache(options =>

    {

        Configuration.GetSection("redis").Bind(options);

        //Workaround for deadlock when resolving host name

        IPAddress ip;

        if (!IPAddress.TryParse(options.Host, out ip))

        {

            options.Host = Dns.GetHostAddressesAsync(options.Host)

            .Result.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork).ToString();

        }

    });

}

services.AddDataProtection().PersistKeysToDistributedStore();

为了进一步确认密钥是否是一样的,修改了 DataProtection.DistributedStore 的源代码将密钥打印在控制台,运行后确认2个站点用的密钥是一样的。

public IReadOnlyCollection<XElement> GetAllElements()

{

    var data = _cache.GetString(_key);

    Console.WriteLine(data);

    if (!string.IsNullOrEmpty(data))

    {

        return XDocument.Parse(data).Root.Elements().ToList().AsReadOnly();

    }

    else

    {

        return new List<XElement>().AsReadOnly();

    }

}

后来突然想到 services.AddDataProtection() 是不是有什么配置选项?F12之后发现果然有个DataProtectionOptions:

public static IDataProtectionBuilder AddDataProtection(this IServiceCollection services, Action<DataProtectionOptions> setupAction);

继续F12发现DataProtectionOptions只有1个属性ApplicationDiscriminator,点开它的注释后,问题的答案跃然而出:

//

// Summary:

//     Provides global options for the Data Protection system.

public class DataProtectionOptions

{

    public DataProtectionOptions();


    //

    // Summary:

    //     An identifier that uniquely discriminates this application from all other applications

    //     on the machine. The discriminator value is implicitly included in all protected

    //     payloads generated by the data protection system to isolate multiple logical

    //     applications that all happen to be using the same key material.

    //

    // Remarks:

    //     If two different applications need to share protected payloads, they should ensure

    //     that this property is set to the same value across both applications.

    public string ApplicationDiscriminator { get; set; }

}

原来不同的ASP.NET Core应用程序要使用同样的加解密方式,除了共享密钥,还要设置同样的ApplicationDiscriminator。

添加如下的代码后问题立马解决。

services.AddDataProtection(options => options.ApplicationDiscriminator = "cnblogs.com");


原文地址:http://www.cnblogs.com/dudu/p/6495951.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis+spring报错PropertyAccessException 1

男生关注会更帅&#xff0c;女生关注会更美&#xff01;mybatisspring报错PropertyAccessException 1: org.springframework.beans.MethodInvocationExceptionorg.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource’ defined…

java synchronized 使用_Java中synchronized的使用实例

Java中synchronized的使用实例synchronized关键字&#xff0c;代表这个方法加锁&#xff0c;相当于不管哪一个线程(例如线程A)&#xff0c;运行到这个方法时&#xff0c;都要检查有没有其它线程B(或者C、D等)正在用这个方法&#xff0c;若有则要等正在使用synchronized方法的线…

字符串暴力匹配算法+思路分析

思路分析 代码实现 package com.atguigu.kmp;/*** 创建人 wdl* 创建时间 2021/4/4* 描述*/ public class ViolenceMatch {public static void main(String[] args) {//测试暴力匹配算法String str1 "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好";String str2&quo…

art-template入门(五)之模板变量

转载自 art-template模板变量 模板变量 template.defaults.imports 模板通过 $imports 可以访问到模板外部的全局变量与导入的变量。 导入变量 template.defaults.imports.log console.log;<% $imports.log(hello world) %>内置变量清单 $data 传入模板的数据$imp…

springmvc中报错Request processing failed;

今天在整个ssm的时候出现了个低级错误&#xff0c;找了好久才找出来&#xff0c;在发现真理的那一刻&#xff0c;我都有死的冲动了。 报错如下&#xff1a; HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Optional int …

在.NET Core 上运行的 WordPress

在.NET Core 上运行的 WordPress,无需安装PHP既可跨平台运行WordPress。 在Peachpie中实现PHP所需的功能数月后&#xff0c;现在终于可以运行一个真实的应用程序&#xff1a;WordPress。 本文是基于Peachpie https://github.com/iolevel/peachpie Peachpie是一个基于Microsof…

java for遍历hashmap_Java 使用for和while循环遍历HashMap的方法及示例代码

1&#xff64;使用entrySet()遍历1) 使用while实现public static void printMap(Map mp) {Iterator it mp.entrySet().iterator();while (it.hasNext()) {Map.Entry pair (Map.Entry)it.next();System.out.println(pair.getKey() " " pair.getValue());it.remov…

art-template入门(六)之解析规则

转载自 art-template解析规则 解析规则 template.defaults.rules art-template 可以自定义模板解析规则&#xff0c;默认配置了原始语法与标准语法。 修改界定符 // 原始语法的界定符规则 template.defaults.rules[0].test /<%(#?)((?:|#|[-])?)[ \t]*([\w\W]*?)[…

求集合中的公共元素

package com.atguigu.TEST;import javax.swing.plaf.basic.BasicScrollPaneUI; import java.util.HashSet;/*** 创建人 wdl* 创建时间 2021/4/4* 描述*/ public class Test {public static void main(String[] args) {HashSet<String> hashSet1 new HashSet<>();H…

mybatis使用全注解的方式案例(包含一对多关系映射)

前面我写过ssh&#xff1a;ssh(SpringSpring mvchibernate)简单增删改查案例 和ssm&#xff1a;ssm(SpringSpring mvcmybatis)的案例&#xff0c;需要了解的可以去看看&#xff0c;今天我写了一下ssm(springspringmvcmybatis)全注解的方式又重新写了一遍两表增删改查的案例&…

Visual Studio 2017全面上市

自从1997年第一版发布的20年以来&#xff0c;微软Visual Studio开发工具一向以易学易用、功能齐全而闻名&#xff0c;帮助开发者以简驭繁&#xff0c;即使面对越来越快速的交付压力&#xff0c;也能大幅提高生产力&#xff0c;好整以暇。对于Visual Studio的使用者而言&#xf…

art-template入门(七)之压缩页面

转载自 art-template压缩页面 压缩页面 template.defaults.minimize art-template 内建的压缩器可以压缩 HTML、JS、CSS&#xff0c;它在编译阶段运行&#xff0c;因此完全不影响渲染速度&#xff0c;并且能够加快网络传输。 开启 template.defaults.minimize true;配置 …

java getimage_Java ImageView.getImage方法代码示例

import javafx.scene.image.ImageView; //导入方法依赖的package包/类FXThreadprivate static void updateListener(NotNull final Node node, NotNull final ImageView imageView,NotNull final ReadOnlyBooleanProperty condition,NotNull final Object listenerKey, NotNull…

Visual Studio 2017发布会:黄金时代的家族聚会

美国时间三月七日&#xff08;北京2017年3月8日&#xff09;&#xff0c;微软正式发布了Visual Studio 2017&#xff0c;自己旗舰开发工具的最新版本。同日发布的主要产品还有 .NET Core Tooling 1.0.NET Core 微服务实例Visual Studio for Mac Preview 4Visual Studio Mobile …

java开发可以转什么软件有哪些_转行开发软件Java编程必须会什么

原标题&#xff1a;转行开发软件Java编程必须会什么要想开发软&#xff0c;Java编程必须会什么&#xff1f;最起码的就是逻辑思维要好&#xff0c;只要不是特别差就没有什么问题。数学是相对比较能够体现出一个人的逻辑思维如何。先想想自己以前上学的时候&#xff0c;数学成绩…

art-template入门(八)之选项

转载自 art-template选项 template.defaults // 模板名 filename: null,// 模板语法规则列表 rules: [nativeRule, artRule],// 是否开启对模板输出语句自动编码功能。为 false 则关闭编码输出功能 // escape 可以防范 XSS 攻击 escape: true,// 启动模板引擎调试模式。如果为…

2017蓝桥杯省赛---java---B---2(纸牌三角形)

题目描述 纸牌三角形 思路分析 全排列特殊去重 ans/6 代码实现 package com.atguigu.TEST;class Main{public static int[] a{1,2,3,4,5,6,7,8,9};public static int ans;public static void f(int k){if(k9){int x1 a[0] a[1] a[2] a[3];int x2 a[3] a[4] a[5] …

微软开源基于云的生理学研究工具

Bio Model Analyzer是一款微软基于云的生理学研究工具&#xff0c;可以用于对化细胞交互和通信进行建模&#xff0c;现已经在GitHub上开源&#xff0c;在MIT许可之下。 研究人员使用Bio Model Analyzer (BMA) 去创建计算机模型&#xff0c;该模型可以比较健康和不健康细胞内的处…

mysql group和order_mysql 用 group by 和 order by同时使用

首先,这是不可能实现的mysql的查询的顺序select -> from-> where->group by->having->order by.但mysql的解析器执行顺序:from-> where->group by->having->select->order by.所以,从执行的流程来看,是先group by 然后在 order by.order by拿到的…

art-template入门(九)之API

API template(filename, content) 根据模板名渲染模板。 参数&#xff1a; {string} filename{Object,string} content返回值&#xff1a; 如果 content 为 Object&#xff0c;则渲染模板并返回 string如果 content 为 string&#xff0c;则编译模板并返回 functionvar html…