在Identityserver 4中调用自定义函数进行身份验证的问题

时间:2017-02-10 15:38:05

标签: c# asp.net-mvc identityserver4

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

https://stackoverflow.com/a/35882775/7440281

......作为解决自己问题的一种方式。基本上我想要做的事 - 最初无论如何 - 调用某种函数并为其提供用户名和密码。验证将在外部完成,但已添加到我的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中引用它们。问题是我目前得到的只是'unauthorised_client'。

这可能是也可能不是客户端的配置。这来自相关客户端的设置:

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

RedirectUris之前已被设置为快速入门教程的一部分。我猜这应该改成别的东西,但不清楚它应该是什么。我还不清楚AllowedGrantTypes是否已正确设置。当然可能还有其他事情,但我仍然是Identityserver的新手。

1 个答案:

答案 0 :(得分:0)

是的,问题无疑与您的客户端定义或您调用connect/token端点的方式有关。 在发布到connect/token端点的帖子中,请确保提供: - grant_type(在您的情况下为'password') - client_id - 用户名 - 密码 - 范围 - 秘密(如果您在客户定义中要求

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

  • AllowedGrantTypes(与请求的grant_type匹配)
  • RequireClientSecret(true / false,如果为true则需要发布)并使用ClientSecrets
  • 定义它们
  • AllowedScopes(以匹配要求的范围)

您如何测试IdServer端点? Postman是一个有用的工具,用于保持简单并消除客户端本身的任何潜在问题。

如果您使用GrantType.ResourceOwnerPassword,那么您不需要(也不能使用)重定向网址。