IdentityServer4 unsupported_grant_type 错误
IdentityServer4 unsupported_grant_type Error
我一直在尝试让 IdentityServer4 的最简单示例用于在纯代码后面请求访问。我可以在使用客户端请求时获得访问令牌,但在进行用户登录时却无法获得。
var discos = new DiscoveryClient(authority);
var disco = await discos.GetAsync();
if (disco.IsError)
{
Console.WriteLine(disco.Error);
return null;
}
var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret");
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("username", "password", "api1");
这是使用用户详细信息发出请求的客户端。
我得到一个永久 unsupported_grant_type..
服务器设置为:
new Client
{
ClientId = "ro.client",
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }
}
任何人都可以确定我在想什么。用户可以使用软件提供的前端快速启动 UI 登录,这是内置功能。如果公司有效,为什么它不起作用。
您的 ClientSecrets 配置为 "secret" 的 Sha256 而不是文字字符串 "secret"。
更新您的 tokenClient 以传递 "secret" 的 Sha256 而不是文字字符串 "secret"
var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret".Sha256());
现已解决。
我已经设法使用较新版本的 nuget 包使它工作,所以可能与我正在阅读的内容和旧要求有一些冲突。
作为参考,我已经将服务器 API 和控制台客户端的工作演示上传到 github:
https://github.com/PheonixProject/IdentityServer4Demo
我一直在尝试让 IdentityServer4 的最简单示例用于在纯代码后面请求访问。我可以在使用客户端请求时获得访问令牌,但在进行用户登录时却无法获得。
var discos = new DiscoveryClient(authority);
var disco = await discos.GetAsync();
if (disco.IsError)
{
Console.WriteLine(disco.Error);
return null;
}
var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret");
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("username", "password", "api1");
这是使用用户详细信息发出请求的客户端。 我得到一个永久 unsupported_grant_type..
服务器设置为:
new Client
{
ClientId = "ro.client",
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }
}
任何人都可以确定我在想什么。用户可以使用软件提供的前端快速启动 UI 登录,这是内置功能。如果公司有效,为什么它不起作用。
您的 ClientSecrets 配置为 "secret" 的 Sha256 而不是文字字符串 "secret"。
更新您的 tokenClient 以传递 "secret" 的 Sha256 而不是文字字符串 "secret"
var tokenClient = new TokenClient(disco.TokenEndpoint, "ro.client", "secret".Sha256());
现已解决。 我已经设法使用较新版本的 nuget 包使它工作,所以可能与我正在阅读的内容和旧要求有一些冲突。
作为参考,我已经将服务器 API 和控制台客户端的工作演示上传到 github: https://github.com/PheonixProject/IdentityServer4Demo