Невозможно найти DiscoveryClient для IdentityServer4
Попытка получить доступ к клиенту обнаружения для доступа к другим конечным точкам и после этого http://docs.identityserver.io/en/aspnetcore1/endpoints/discovery.html
Установлен пакет NuGet IdentityModel в приложении.Net 7.5 MVC. Но не смог найтиDiscoveryClient
.
var discoveryClient = new DiscoveryClient("https://demo.identityserver.io");
var doc = await discoveryClient.GetAsync();
Что-то изменилось в Identitymodel
за IdentityServer4
Также не удалось найти параметр для "Tokenclient".
2 ответа
Возможность понять, изменить IdentityModel, все его расширение HttpClient
.
https://identitymodel.readthedocs.io/en/latest/client/discovery.html
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync("https://demo.identityserver.io");
Да вы правы. В пакете NuGet IdentityModel внесено много изменений.
Код ниже поможет вам:
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);
Я надеюсь, что это поможет вам!
Если вы использовали образец кода, а другие ответы не работают, потому что HttpClient не имеет GetDiscoveryDocumentAsync
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync("https://localhost:5001");
Обновите свой пакет IdentityModel в Visual Studio:
Щелкните правой кнопкой мыши "Зависимости" -> "Управление пакетами Nuget" -> "Обновления" (выберите "Все" в правом верхнем углу).