更改签名密钥不会使现有令牌失效

Changing the signing key doesn't invalidate existing tokens

我在我的网络应用程序中使用 OpenIddict 并且刚刚替换了

.AddEphemeralSigningKey()

.AddSigningCertificate("my thumbprint")

我现在想确认新证书确实在使用中,但是当我提交一个 access_token 时,它是在使用旧的(临时的)时创建的钥匙,它被接受没有问题。我预计它会被拒绝,因为网络应用程序正在使用不同的签名密钥!

或者,我是否误解了签名密钥的用途?

我发现 post 表示签名密钥未用于签署使用 ASP.Net 核心数据保护堆栈时创建的访问令牌,我认为这适合我的情况,因为我没有使用 JWT 令牌或自定义令牌格式。

在这种情况下,用于and/or的签名密钥是什么?

In this case, what is the signing key used for and/or why is it required?

如您提到的 post 中所述,签名密钥仅用于签署由 OpenIddict 颁发的 JWT 令牌(如果您选择了 JWT,则包括身份令牌 + 访问令牌)。

如果您想使用默认令牌格式复制 "ephemeral encryption/validation key" 场景,您可以要求 OpenIddict 使用临时数据保护器:

public class Startup
{
    private readonly IDataProtectionProvider _provider =
        new EphemeralDataProtectionProvider();

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOpenIddict(options =>
        {
            // ...

            options.UseDataProtectionProvider(_provider);
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseOAuthValidation(options =>
        {
            options.DataProtectionProvider = _provider;
        });

        app.UseOpenIddict();
    }
}

您还可以覆盖数据保护选项,为您的整个应用程序使用临时数据保护器:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDataProtection()
            .UseEphemeralDataProtectionProvider();

        services.AddOpenIddict();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseOAuthValidation();

        app.UseOpenIddict();
    }
}

值得注意的是,最近 放宽了 签名密钥要求:不再需要注册证书或临时密钥,除非您决定使用 JWT 访问令牌或启用隐式流。因此,如果您使用的是密码流程,则不再必须添加密钥。