Обновить CredentialCache во время выполнения

Я использую DI для приложения, которое используетCredentialCacheпоскольку это хост Linux, которому необходимо пройти аутентификацию в Windows API. Я устанавливаю учетные данные, как показано ниже, и это отлично работает.

Моя проблема заключается в том, что пароль сервисной учетной записи автоматически меняется ежемесячно. Я могу запросить этот новый пароль во время выполнения, используяIAAMслужбу, которую я вызываю ниже, но не знаю, как заменить учетные данные.

Я думал, что когдаHttpClientметоды get/send возвращают 401, после чего я могу получить новый пароль и обновить его.

Но как мне обновить этот кеш учетных данных во время выполнения?

      public static Func<IServiceProvider, SocketsHttpHandler> CreateWindowsAuthHandler(string username, string domain) {
    return x => {
        var pwd = x.GetRequiredService<IAAM>().GetPasswordAsync(username).GetAwaiter().GetResult();

        return new SocketsHttpHandler {
            Credentials = new CredentialCache {
                { new(BaseAddress), "Negotiate", new(username, pwd, domain) }
            },
            PreAuthenticate = true,
            UseProxy = false
        };
    };
}

services.AddHttpClient<IMyClient, MyClient>()
    .ConfigurePrimaryHttpMessageHandler(x => CreateWindowAuthHandler("..", ".."));

0 ответов

Другие вопросы по тегам