我在我的网络应用程序中使用 OpenIddict,并且刚刚替换了
.AddEphemeralSigningKey()
与
.AddSigningCertificate("my thumbprint")
我现在想确认新证书确实正在使用,但是当我提交使用旧(临时) key 创建的access_token时,它会被毫无问题地接受。我希望它会被拒绝,因为网络应用程序正在使用不同的签名 key !
或者,我是否误解了签名 key 的用途?
我找到了this帖子指出签名 key 不用于签署使用 ASP.Net Core 数据保护堆栈时创建的访问 token ,我认为这适合我的场景,因为我没有使用 JWT token 或自定义 token 格式。
在这种情况下,签名 key 的用途是什么和/或为什么需要它?
最佳答案
In this case, what is the signing key used for and/or why is it required?
正如您提到的帖子中所解释的,签名 key 仅用于签署 OpenIddict 颁发的 JWT token (如果您选择 JWT,则包括身份 token + 访问 token )。
如果您想使用默认 token 格式复制“临时加密/验证 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();
}
}
值得注意的是,签名 key 要求在最近的时间里放宽了:不再需要注册证书或临时 key ,除非您决定使用 JWT 访问 token 或启用隐式流动。因此,如果您使用密码流程,则不再强制添加 key 。
关于asp.net-core - 更改签名 key 不会使现有 token 失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42218864/