• [.Net Core]


    背景

    Asp.Net Core 项目升级至 2.x 版本后,Cookie 验证方式需要进行更新。

    升级前:.Net Core 1.x

    Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
    // Other Options ...
    // IMPORTANT: UseCookieAuthentication() MUST before UseMvc()
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationScheme = "MyCookieMiddlewareInstance",
            LoginPath = new PathString("/Home/Index/"),
            AccessDeniedPath = new PathString("/Home/AccessDenied/"),
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            CookiePath = "/"
        });
    
        // Add MVC to the request pipeline.
        app.UseMvc(routes =>
        {
            routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
        });
    }

    Login

    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Email, user.Email),
        new Claim(ClaimTypes.Name, user.Name),
        new Claim(ClaimTypes.Sid, Convert.ToString(user.Gid))
    };
    var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "AccountLogin"));
    var property = new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTime.UtcNow.AddHours(1) };
    await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal, property);
    return RedirectToAction(nameof(LoginController.Index), "Candidate");

    Logout

    HttpContext.Session.Clear();
    await HttpContext.Authentication.SignOutAsync("MyCookieMiddlewareInstance");
    return RedirectToAction(nameof(HomeController.Index), "Home");

    升级后:.Net Core 2.x

    Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication("MyCookieAuthenticationScheme")
                .AddCookie("MyCookieAuthenticationScheme", options => {
                    options.SlidingExpiration = false;
                    options.ExpireTimeSpan = TimeSpan.FromHours(1);
                    options.Cookie = new CookieBuilder { HttpOnly = true, Name = "MyCookie", Path = "/" };
                    options.LoginPath = "/Home/Index/";
                    options.AccessDeniedPath = "/Home/AccessDenied/";
                });
        services.AddMvc();
    // Other Options ... } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { // Other Options ...
    app.UseAuthentication();
    // Add MVC to the request pipeline. app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); }

    Login

    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Email, user.Email),
        new Claim(ClaimTypes.Name, user.Name),
        new Claim(ClaimTypes.Sid, Convert.ToString(user.Gid))
    };
    var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "AccountLogin"));
    await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal);
    return RedirectToAction(nameof(CandidateController.Index), "Candidate");

    Logout

    HttpContext.Session.Clear();
    await HttpContext.SignOutAsync("MyCookieAuthenticationScheme");
    return RedirectToAction(nameof(HomeController.Index), "Home");

    参考资料(了解更多细节

    https://www.cnblogs.com/tdfblog/p/aspnet-core-security-authentication-cookie.html

  • 相关阅读:
    iOS网络开发之AFNetworking
    自定义博客园样式
    win 7 和 winserver 2008 下,布署网站遇到的错误解决方法
    iOS开发--沙盒
    毫秒必争,前端网页性能最佳实践
    C#可扩展数组转变为String[]数组
    iOS 界面启动时,功能新特征显示
    批量导入数据到mssql数据库的
    MongoDB 工具助手类(.NET)
    Xcode 快捷键及代码格式化
  • 原文地址:https://www.cnblogs.com/jinzesudawei/p/8649915.html
Copyright © 2020-2023  润新知