zoukankan      html  css  js  c++  java
  • [.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

  • 相关阅读:
    T- SQL性能优化详解
    C# 路径
    sql2000无法打开1433端口及解决方法
    MySQL:创建、修改和删除表
    mysql 授权 打开全部
    Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
    asp.net 捕获全局未处理异常的几种方法
    无线路由器WDS设置方法图解_无线桥接设置
    100个直接可以拿来用的JavaScript实用功能代码片段
    ocx控件针对网页刷新和关闭分别进行区分处理
  • 原文地址:https://www.cnblogs.com/jinzesudawei/p/8649915.html
Copyright © 2011-2022 走看看