Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Identityserver 4中调用自定义函数进行身份验证时出现问题_C#_Asp.net Mvc_Identityserver4 - Fatal编程技术网

C# 在Identityserver 4中调用自定义函数进行身份验证时出现问题

C# 在Identityserver 4中调用自定义函数进行身份验证时出现问题,c#,asp.net-mvc,identityserver4,C#,Asp.net Mvc,Identityserver4,我一直在尝试使用这里提到的代码: …作为解决我自己问题的一种方式。基本上,我想做的就是调用某种函数,并为其提供用户名和密码。验证将在外部完成,但已添加到我的ResourceOwnerPasswordValidator实例中。请注意,界面似乎在编写时和现在之间发生了变化。作为第一步,我要做的就是检查一个特定的名字,让事情开始变得简单。这是我课程的当前内容: public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordVa

我一直在尝试使用这里提到的代码:

…作为解决我自己问题的一种方式。基本上,我想做的就是调用某种函数,并为其提供用户名和密码。验证将在外部完成,但已添加到我的ResourceOwnerPasswordValidator实例中。请注意,界面似乎在编写时和现在之间发生了变化。作为第一步,我要做的就是检查一个特定的名字,让事情开始变得简单。这是我课程的当前内容:

public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
{
    public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
    {
        if (context.UserName == "PatrickS")
        {
            var result = new GrantValidationResult("PatrickS", "password");
        }
        else
        {
            var result = new GrantValidationResult(TokenRequestErrors.UnauthorizedClient, "Username Or Password Incorrect");
        }
        return Task.FromResult(result);
    }
}
我在注释中定义了注释中提到的两个接口。我也使用services.AddTransient()在ConfigureServices中引用了它们。问题是,我目前得到的只是“未经授权的客户”

这可能取决于客户机的配置,也可能不取决于客户机的配置。这是来自相关客户端的设置:

AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002" },

重定向URI以前是作为quickstart教程的一部分设置的。我猜这应该改成其他东西,但不清楚这应该是什么。我也不清楚AllowedGrantTypes是否设置正确。当然,可能还有其他事情,但我对Identityserver还是新手。

是的,问题无疑与您的客户端定义有关,或者与您调用
连接/令牌的方式有关。
在
connect/token
端点的帖子中,请确保提供: -授权类型(在您的案例中为“密码”) -客户识别码 -用户名 -密码 -范围 -机密(如果您在客户定义中要求

在您定义客户端的IdentityServer中,确保您使用的客户端id已定义:

  • AllowedGrantTypes
    (与请求的授权类型匹配)
  • RequireClientSecret
    (对/错,如果对,则需要发布),并使用
    ClientSecrets
  • 允许的作用域
    (以匹配请求的作用域)
您是如何测试IdServer端点的?Postman是一个非常有用的工具,可以简化工作并消除客户端本身的任何潜在问题

如果使用的是
GrantType.ResourceOwnerPassword
,则不需要(也不能使用)重定向URL