.NET Core 从1.1升级到2.0记录(Cookie中间件踩坑) .NET Core 2.0 新时代 更新ASP.NET Core 项目中的目标框架 更新ASP.NET Core Web项目中的Nuget依赖项 .NET Core 2.0 更新Cookie中间件使用方法 使用扩展类AuthenticationHttpContextExtensions AuthorizeAsync现在返回结果为AuthorizationResult 参考

万众瞩目的.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 项目中的目标框架

.NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)
.NET Core 2.0 新时代
更新ASP.NET Core 项目中的目标框架
更新ASP.NET Core Web项目中的Nuget依赖项
.NET Core 2.0 更新Cookie中间件使用方法
使用扩展类AuthenticationHttpContextExtensions
AuthorizeAsync现在返回结果为AuthorizationResult
参考

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

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

.NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)
.NET Core 2.0 新时代
更新ASP.NET Core 项目中的目标框架
更新ASP.NET Core Web项目中的Nuget依赖项
.NET Core 2.0 更新Cookie中间件使用方法
使用扩展类AuthenticationHttpContextExtensions
AuthorizeAsync现在返回结果为AuthorizationResult
参考

.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提供的帮助。

.NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)
.NET Core 2.0 新时代
更新ASP.NET Core 项目中的目标框架
更新ASP.NET Core Web项目中的Nuget依赖项
.NET Core 2.0 更新Cookie中间件使用方法
使用扩展类AuthenticationHttpContextExtensions
AuthorizeAsync现在返回结果为AuthorizationResult
参考

2:在Configure使用Cookie中间件

 app.UseAuthentication();

使用扩展类AuthenticationHttpContextExtensions

引入命名空间

using Microsoft.AspNetCore.Authentication;

新的扩展方法

.NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)
.NET Core 2.0 新时代
更新ASP.NET Core 项目中的目标框架
更新ASP.NET Core Web项目中的Nuget依赖项
.NET Core 2.0 更新Cookie中间件使用方法
使用扩展类AuthenticationHttpContextExtensions
AuthorizeAsync现在返回结果为AuthorizationResult
参考

使用方式

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

//退出
await HttpContext.SignOutAsync(CookieAuthenInfo.QwCmsWebCookieInstance); 

AuthorizeAsync现在返回结果为AuthorizationResult

新的扩展方法

.NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)
.NET Core 2.0 新时代
更新ASP.NET Core 项目中的目标框架
更新ASP.NET Core Web项目中的Nuget依赖项
.NET Core 2.0 更新Cookie中间件使用方法
使用扩展类AuthenticationHttpContextExtensions
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