Запросить токен доступа с помощью refre sh токена с IdentityModel 4.1.1 - PullRequest
0 голосов
/ 29 января 2020

Я использую IdentityModel 4.1.1 для OAuth2.0. Теперь я застрял во время создания экземпляра TokenClient, который используется для запроса нового токена доступа с помощью refre sh token.

Вот мой код, что Я делаю,

TokenClientOptions clientOptions = new TokenClientOptions();
clientOptions.ClientId = _configDetails.Where(x => x.Key == "ClientId").Select(x => x.Value).FirstOrDefault().ToString();
clientOptions.ClientSecret = _configDetails.Where(x => x.Key == "ClientSecret").Select(x => x.Value).FirstOrDefault().ToString();

//Create token client object object
var tokenClient = new TokenClient("?",clientOptions); //Here I need help what I have to pass as first parameter?


TokenResponse refereshtokenCallResponse = await tokenClient.RequestRefreshTokenAsync(token.RefreshToken);

Ниже класса TokenClient, предоставленного IdentityModel4.1.1 pkg,

public class TokenClient
{
    public TokenClient(HttpMessageInvoker client, TokenClientOptions options);
    public TokenClient(Func<HttpMessageInvoker> client, TokenClientOptions options);

    public Task<TokenResponse> RequestAuthorizationCodeTokenAsync(string code, string redirectUri, string codeVerifier = null, IDictionary<string, string> parameters = null, CancellationToken cancellationToken = default(CancellationToken));
    public Task<TokenResponse> RequestClientCredentialsTokenAsync(string scope = null, IDictionary<string, string> parameters = null, CancellationToken cancellationToken = default(CancellationToken));
    public Task<TokenResponse> RequestDeviceTokenAsync(string deviceCode, IDictionary<string, string> parameters = null, CancellationToken cancellationToken = default(CancellationToken));
    public Task<TokenResponse> RequestPasswordTokenAsync(string userName, string password = null, string scope = null, IDictionary<string, string> parameters = null, CancellationToken cancellationToken = default(CancellationToken));
    public Task<TokenResponse> RequestRefreshTokenAsync(string refreshToken, string scope = null, IDictionary<string, string> parameters = null, CancellationToken cancellationToken = default(CancellationToken));
    public Task<TokenResponse> RequestTokenAsync(string grantType, IDictionary<string, string> parameters = null, CancellationToken cancellationToken = default(CancellationToken));
}

Как видно из приведенного выше класса, необходимо передать HttpMessageInvoker в качестве первого параметра, но я полностью об этом не упомянул , Я также сослался на IdentityModel document , но не получил никакой подсказки

1 Ответ

1 голос
/ 29 января 2020

Вы должны передать в качестве аргумента HttpClient с уже настроенным BaseUrl.

Взгляните на тесты из GitHub , чтобы увидеть, как он построен.

Изменить: Чтобы устранить любую путаницу, HttpClient имеет HttpMessageInvoker в качестве базового класса.

...