当前位置: 移动技术网 > IT编程>开发语言>.net > 详解ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

徐州招标,谚语,晋城五个人出名了

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网