【问题标题】:Unable to find DiscoveryClient for IdentityServer4找不到 IdentityServer4 的 DiscoveryClient
【发布时间】:2020-09-23 21:15:49
【问题描述】:
【问题讨论】:
标签:
asp.net-mvc
identityserver4
identityserver3
identitymodel
【解决方案2】:
是的,你是对的。 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);
希望对你有帮助!
【解决方案3】:
如果您使用了一些示例代码并且其他答案不起作用,因为 HttpClient 没有 GetDiscoveryDocumentAsync
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync("https://localhost:5001");
在 Visual Studio 中更新您的 IdentityModel 包:
右键依赖->管理Nuget包->更新(在右上角选择“全部”)