2017-02-14 82 views
2

我在我的web应用程序中使用OpenIddict和刚刚更换更改签名密钥并不能否定现有令牌

.AddEphemeralSigningKey() 

.AddSigningCertificate("my thumbprint") 

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

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

我找到了this这篇文章指出签名密钥不用于签署使用ASP.Net核心数据保护堆栈时创建的访问令牌,我认为这符合我的方案,因为我没有使用JWT令牌或自定义令牌格式。

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

回答

2

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

正如你所提到的解释后,签名密钥只用于(如果你选择了JWT其中包括身份令牌+的访问令牌)签署OpenIddict颁发的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(); 
    } 
} 

值得一提的是,签名密钥的要求是在最近的位轻松:注册certificat除非您决定使用JWT访问令牌或启用隐式流程,否则不再需要临时密钥或临时密钥。因此,如果您使用密码流,则添加密钥不再是强制性的。