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