在你将现有的用户登录(Sign In)站点从ASP.NET迁移至ASP.NET Core时,你将面临这样一个问题——如何让ASP.NET与ASP.NET Core用户验证Cookie并存,让ASP.NET应用与ASP.NET Core应用分别使用各自的Cookie?因为ASP.NET用的是FormsAuthentication,ASP.NET Core用的是claims-based authentication,而且它们的加密算法不一样。

我们采取的解决方法是在ASP.NET Core中登录成功后,分别生成2个Cookie,同时发送给客户端。

生成ASP.NET Core的基于claims-based authentication的验证Cookie比较简单,示例代码如下:

var claimsIdentity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, loginName) }, "Basic");

var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);

await context.Authentication.SignInAsync(_cookieAuthOptions.AuthenticationScheme,

claimsPrincipal,

new AuthenticationProperties

{

IsPersistent = isPersistent,

ExpiresUtc = DateTimeOffset.Now.Add(_cookieAuthOptions.ExpireTimeSpan)

});

生成ASP.NET的基于FormsAuthentication的验证Cookie稍微麻烦些。

首先要用ASP.NET创建一个Web API站点,基于FormsAuthentication生成Cookie,示例代码如下:

public IHttpActionResult GetAuthCookie(string loginName, bool isPersistent)
{    var cookie = FormsAuthentication.GetAuthCookie(loginName, isPersistent);    return Json(new { cookie.Name, cookie.Value, cookie.Expires });
}

然后在ASP.NET Core登录站点中写一个Web API客户端获取Cookie,示例代码如下:

public class UserServiceAgent

{

private static readonly HttpClient _httpClient = new HttpClient();

public static async Task<Cookie> GetAuthCookie(string loginName, bool isPersistent)

{

var response = await _httpClient.GetAsync(url);

response.EnsureSuccessStatusCode();

return await response.Content.ReadAsAsync<Cookie>();

}

}

最后在ASP.NET Core登录站点的登录成功后的处理代码中专门向客户端发送ASP.NET FormsAuthentication的Cookie,示例代码如下:

var cookie = await _userServiceAgent.GetAuthCookie(loginName, isPersistent);

var options = new CookieOptions()

{

Domain = _cookieAuthOptions.CookieDomain,

HttpOnly = true

};

if (cookie.Expires > DateTime.Now)

{

options.Expires = cookie.Expires;

}

context.Response.Cookies.Append(cookie.Name, cookie.Value, options);

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

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

ASP.NET与ASP.NET Core用户验证Cookie并存解决方案相关推荐

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

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

  2. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  3. asp.net core中使用cookie身份验证

    背景 ASP.NET Core Identity 是一个完整的全功能身份验证提供程序,用于创建和维护登录名. 但是, cookie 不能使用基于的身份验证提供程序 ASP.NET Core Ident ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)

    系列目录 前言: WebAPI主要开放数据给手机APP,其他需要得知数据的系统,或者软件应用,所以移动端与系统的数据源往往是相通的. Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能, ...

  5. 第一百零一期:如何处理ASP .NET Core中的cookie?

    本文介绍了ASP.NET Core Web应用程序中利用cookie存储和检索针对特定用户的信息. 作者:布加迪编译 [51CTO.com快译]cookie是通常用于存储有关用户信息的一条数据,存储在 ...

  6. ASP.Net4中实现自定义的请求验证(转贴)

    1.        请求验证什么? 首先,请看下图: 上图中,是我们常见一个ASP.Net错误提示.由于ASP.Net默认情况是把请求验证(validateRequest)设置是为true,从而使得A ...

  7. asp.net2.0安全性(3)--验证与授权

    "验证"与"授权"是对网页资源安全管理的两道门. 验证(Authentication):检查用户是否是合法的用户.就像是网站大门口的保卫,服责验证使用的用户名和 ...

  8. ASP.NET2.0 验证cookie详解

    对于ASP.NET Forms验证,想必大家都非常的熟悉.然而,在控制用户的(过期时间)expired time的时候,你是否遇到过一些奇怪的现象呢?虽说只是一个小小的cookie,但是其中可能有很多 ...

  9. ASP.NET 5 and .NET Core RC 准备投入使用

    微软最近发布了.NET Core 和ASP.NET 5 的发布候选版本,可运行在Windows,OS X和linux上.微软宣布 这个发布版已准备好投入使用,并将会支持它.两个发布候选版本都是经过深思 ...

最新文章

  1. Open Sans字体兼容问题解决办法[font-face]
  2. mlxtend对sklearn进行扩展
  3. 虚幻4视频笔记002:精简StarterContent文件夹体积
  4. HTML5 实现手机拍照上传
  5. DeepBrain 李传丰:当语义技能商店应用达到百万量级的时候,语音交互时代才会真正成熟 | WARE 2017
  6. 依赖版本控制-pom文件介绍
  7. mysql ssh错误_通过SSH隧道连接时,MySQL访问被拒绝错误
  8. 【AI视野·今日CV 计算机视觉论文速览 第151期 part2】Tue, 6 Aug 2019
  9. Spring Cloud 之 Ribbon,Spring RestTemplate 调用服务使用Hystrix熔断器
  10. 从memcpy到memmove,内存函数拷贝与内存重叠问题(重点内容)
  11. 【CF870F】Paths 分类讨论+数学
  12. sqlserver中的循环遍历(普通循环和游标循环)(转载)
  13. stm32f072 necleo学习(一)
  14. 微信小程序轮播图(详细)
  15. 纸片人「活」了。Meta AI新作:只需几分钟,手绘小人有了灵魂
  16. 探索Franka Emika 机器人丨Powertool和Franka world的作用
  17. vue中用ref实现父子组件、孙组件、兄弟组件、非亲子孙组件互相调用的方法
  18. 数据管理的热点话题:数据资产、数据价值、数据驱动、数据管理和数字化转型
  19. 微信小程序抓包https抓包的血泪史
  20. Pi-puck的ROS开发之路

热门文章

  1. 第十一周项目3-程序的多文件组织
  2. 如何将 CSV 导入到 SqlServer 中 ?
  3. 在.NET 6 中如何创建和使用 HTTP 客户端 SDK
  4. BeetleX服务网关授权配置
  5. 如何通过 C# 自动捕获一个文件的变更?
  6. 面向.NET开发人员的Dapr——分布式世界
  7. 大牛领导单独找我聊了两句:搞框架的同时别忘了算法
  8. Dapr 已在塔架就位 将发射新一代微服务
  9. C# 客户端内存优化分析
  10. 动态IL织入框架Harmony简单入手