В мой CallingApi, я добавляю сгенерированный токен в заголовок аутентификации.
Код: Выделить всё
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TokenGenerator.GenerateToken());
var url = $"https://localhost:7215/api/users";
var response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
return Ok(await response.Content.ReadAsStringAsync());
Код: Выделить всё
public static String GenerateToken()
{
var key = Encoding.UTF8.GetBytes("CallMinApiKey-ThisNeedsToBePrettyLong");
var tokenHandler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, "TestUser")
}),
Expires = DateTime.UtcNow.AddHours(1),
Issuer = "TestIssuer",
Audience = "TestAudience",
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
Код: Выделить всё
public static String GenerateToken()
{
var key = Encoding.UTF8.GetBytes("CallMinApiKey-ThisNeedsToBePrettyLong");
var tokenHandler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, "TestUser")
}),
Expires = DateTime.UtcNow.AddHours(1),
Issuer = "TestIssuer",
Audience = "TestAudience",
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor);
var testTokenString = tokenHandler.WriteToken(token);
TestValidateToken(testTokenString);
return testTokenString;
}
public static Boolean TestValidateToken(String testTokenString)
{
var token = testTokenString;
var key = Encoding.UTF8.GetBytes("CallMinApiKey-ThisNeedsToBePrettyLong");
var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "TestIssuer",
ValidAudience = "TestAudience",
IssuerSigningKey = new SymmetricSecurityKey(key)
};
try
{
tokenHandler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);
Console.WriteLine("Token is valid.");
return true;
}
catch (Exception ex)
{
Console.WriteLine($"Unknown error: {ex.Message}");
}
return false;
}
Но я поместил свой токен в jwt.io, и у него есть значение «audi», см.:
мой токен проанализирован на jwt.io
-- Обновление
Вот настройки аутентификации в моем файле Program.cs MinApi.
Код: Выделить всё
var key = Encoding.UTF8.GetBytes("CallMinApiKey-ThisNeedsToBePrettyLong");
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "TestIssuer",
ValidAudience = "TestAudience",
IssuerSigningKey = new SymmetricSecurityKey(key)
};
});
builder.Services.AddAuthorization();
Подробнее здесь: https://stackoverflow.com/questions/788 ... r-is-empty