c# - 如何在令牌生成时强制执行用户名和密码,或者这是不好的做法
问题描述
我已经开始了一个简单的 web api 并使用 jwt 向它添加了令牌生成。但是,我在应用程序帐户中使用了用户存储,这是我设置令牌的功能。它以大摇大摆的形式出现,但我没有得到的是如何在请求令牌时强制输入用户名和密码。或者这是不好的做法。
这是我生成安全令牌时的课程。
public JwtService(IConfiguration config)
{
var test = config;
_secret = config.GetSection("JwtToken").GetSection("SecretKey").Value;
_expDate = config.GetSection("JwtToken").GetSection("expirationInMinutes").Value;
}
public string GenerateSecurityToken(string email)
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Email, email)
})
,
Expires = DateTime.UtcNow.AddMinutes(double.Parse(_expDate)),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
}
public static IServiceCollection AddTokenAuthentication(this IServiceCollection services, IConfiguration config)
{
var secret = config.GetSection("JwtToken").GetSection("SecretKey").Value;
var keySecret = Base64UrlEncoder.DecodeBytes(secret);
var key = Encoding.ASCII.GetBytes(keySecret.ToString());
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false,
// ValidIssuer = "localhost",
//ValidAudience = "localhost"
};
});
return services;
}
Swagger Gen 代码
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "App Manager - Running Buddies", Version = "v1" });
c.AddSecurityDefinition("bearer", new OpenApiSecurityScheme
{
Name = "Authorization",
Type = SecuritySchemeType.ApiKey,
Scheme = "bearer",
BearerFormat = "JWT",
In = ParameterLocation.Header,
Description = "JWT Authorization header using the Bearer scheme.",
});
});
招摇用户界面测试
解决方案
您可能希望使用HTTP POST在模型中传递用户名/密码。确保仅在登录请求有效时发出令牌,即在您成功验证用户身份之后。有关详细信息,请参阅使用 JWT 保护 ASP.NET Core 2.0 应用程序 。
编辑:要使用身份执行登录,您可以使用SignInManager.PasswordSignInAsync或仅检查凭据SignInManager.CheckPasswordSignInAsync。有关示例,请参见示例:
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
// generate the token
}
推荐阅读
- parse-platform - response.error 不是 Parse Cloud Code 中的函数
- jquery - 删除事件监听器ajax
- amazon-web-services - 通过 IP 限制对 S3 的访问我做错了什么?
- angular - 在 Angular 6 中更改多个图标 onclick
- karate - 无法将接口文件中的 url 输入转换为功能文件
- javascript - 如何在 JavaScript 中的对象中打印两个数组列表
- javascript - 数据在不同组件中到达角度较晚
- php - wordpress phpMyAdmin 数据库集成最佳实践
- node.js - Socket.io + Nodejs + Angular2+ - 缺少 CORS 标头“Access-Control-Allow-Origin”
- php - php symfony 1 更新 generator.yml