通过JWT令牌授权
带有ASP.NET Identity 3.0的ASP.NET Core 5,我正在使用网页和apis。我正在使用OpenIddict发布JWT令牌并进行身份验证。我的代码如下这样:通过JWT令牌授权
X509Certificate2 c = new X509Certificate2(@"tokensign.p12", "MyCertificatePassword");
services.AddOpenIddict<WebUser, IdentityRole<int>, WebDbContext, int>()
.EnableTokenEndpoint("/api/customauth/login")
.AllowPasswordFlow()
.UseJsonWebTokens()
.AddSigningCertificate(c);
如果我禁用UseJsonWebTokens(),我可以生成一个令牌和成功授权。但是,我不确定我的证书是否验证返回的令牌。
当启用UseJsonWebTokens时,我可以在此端点发出JWT令牌。但是,我无法验证任何请求!
我使用下面的代码在应用程序配置:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
RequireHttpsMetadata = false,
Authority = "http://localhost:60000/",
Audience = "http://localhost:60000/",
});
app.UseOAuthValidation();
app.UseIdentity();
app.UseOpenIddict();
app.UseMvcWithDefaultRoute();
- 我怎么能强制执行请求与我的证书,以确保JWT令牌不被篡改验证。
- 什么是正确的设置,将允许我的JWT令牌的验证和授权,假设如果我没有使用JWT,我正在成功授权。
如果我禁用UseJsonWebTokens(),我可以生成一个令牌和成功授权。但是,我不确定我的证书是否验证返回的令牌。
在ASOS(后面OpenIddict的ID连接服务器架构),有2个不同的内置序列化机制,以创造和保护标记:
- 一个使用IdentityModel(库的开发微软)并产生标准令牌由第三方可验证:
身份令牌(JWT定义)使用THI始终创建您可以拨打UseJsonWebTokens()
强制OpenIddict发出使用相同序列化过程的访问令牌。
您在致电AddSigningCertificate()
时指定的证书总是用于签署这些令牌。
- 使用ASP.NET的核心数据保护堆栈(也由微软公司开发)一:
这个栈完全产生并不意味着要读取或验证“专有”的标记由第三方,因为令牌格式不是标准的,并且必然依赖于对称签名和加密。
这是我们用于授权代码和刷新令牌的机制,它们只能用于OpenIddict本身。当您使用默认令牌格式时,它也用于访问令牌。
在这种情况下,您没有使用调用AddSigningCertificate()
时指定的证书。
相反,这些令牌总是使用Authenticated Encryption
算法(默认情况下,AES-256-CBC和HMACSHA256)由数据保护堆栈进行加密,该算法提供真实性,完整性和机密性。为此,数据保护堆栈中的两个密钥(一个用于加密,一个用于验证)从存储在密钥环中的一个主密钥导出。
我该如何执行请求来验证我的证书,以确保JWT令牌没有被篡改。 什么是正确的设置,将允许我的JWT令牌的验证和授权,假设如果我没有使用JWT,我正在成功授权。
要回答这些问题,这将有助于您启用日志记录并共享您的跟踪。
请不要将标签置于问题标题! http://*.com/help/tagging – Tseng