• AspNetCore.Authentication


    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Authentication;
    using Microsoft.AspNetCore.Authentication.Cookies;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.DependencyInjection;
    using System.Collections.Generic;
    using System.Security.Claims;
    
    namespace Authentication
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseUrls("http://localhost:5000")
                    .UseStartup<Startup>();
        }
    
        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddAuthentication(options =>
                        {
                            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                            options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                        })
                        .AddCookie(options =>
                        {
                            options.LoginPath = "/Account/Login";
                        });
                services.AddMvc();
            }
    
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                    app.UseDeveloperExceptionPage();
                app.UseAuthentication();
                app.UseMvcWithDefaultRoute();
            }
        }
    }
    
    namespace Authentication.Controllers
    {
        [Authorize]
        public class HomeController : Controller
        {
            public IActionResult Index()
            {
                return View();
            }
        }
    
        public class AccountController : Controller
        {
            public IActionResult Login()
            {
                var claims = new List<Claim>
                {
                    new Claim(ClaimTypes.Name, "timi"),
                    new Claim(ClaimTypes.Role, "user")
                };
                var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
                return Ok();
            }
    
            public IActionResult Logout()
            {
                HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
                return Ok();
            }
        }
    }
    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Authentication.JwtBearer;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.IdentityModel.Tokens;
    using System;
    using System.Collections.Generic;
    using System.IdentityModel.Tokens.Jwt;
    using System.Security.Claims;
    using System.Text;
    
    namespace Authentication
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseUrls("http://localhost:5000")
                    .UseStartup<Startup>();
        }
    
        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddAuthentication(options =>
                        {
                            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                        })
                        .AddJwtBearer(options =>
                        {
                            options.TokenValidationParameters = new TokenValidationParameters
                            {
                                ValidIssuer = Settings.Issuer,
                                ValidAudience = Settings.Audience,
                                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Settings.Secret))
                            };
                            /* 自定义认证方式
                            options.SecurityTokenValidators.Clear();
                            options.SecurityTokenValidators.Add(new SecurityTokenValidator());
                            options.Events = new JwtBearerEvents
                            {
                                OnMessageReceived = (context) =>
                                {
                                    context.Token = context.Request.Headers["Token"].FirstOrDefault(); // context.Request.Query["token"]
                                    return Task.CompletedTask;
                                }
                            };
                            */
                        });
                services.AddMvc();
            }
    
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                    app.UseDeveloperExceptionPage();
                app.UseAuthentication();
                app.UseMvc();
            }
        }
    
        public class Settings
        {
            public const string Issuer = "http://localhost:5000";
            public const string Audience = "http://localhost:5000";
            public const string Secret = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";
        }
    
        public class SecurityTokenValidator : ISecurityTokenValidator
        {
            public bool CanValidateToken => true;
    
            public int MaximumTokenSizeInBytes { get; set; }
    
            public bool CanReadToken(string securityToken)
            {
                return true;
            }
    
            public ClaimsPrincipal ValidateToken(string securityToken, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
            {
                validatedToken = null;
                var claimsIdentity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
                if (securityToken == "token")
                {
                    claimsIdentity.AddClaim(new Claim(ClaimTypes.Name, "timi"));
                    claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "user"));
                }
                var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                return claimsPrincipal;
            }
        }
    }
    
    namespace Authentication.Controllers
    {
        [Authorize]
        [Route("Resource")]
        public class ResourceController : ControllerBase
        {
            public IActionResult Get()
            {
                return Ok();
            }
        }
    
        [Route("Authenticate")]
        public class AuthenticateController : ControllerBase
        {
            public IActionResult Get()
            {
                var claims = new List<Claim>
                {
                    new Claim(ClaimTypes.Name, "timi"),
                    new Claim(ClaimTypes.Role, "user")
                };
                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Settings.Secret));
                var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
                var token = new JwtSecurityToken(Settings.Issuer, Settings.Audience, claims, DateTime.Now, DateTime.Now.AddMinutes(30), credentials);
                return Ok(new JwtSecurityTokenHandler().WriteToken(token));
            }
        }
    }
  • 相关阅读:
    Sun开发的JINI技术在网络中的应用
    让memcached和mysql更好的工作
    Nginx+Tomcat+memcached负载均衡实现session共享
    Nginx 简单的负载均衡配置示例
    数据库sharding(scale up to scale out)
    docker专题(2):docker常用管理命令(上)
    UMDF
    编程精粹:编写高质量的C语言代码———笔记一
    子矩阵中共享1的最长对角线
    Print the numbers between 30 to 3000.
  • 原文地址:https://www.cnblogs.com/xiaowangzhi/p/10514291.html
Copyright © 2020-2023  润新知