using coreapiauth; using coreapiauth.TestWebApi.AuthCenter.Utility; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System.Text;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); //注入JWT服务 builder.Services.AddScoped<IJwtService, JwtService>();
#region 注册JWT鉴权 var issuer = "study"; //Configuration["issuer"]; var audience = "lozn"; //Configuration["audience"]; var securityKey = "4A9A70D2-B8AD-42E1-B002-553BDEF4E76F";// Configuration["SecurityKey"];
public string GetToken(string name) { /** * Claims(Payload) * Claims包含了一些跟这个token有关的重要信息。JWT标准规定的字段: * * iss: The issuer of the token, 签发人 * sub: The subject of the token, 主题 * exp: Expiration Time. 过期时间(Unix时间戳格式) * iat: Issued At. 签发时间(Unix时间戳格式) * jti: JWT ID. 编号 * aud: audience. 受众 * nbf: Not Before. 生效时间 * * 除了规定的字段外,可以包含其他任何JSON兼容的字段。 * */ var claims = new[] { new Claim(ClaimTypes.Name, name), new Claim("NickName", "NetCore"), new Claim("Role", "Administrator") };
if (_configuration["SecurityKey"] == null) { throw new Exception("please config SecurityKey issuer audience at appsettings.json"); }
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecurityKey"])); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken( issuer: _configuration["issuer"], //签发人 audience: _configuration["audience"], claims: claims, expires: DateTime.Now.AddMinutes(20), //20分钟有效期 signingCredentials: credentials); var tokenStr = new JwtSecurityTokenHandler().WriteToken(token); return tokenStr; }
System.InvalidOperationException:“EndpointRoutingMiddleware matches endpoints setup by EndpointMiddleware and so must be added to the request execution pipeline before EndpointMiddleware. Please add EndpointRoutingMiddleware by calling 'IApplicationBuilder.UseRouting' inside the call to 'Configure(...)' in the application startup code.”
using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.IdentityModel.Tokens;
// ...
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_security_key_here")); var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new[] { new Claim("sub", "1234567890"), new Claim("name", "John Doe"), new Claim("roles", "admin,user") };
var token = new JwtSecurityToken( issuer: "your_issuer_here", audience: "your_audience_here", claims: claims, expires: DateTime.UtcNow.AddDays(7), signingCredentials: signingCredentials );
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
// 获取当前HttpContext var httpContext = new HttpContextAccessor().HttpContext;
// 检索名为"nickname"的声明的值 var nicknameClaim = httpContext.User.Claims.FirstOrDefault(c => c.Type == "nickname");
if (nicknameClaim != null) { var nickname = nicknameClaim.Value; // Do something with the nickname... } else { // The user does not have a "nickname" claim }