asp.net-mvc – OWIN使用相同的MachineKey在ASP.NET MVC和Webforms应用程序之间共享cookie共享

我有一个遗留的webforms应用程序,正在构建一个新的MVC版本来取代它.两者都需要并排运行一段时间,我需要单点登录才能工作.以前,用户通过webforms应用程序登录,我成功地设置了表单身份验证,以便MVC应用程序可以通过cookie进行身份验证.

现在,新的登录表单已在MVC应用程序中完成,现在需要用户从这些表单登录. MVC应用程序使用Identity 2.x和OWIN.我最初尝试配置OWIN cookie以匹配旧版webforms应用程序中的设置,但无法让webforms应用程序读取cookie并验证用户身份.

从那时起,我决定将Indentity 2.x和OWIN安装到webforms应用程序中.我已将设置设置为相同.到期时间为30分钟,域名为“”,路径为“/”.我可以看到从MVC应用程序生成的cookie,但它没有被webforms应用程序选中.我一直收到拒绝访问的消息.

app.UseCookieAuthentication(new CookieAuthenticationoptions
        {
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,CookieName = Settings.Default.CookieName,CookiePath = Settings.Default.CookiePath,CookieDomain = Settings.Default.CookieDomain,LoginPath = new PathString(Settings.Default.CookieLoginPath),ReturnUrlParameter = Settings.Default.CookieReturnUrl,ExpireTimeSpan = Settings.Default.CookieExpireTimeSpan,SlidingExpiration = Settings.Default.CookieSlidingExpiration,Provider = new CookieAuthenticationProvider
            {
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager,ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),regenerateIdentity: (manager,user) => user.GenerateUserIdentityAsync(manager))
            }
        });

我已经将机器密钥设置(以前用于表单身份验证)保持不变.但我删除了两个配置文件中的表单身份验证.

我是否错误配置了某些内容,或者是否需要更多配置才能在具有相同机器密钥的应用程序之间共享OWIN cookie?

UPDATE

>使用个人用户帐户创建了一个新的webforms应用程序.
>添加了MachineKey
>更改了MVC应用程序的配置标准
设置(复制新项目)

新的webforms应用程序列出了cookie但仍未对用户进行身份验证.

UPDATE
见下面的答案.

解决方法

在创建了两个新的应用程序并使其工作之后我开始使用基线并从那里开始向后工作,直到我实现了应用程序之间单点登录的目标.我发现了很多东西,包括

> app for之间的单点登录不需要MachineKey
4.5及以上. < httpRuntime targetFramework =“4.5”/>就是你所需要的.
>关闭表单身份验证
>最重要的是,不要尝试通过从基础项目复制手动集成Identity 2.x和OWIN,因为您可能会错过命名空间或重要文件.该项目将建立和运行,并在你试图找到你错过的东西时字面上推动你疯狂.使用nuget包并删除您不需要的内容.

所以最后我确实需要将Identity 2.x和OWIN添加到我的遗留webforms应用程序中,基本上升级到4.5中的新身份验证管道以使其工作.

希望这篇文章能帮助节省一些宝贵的时间和精力.

重要更新:
尝试在IIS中部署时,即使您没有在配置中指定任何计算机密钥(并且在本地工作),它在部署时也不起作用.最后,我使用MVC应用程序作为父项,将旧版webforms应用程序用作子项,这要求父应用程序具有以下配置;

<machineKey decryptionKey="AutoGenerate" validationKey="AutoGenerate" />

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....