我有一个基本的IdentityServer4令牌服务器,一个Api和一个基于identityserver4文档教程使用client_credentials的测试客户端应用程序设置。IdentityServer4 IExtensionGrantValidator
我们有一个预先构建的客户端应用程序,用户使用他们现有的凭据登录,这些凭据不与IdentityServer4绑定。客户端应用程序将使用client_credentials工作流调用Api,因为我不想为可能需要访问Api的每个客户端应用程序创建多个用户。
在IdentityServer4上使用上述设置我已使用client_Credentials工作流程正常工作。我面临的问题是虽然我不需要个人用户进行身份验证,但我仍然想通过user_id知道他们是谁。我可以简单地将& user_id = 9999添加到令牌请求中,但我找不到在请求发出时从令牌服务器检索此信息的方法。经过一些研究后,我遇到了IExtensionGrantValidator,它允许我添加一个cstom授权类型并拦截请求并执行一些自定义处理。问题是,即使它看起来好像我正确设置它,我仍然得到invalid_grant错误。
下面是代码:
public class CustomGrantValidator : IExtensionGrantValidator
{
public string GrantType => "custom_credentials";
public Task ValidateAsync(ExtensionGrantValidationContext context)
{
return Task.FromResult(context.Result);
}
}
在新的客户端块:
AllowedGrantTypes =
{
GrantType.ClientCredentials,
"custom_credentials"
},
在启动
.AddExtensionGrantValidator<CustomGrantValidator>();
我是新来IdentityServer4和.net核心,所以我我确信我做错了一件事,或者不了解这里的基本机制。