zoukankan      html  css  js  c++  java
  • .NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)

    .NET Core 2.0 新时代

    万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Standard 2.0的正式发布是.NET 开源跨平台的一个重大里程碑。

    .NET Core 2.0 SDK下载地址:https://www.microsoft.com/net/download/core#/sdk

    Visual Studio 2017 15.3下载地址:https://www.visualstudio.com/zh-hans/downloads/

    更新ASP.NET Core 项目中的目标框架

    更新ASP.NET Core Web项目中的Nuget依赖项

    备注:删除之前的 Microsoft.* 依赖项,使用 Microsoft.AspNetCore.All。

    .NET Core 2.0 更新Cookie中间件使用方法

    备注:我这边当前项目单独使用的Cookie中间件,未结合Identity使用。

    1:在ConfigureServices添加Cookie中间件,使用自定义Scheme(坑就在这里) 

    services.AddAuthentication(options=> {
                    options.DefaultChallengeScheme = CookieAuthenInfo.QwCmsWebCookieInstance;
                    options.DefaultSignInScheme = CookieAuthenInfo.QwCmsWebCookieInstance;
                    options.DefaultAuthenticateScheme = CookieAuthenInfo.QwCmsWebCookieInstance;
                })
                .AddCookie(CookieAuthenInfo.QwCmsWebCookieInstance, m =>
                {
                    m.LoginPath = new PathString("/Account/Login");
                    m.AccessDeniedPath = new PathString("/Account/Denied");
                    m.LogoutPath = new PathString("/Account/Logout");
                    m.Cookie.Path = "/";
                 });

    踩坑:报异常 No authenticationScheme was specified, and there was no DefaultChallengeScheme found.

    特别感谢Zonciu提供的帮助。

    2:在Configure使用Cookie中间件

     app.UseAuthentication();

    使用扩展类AuthenticationHttpContextExtensions

    引入命名空间

    using Microsoft.AspNetCore.Authentication;

    新的扩展方法

    使用方式

    //登录
    await HttpContext.SignInAsync(CookieAuthenInfo.QwCmsWebCookieInstance, userPrincipal,
          new AuthenticationProperties
          {
              ExpiresUtc = DateTime.UtcNow.AddHours(12),
              IsPersistent = true,
              AllowRefresh = false
          });
    
    //退出
    await HttpContext.SignOutAsync(CookieAuthenInfo.QwCmsWebCookieInstance); 

    AuthorizeAsync现在返回结果为AuthorizationResult

    新的扩展方法

    使用方式

    var result = await HttpContext.AuthenticateAsync("xxxx");
    if (result.Succeeded)
    {
        ......
    } 

    参考

    1:[Draft] Auth 2.0 Migration announcement #1310

    2:Migrating Authentication and Identity to ASP.NET Core 2.0

  • 相关阅读:
    C# 设计模式-状态模式
    C# 设计模式-备忘录模式
    C# 设计模式-命令模式
    本地易优安装总结
    视频自动添加字幕
    百度商桥安装
    百度统计
    模板
    百度地图API
    栅格布局的理解
  • 原文地址:https://www.cnblogs.com/piscesLoveCc/p/7366418.html
Copyright © 2011-2022 走看看