Обновить 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("..", ".."));