详解ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

 更新时间:2017年02月15日 17:05:25   作者:dudu  
本篇文章主要介绍了详解ASP.NET与ASP.NET Core用户验证Cookie并存解决方案 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

在你将现有的用户登录(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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • ASP.NET Core中MVC模式实现路由一

    ASP.NET Core中MVC模式实现路由一

    这篇文章介绍了ASP.NET Core中MVC模式实现路由的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • ASP.NET Core使用AutoMapper实现实体映射

    ASP.NET Core使用AutoMapper实现实体映射

    本文详细讲解了ASP.NET Core使用AutoMapper实现实体映射的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • IdentityServer4实现.Net Core API接口权限认证(快速入门)

    IdentityServer4实现.Net Core API接口权限认证(快速入门)

    这篇文章主要介绍了IdentityServer4实现.Net Core API接口权限认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • .net indexOf(String.indexOf 方法)

    .net indexOf(String.indexOf 方法)

    字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回 -1
    2012-10-10
  • 基于Dapper实现分页效果 支持筛选、排序、结果集总数等

    基于Dapper实现分页效果 支持筛选、排序、结果集总数等

    这篇文章主要为大家详细介绍了基于Dapper实现分页效果,支持筛选,排序,结果集总数,多表查询,非存储过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Asp.net获取客户端IP常见代码存在的伪造IP问题探讨

    Asp.net获取客户端IP常见代码存在的伪造IP问题探讨

    如果某个网站是通过下面的代码获取IP,那么我们只要在Header里随意设置HTTP_VIA和X_FORWARDED_FOR,就可以达到伪造IP的目的
    2013-06-06
  • jQuery+Ajax用户登录功能的实现

    jQuery+Ajax用户登录功能的实现

    前几天把jbox源码修改成仿QQ空间模拟窗口后发现有很多人在关注。今天就贴一下我利用该模拟窗口实现的用户登录功能的代码。
    2009-11-11
  • ASP.NET Core按用户等级授权的方法

    ASP.NET Core按用户等级授权的方法

    这篇文章主要介绍了ASP.NET Core按用户等级授权,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • .NetCore实现上传多文件的示例详解

    .NetCore实现上传多文件的示例详解

    本章和大家分享的是.NetCore的MVC框架上传文件的示例,主要讲的内容有:form方式提交上传,ajax上传,ajax提交+上传进度效果,Task并行处理+ajax提交+上传进度,对大家非常有帮助,感兴趣的朋友跟随小编一起学习吧
    2017-04-04
  • ASP.NET取得所有颜色值示例

    ASP.NET取得所有颜色值示例

    这篇文章主要介绍了ASP.NET取得所有颜色值的方法,需要的朋友可以参考下
    2014-03-03

最新评论