Flurl 调用 IdentityServer4
Flurl calling IdentityServer4
我正在尝试使用 Flurl 调用 Identity Server 4
我从 ID 服务器返回 400。
当我使用 PostMan 或 IdentityModel.Client.
中可用的方法进行调用时,凭证等工作
我不确定 Post 即 PostUrlEncodedAsync
如您所见,我尝试了各种组合。
这..不起作用
var address = "http://localhost:8027/connect/token";
var x = await address
.WithBasicAuth("clientName", "secretValue")
.SetQueryParams(
new
{
GrantType = "client_credentials",
Scope = "requiredScope"
}
)
.PostUrlEncodedAsync(new { });
//.SendAsync(HttpMethod.Post, null, CancellationToken.None);
//.SendAsync(HttpMethod.Post, y);
这..确实如此
var apiClientCredentials = new ClientCredentialsTokenRequest()
{
Address = "http://localhost:8027/connect/token",
ClientId = "clientName",
ClientSecret = "secretValue",
Scope = "requiredScope"
};
var client = new HttpClient();
var tokenResponse = await client.RequestClientCredentialsTokenAsync(apiClientCredentials);
if (tokenResponse.IsError)
{
}
我可以看到 'RequestClientCredentialsTokenAsync' 内部的深层操作确实 parameters.Add 添加了授权类型和范围,因此我将它们添加为参数。
还尝试将客户端 ID 和密码添加到查询参数中。
相同的 400 条消息。
非常感谢任何帮助。
我认为不同之处在于 IdentityModel 知道将 ClientCredentialsTokenRequest
属性 名称(如 ClientId
和 GrantType
序列化为蛇形,即 client_id
和 grant_type
,根据 OAuth2 的要求。当您将匿名对象交给 Flurl 时,它只会按原样序列化 属性 名称。要使其与 Flurl 一起工作,您可以创建一个 class 并用 Json.NET serialization attributes 装饰它,或者(我通常做的)保持简单,随意使用 C# 属性 名称约定:
.SetQueryParams(
new
{
grant_type = "client_credentials",
scope = "requiredScope"
}
我正在尝试使用 Flurl 调用 Identity Server 4
我从 ID 服务器返回 400。 当我使用 PostMan 或 IdentityModel.Client.
中可用的方法进行调用时,凭证等工作我不确定 Post 即 PostUrlEncodedAsync 如您所见,我尝试了各种组合。
这..不起作用
var address = "http://localhost:8027/connect/token";
var x = await address
.WithBasicAuth("clientName", "secretValue")
.SetQueryParams(
new
{
GrantType = "client_credentials",
Scope = "requiredScope"
}
)
.PostUrlEncodedAsync(new { });
//.SendAsync(HttpMethod.Post, null, CancellationToken.None);
//.SendAsync(HttpMethod.Post, y);
这..确实如此
var apiClientCredentials = new ClientCredentialsTokenRequest()
{
Address = "http://localhost:8027/connect/token",
ClientId = "clientName",
ClientSecret = "secretValue",
Scope = "requiredScope"
};
var client = new HttpClient();
var tokenResponse = await client.RequestClientCredentialsTokenAsync(apiClientCredentials);
if (tokenResponse.IsError)
{
}
我可以看到 'RequestClientCredentialsTokenAsync' 内部的深层操作确实 parameters.Add 添加了授权类型和范围,因此我将它们添加为参数。
还尝试将客户端 ID 和密码添加到查询参数中。
相同的 400 条消息。
非常感谢任何帮助。
我认为不同之处在于 IdentityModel 知道将 ClientCredentialsTokenRequest
属性 名称(如 ClientId
和 GrantType
序列化为蛇形,即 client_id
和 grant_type
,根据 OAuth2 的要求。当您将匿名对象交给 Flurl 时,它只会按原样序列化 属性 名称。要使其与 Flurl 一起工作,您可以创建一个 class 并用 Json.NET serialization attributes 装饰它,或者(我通常做的)保持简单,随意使用 C# 属性 名称约定:
.SetQueryParams(
new
{
grant_type = "client_credentials",
scope = "requiredScope"
}