我在我的网络应用中使用OpenIddict并刚刚更换了
$reponse = array(
'csrfName' => $this->input->post('csrfName'),
'csrfHash' => $this->input->post('csrfHash')
);
与
.AddEphemeralSigningKey()
我现在想确认新证书实际上已被使用,但是当我提交使用旧(临时)密钥时创建的 access_token 时,它被接受没有问题。现在网络应用程序正在使用不同的签名密钥,我希望它会被拒绝!
或者,我是否误解了签名密钥的用途?
我发现this帖子表明签名密钥不用于签署使用ASP.Net核心数据保护堆栈时创建的访问令牌,我相信这符合我的情况,因为我没有使用JWT令牌或自定义令牌格式。
在这种情况下,用于和/或为什么需要的签名密钥是什么?
答案 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访问令牌或启用隐式流程。因此,如果您正在使用密码流,则不再需要添加密钥。