IDX10206: Невозможно проверить аудиторию. Параметр «аудитории» пуст.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 IDX10206: Невозможно проверить аудиторию. Параметр «аудитории» пуст.

Сообщение Anonymous »

Я пытаюсь проверить, что мой .RequireAuthorization() работает в моих пользовательских минимальных конечных точках API, создав токен JWT из моего CallingApi в MinApi.
В мой 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);
}
Когда я вызывал свой MinApi, я получал код состояния 401. Чтобы понять причину, я добавил в свой CallingApi метод проверки токена, который выглядит следующим образом:

Код: Выделить всё

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;
}
Каждый раз проверка выдает исключение и сообщение: IDX10206: невозможно проверить аудиторию. Параметр «audiences» пуст.
Но я поместил свой токен в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»