c# - Identity Server 3 访问 token 验证库无法验证从 Identity Server 4 生成的 token

标签 c# .net asp.net-core identityserver4 identityserver3

我有一个在 Identity server 4 (v3.1.2) 上开发的 Identity 服务器和一个在 .NET Framework 4.6 上开发的 .NET Web API。在 Web API 中,我使用 Identity Server 3 访问 token 验证库 (v2.14.0) 来验证传入请求的 token 。

当我尝试使用身份服务器生成的 JWT token 访问 .NET Web API 上的资源时,我总是收到未经授权的 401 响应。我已在 .NET Web API 中设置了 Owin 中间件,如下所示。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {

        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = "http://localhost:9080/IdentityServer"
        });

        var config = new HttpConfiguration();
        config.MapHttpAttributeRoutes();

        app.UseWebApi(config);
    }
}

但是,为了查明这是否是 Identity Server 4 token 和 Identity Server 3 访问 token 验证库之间的问题,我使用 Identity Server 3 库(v2.6.3)创建了一个单独的 Identity Server 并提供了一个 token 从它生成到我之前使用的相同 Web API(与上面相同的 Startup.cs)。

此请求已成功授权,所有内容均按预期工作。

我的问题是:

是否可以使用来自身份服务器 4 的 token 来使用身份服务器 3 访问 token 验证库进行验证?或者我做错了什么?

最佳答案

我不确定,但我认为您的授权 URL 不正确。我遇到了与您类似的情况,我使用 IdentityServer3.AccessTokenValidation NuGet 包解决了它,它工作得很好。所以我确信您的问题与中间件无关。

尝试替换 startup.cs 文件中的以下代码,一切都会正常。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {

        IdentityServerBearerTokenAuthenticationOptions options = new IdentityServerBearerTokenAuthenticationOptions
            {
                Authority = "http://localhost:9080",
                AuthenticationType = "Bearer"
            };

        app.UseIdentityServerBearerTokenAuthentication(options);

        var config = new HttpConfiguration();
        config.MapHttpAttributeRoutes();

        app.UseWebApi(config);
    }
}

希望这能解决您的问题!

关于c# - Identity Server 3 访问 token 验证库无法验证从 Identity Server 4 生成的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495829/

相关文章:

c# - 未找到单声道 MissingMethodException : DateTimeOffset. FromUnixTimeSeconds

c# - 是否可以使用基于属性而不是类型的通用约束?

.net - 将枚举值作为命令参数传递

c# - 最大的 "float"小于等于 `int.MaxValue`

.net - 如何通过代码获取当前的Azure服务总线命名空间连接字符串

javascript - ASP.NET Core API 中的模型绑定(bind)始终为 null

c# - Try Finally 或 Try Catch Finally

c# - 在事件处理程序以外的代码隐藏部分中确定所选索引是否已更改或是否触发了自动回发事件

c# - 具有重试计数和重试延迟的文件上传 - C# 中的最佳方法

sql - 将 ASP.NET Core 应用程序发布到 Azure 不起作用