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