首页 > 解决方案 > 我可以使用 2 个不同的令牌身份验证中间件创建 Identity Server 4 ASP.NET Core API 吗?

问题描述

我试图弄清楚是否可以根据我配置的身份服务器使用的任何内容来编写一个使用引用令牌或 JWT 令牌来使用身份服务器令牌的 ASP.NET Core API。IS4 的后端配置非常简单,我只是不相信我可以配置 2 个不同的令牌中间件并且我的服务都可以接受它并且知道该怎么做。

所以这个想法是:

显然,如果为 IS4 服务上配置的任何内容提供了错误类型的令牌,它将失败。

处理令牌端点和撤销端点也应该很容易,这只是我关心的中间件魔术。

我知道通常你不想这样做,但我们有一个利基用例。我目前关心的是它是否可能。我不熟悉 auth 中间件在后端的工作方式。

标签: asp.net-corejwtidentityserver4access-tokenmiddleware

解决方案


根据Identity Server 4 Protecting APIs 文档,我们可以看到它支持在 asp.net 核心中同时使用 JWT 和引用令牌。

您可以设置 ASP.NET Core 以根据传入的令牌分派到正确的处理程序,有关详细信息,请参阅此博客文章。

services.AddAuthentication("token")

    // JWT tokens
    .AddJwtBearer("token", options =>
    {
        options.Authority = Constants.Authority;
        options.Audience = "resource1";

        options.TokenValidationParameters.ValidTypes = new[] { "at+jwt" };

        // if token does not contain a dot, it is a reference token
        options.ForwardDefaultSelector = Selector.ForwardReferenceToken("introspection");
    })

    // reference tokens
    .AddOAuth2Introspection("introspection", options =>
    {
        options.Authority = Constants.Authority;

        options.ClientId = "resource1";
        options.ClientSecret = "secret";
    });

推荐阅读