У нас есть эта настраиваемая схема авторизации, которую я пытаюсь решить, с возможностью модульного тестирования и использования инъекции зависимостей в ядре .NET. Позвольте мне объяснить настройки:Интенсивность зависимостей в зависимости от пользовательской авторизации .NET Core
Я создал интерфейс IStsHttpClient и класс StsHttpClient. Этот класс подключается к внутренней веб-службе, которая создает маркеры &. Это имеет ровно один метод «DecodeToken (строковый токен)», и конструктор очень прост - он принимает объект опций, который загружается из DI.
Тогда мой AuthorizationHandler теоретически просто использовал IStsHttpClient для вызова и декодирования токена. Мой вопрос основан на примерах онлайн. Я не знаю, как правильно указать/создать обработчик авторизации (см. Код ниже).
Код авторизации здесь:
public class MyAuthorizationRequirement : AuthorizationHandler<MyAuthorizationRequirement >, IAuthorizationRequirement
{
const string Bearer = "Bearer ";
readonly IStsHttpClient _client;
public BuzzStsAuthorizationRequirement([FromServices]IStsHttpClient client)
{
_client = client;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyStsAuthorizationRequirement requirement)
{
/* remaining code omitted - but this will call IStsHttpClient.Decode() */
Мои Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<StsHttpOptions>(Configuration.GetSection("StsConfigurationInfo"));
services.AddScoped<IStsHttpClient , StsHttpClient >();
services.AddAuthorization(options =>
{
options.AddPolicy("Authorize", policy =>
{
/* initialize this differently?? */
policy.AddRequirements(new MyStsAuthorizationRequirement(/* somethign is needed here?? */));
});
});
Я в конечном итоге реализовать один или два дня после этого, что я могу использовать Middleware делать именно то, что я хотеть. –