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

时间:2017-02-14 05:55:55

标签: asp.net-core openid-connect openiddict

我在我的网络应用中使用OpenIddict并刚刚更换了

 $reponse = array(
        'csrfName' => $this->input->post('csrfName'),
        'csrfHash' => $this->input->post('csrfHash')
        );

.AddEphemeralSigningKey()

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

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

我发现this帖子表明签名密钥不用于签署使用ASP.Net核心数据保护堆栈时创建的访问令牌,我相信这符合我的情况,因为我没有使用JWT令牌或自定义令牌格式。

在这种情况下,用于和/或为什么需要的签名密钥是什么?

1 个答案:

答案 0 :(得分:2)

  

在这种情况下,用于和/或为什么需要的签名密钥是什么?

如您所提及的帖子所述,签名密钥仅用于签署OpenIddict颁发的JWT令牌(如果您选择使用JWT,则包括身份令牌+访问令牌)。

如果您想复制"临时加密/验证密钥"使用默认令牌格式的场景,您可以要求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访问令牌或启用隐式流程。因此,如果您正在使用密码流,则不再需要添加密钥。