5

尝试访问发现客户端以访问其他端点并遵循 http://docs.identityserver.io/en/aspnetcore1/endpoints/discovery.html

在 .Net 7.5 MVC 应用程序中安装了 IdentityModel nuget 包。但是找不到DiscoveryClient

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

有什么变化IdentitymodelIdentityServer4

此外,无法找到“Tokenclient”的参数。

4

3 回答 3

5

是的,你是对的。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);

我希望这能帮到您!

于 2020-03-03T11:43:38.547 回答
4

能够弄清楚,IdentityModel 的变化,它的所有扩展都是HttpClient.

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

var client = new HttpClient();

var disco = await client.GetDiscoveryDocumentAsync("https://demo.identityserver.io");
于 2020-03-02T18:53:48.903 回答
1

如果您使用了一些示例代码并且其他答案不起作用,因为 HttpClient 没有GetDiscoveryDocumentAsync

    var client = new HttpClient();

    var disco = await client.GetDiscoveryDocumentAsync("https://localhost:5001");

在 Visual Studio 中更新您的IdentityModel包:

右键单击依赖项 -> 管理 Nuget 包 -> 更新(在右上角选择“全部”)

于 2020-09-23T13:15:49.837 回答