Невозможно найти DiscoveryClient для IdentityServer4 - PullRequest
1 голос
/ 02 марта 2020

Попытка получить доступ к клиенту обнаружения для получения доступа к другим конечным точкам, после чего, http://docs.identityserver.io/en/aspnetcore1/endpoints/discovery.html

Установлен пакет IgetityModel nuget в приложении. Net 7.5 MVC. Но не удалось найти DiscoveryClient.

var discoveryClient = new DiscoveryClient("https://demo.identityserver.io");
var doc = await discoveryClient.GetAsync();

Есть ли какие-то изменения в Identitymodel для IdentityServer4

Также не удалось найти параметр для "Tokenclient".

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Да, вы правы. В пакете IdentityModel NuGet есть много изменений.

Ниже приведенный код поможет вам:

HttpClient httpClient = new HttpClient();

//Below code will give you discovery document response previously we were creating using DiscoveryClient()

// They have created `.GetDiscoveryDocumentAsync()` extension method to get discovery document.

DiscoveryDocumentResponse discoveryDocument = await httpClient.GetDiscoveryDocumentAsync();


// To create a token you can use one of the following methods, which totally depends upon which grant type you are using for token generation.

Task<TokenResponse> RequestAuthorizationCodeTokenAsync(AuthorizationCodeTokenRequest)
Task<TokenResponse> RequestClientCredentialsTokenAsync(ClientCredentialsTokenRequest)
Task<TokenResponse> RequestDeviceTokenAsync(DeviceTokenRequest)
Task<TokenResponse> RequestPasswordTokenAsync(PasswordTokenRequest)
Task<TokenResponse> RequestRefreshTokenAsync(RefreshTokenRequest)
Task<TokenResponse> RequestTokenAsync(TokenRequest)

Например, если вы хотите создать токен для типа предоставления пароля, используйте следующий код:

PasswordTokenRequest passwordTokenRequest = new PasswordTokenRequest()
            {
                Address = discoveryDocument.TokenEndpoint,
                ClientId = ClientName,
                ClientSecret = ClientSecret,
                GrantType = GrantTypes.ResourceOwnerPassword,
                Scope = scope,
                UserName = userName,
                Password = password
            };

httpClient.RequestPasswordTokenAsync(passwordTokenRequest);

Надеюсь, это поможет вам!

0 голосов
/ 02 марта 2020

Можно выяснить, изменить в IdentityModel, все его расширения HttpClient.

https://identitymodel.readthedocs.io/en/latest/client/discovery.html

var client = new HttpClient();

var disco = await client.GetDiscoveryDocumentAsync("https://demo.identityserver.io");
...