使用JSW
先在ConfigureServices中加入:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyBlog.WebApi", Version = "v1" });
#region Swagger使用鉴权组件
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Description = "直接在下框中输入Bearer {token}(注意两者之间是一个空格)",
Name = "Authorization",
BearerFormat = "JWT",
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference=new OpenApiReference
{
Type=ReferenceType.SecurityScheme,
Id="Bearer"
}
},
new string[] {}
}
});
#endregion
});
AddIOC(services);
AddCustomJWT(services);
然后在Configure中加入 鉴权
app.UseAuthentication();
下面展示一些 内联代码片
。
public IServiceCollection AddCustomJWT( IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VF")),
ValidateIssuer = true,
ValidIssuer = "http://localhost:6060",
ValidateAudience = true,
ValidAudience = "http://localhost:5000",
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(60)
};
});
return services;
}
获取Token
下面展示一些 内联代码片
。
public async Task<BaseResponse<RequestUserModel>> Authorize(string Name, string Password)
{
string pwd = MD5Helper.MD5Encrypt32(Password);
//数据校验
var result = await _userService.Get(Name, pwd);
RequestUserModel requestUserModel = new RequestUserModel();
if (result.Result != null)
{
//登陆成功
var claims = new Claim[]
{
new Claim(ClaimTypes.Name, result.Result.Name),
new Claim("Id", result.Result.Id.ToString()),
new Claim("UserName", result.Result.Name)
//不能放敏感信息
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VF"));
//issuer代表颁发Token的Web应用程序,audience是Token的受理者
var token = new JwtSecurityToken(
issuer: "http://localhost:6060",
audience: "http://localhost:5000",
claims: claims,
notBefore: DateTime.Now,
expires: DateTime.Now.AddHours(1),
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
);
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
requestUserModel.Id = result.Result.Id;
requestUserModel.Name = result.Result.Name;
requestUserModel.Toke = jwtToken;
}