在 Program.cs 中,我有一個用于獲取 Jwt 令牌的后端點:
app.MapPost("/api/security/getToken", [AllowAnonymous] async (UserManager<IdentityUser> userMgr, UserLoginDTO user) => {
var identityUser = await userMgr.FindByEmailAsync(user.Email);
if (await userMgr.CheckPasswordAsync(identityUser, user.Password)) {
var issuer = builder.Configuration["Jwt:Issuer"];
var audience = builder.Configuration["Jwt:Audience"];
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new List<Claim> {
new Claim(ClaimTypes.Email, identityUser.Email),
new Claim(ClaimTypes.GivenName, identityUser.UserName)
};;
var token = new JwtSecurityToken(issuer: issuer, audience: audience, signingCredentials: credentials, claims: claims);
var tokenHandler = new JwtSecurityTokenHandler();
var stringToken = tokenHandler.WriteToken(token);
return Results.Ok(stringToken);
}
else {
return Results.Unauthorized();
}
}).WithTags("Security");
我想將該邏輯移到一個單獨的類中以提高可讀性。
public static class SecurityEndpoints {
public static void MapSecurityEndpoints(this WebApplication app) {
app.MapPost("/api/security/getToken", GetToken).AllowAnonymous();
app.MapPost("/api/security/createUser", CreateUser).AllowAnonymous();
}
internal static async Task<IResult> GetToken(this WebApplicationBuilder builder, UserManager<IdentityUser> userMgr,[FromBody] UserLoginDTO user) {
//same logic
}
...
}
由于 WebApplicationBuilder,我得到了 InvalidOperationException。
如何重構GetToken方法以擺脫WebApplicationBuilder并訪問Builder.Configuration。該服務看起來如何?還是您還將如何處理?
uj5u.com熱心網友回復:
你不應該WebApplication(Builder)在你的處理程式中使用。使用標準方法來處理此處描述的 .NET/ASP.NET Core 中的配置。
例如為 jwt 設定創建型別,使用選項模式注冊它并注入處理程式。沿著這條線的東西:
public class JwtOptions
{
public const string Position = "Jwt";
public string Issuer { get; set; } = String.Empty;
public string Audience { get; set; } = String.Empty;
}
builder.Services.Configure<JwtOptions>(
builder.Configuration.GetSection(JwtOptions.Position));
internal static async Task<IResult> GetToken(IOptions<JwtOptions> jwtOptions,...) {
// use jwtOptions
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533355.html
標籤:C#。网jwt最小的 API
上一篇:在C#.NETWCF中生成OTP6位pin的方法是什么?(不使用Random())
下一篇:過濾約會無法正常作業
