为 .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。您可以查看它们以了解如何使用该库。
我正在玩 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。您可以查看它们以了解如何使用该库。