Можно ли использовать внешнего провайдера с сервисными клиентами?
Я могу создать образец external_authentication и заставить его работать с Azure AD. Однако он работает, только если человек использует веб-браузер и нажимает кнопку OpenID на странице входа в систему.
Мне интересно, можно ли написать службу, которая будет входить в Azure AD во время выполнения и будет подключаться к службе REST, защищенной IdentityServer с внешним поставщиком AzureAD.
Я попытался изменить ResourceOwnerClient образец исходный код и написал что-то вроде
static async Task<TokenResponse> GetToken(string tenat, string clientid, string secret, string user, string password)
{
var durl = $"https://login.microsoftonline.com/{tenat}/.well-known/openid-configuration";
using (var client = new HttpClient())
using (var dclient = new DiscoveryClient(durl))
{
dclient.Policy.ValidateIssuerName = false;
dclient.Policy.ValidateEndpoints = false;
var disco = await dclient.GetAsync();
if (disco.IsError)
{
Console.WriteLine(disco.Error);
return null;
}
// request token
var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = clientid,
ClientSecret = secret,
UserName = user,
Password = password,
});
return tokenResponse;
}
}
где clientid и secreat для приложения, зарегистрированного в Azure AD, а пользователь и пароль - учетные данные пользователя Azure AD.
но это терпит неудачу с invalid request
ошибка