подключиться к внешнему провайдеру IdentityServer во время выполнения - PullRequest
0 голосов
/ 28 мая 2019

Можно ли использовать внешнего провайдера с сервисными клиентами? Я могу создать образец 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 ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...