为 .NET Core 3.1/IdentityModel 5.1 使用 ResourceOwnerPassword 流程

Using ResourceOwnerPassword flow for .NET Core 3.1/IdentityModel 5.1

我正在玩 IdentityServer4。其中一部分我正在尝试使用 IdentityModel 5.1.0 构建客户端并尝试使用以下可用代码 here

// request token
var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret");
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("alice", "password", "api1");

if (tokenResponse.IsError)
{
    Console.WriteLine(tokenResponse.Error);
    return;
}

Console.WriteLine(tokenResponse.Json);
Console.WriteLine("\n\n");

但这给了我以下错误。

错误 CS1729:'TokenClient' 不包含采用 3 个参数的构造函数

从文档来看,该页面似乎只适用于 Core 1.0。当我将文档更改为 3.1.0 时,我得到

Sorry This pages does not exist yet

这是否意味着 .NET Core 3.1 不支持 ResourceOwnerPassword 流程?

按住 Ctrl 键并单击该方法会转到其签名,您可以在其中找到该方法所需的特定参数。

浏览存储库,我发现了这个关于使用密码凭据令牌请求的片段:

var response = await _client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
    ClientId = "client",
    UserName = "user",
    Password = "password",
    Scope = "scope",
    Resource = { "resource1", "resource2" }
});

另一个重载:

var response = await tokenClient.RequestPasswordTokenAsync(userName: "user", password: "password", scope: "scope");

或见 actual method definition or another helper.

一个有用的提示:流行的软件包通常有 a lot of tests。您可以查看它们以了解如何使用该库。