asp.net-core – 通过JWT Token授权

使用ASP.NET Identity 3.0的ASP.NET Core 5,我正在使用网页和apis.我正在使用OpenIddict发出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,我将获得成功授权.

解决方法

If I disable UseJsonWebTokens(),I can generate a token and authorise successfully. However,I am not sure that my certificate is validating the returned tokens.

在ASOS(OpenIddict背后的OpenID Connect服务器框架)中,有2种不同的内置序列化机制来创建和保护令牌:

>使用IdentityModel(由Microsoft开发的库)并生成可由第三方验证的标准令牌:

始终使用此过程创建标识令牌(根据定义为JWT),您可以调用UseJsonWebTokens()强制OpenIddict发出使用相同序列化过程的访问令牌.

您在调用AddSigningCertificate()时指定的证书始终用于对这些令牌进行签名.

>使用ASP.NET核心数据保护堆栈(也由Microsoft开发):

此堆栈专门生成“专有”令牌,这些令牌不应由第三方读取或验证,因为令牌格式不是标准格式,必然依赖于对称签名和加密.

这是我们用于授权代码和刷新令牌的机制,仅供OpenIddict本身使用.当您使用认令牌格式时,它也用于访问令牌.

在这种情况下,不使用您在调用AddSigningCertificate()时指定的证书.

相反,这些令牌始终由数据保护堆栈使用经过身份验证的加密算法(认情况下为AES-256-CBC和HMACSHA256)进行加密,从而提供真实性,完整性和机密性.为此,数据保护堆栈从存储在密钥环中的一个主密钥导出2个密钥(一个用于加密,一个用于验证).

How can I enforce the request to be validated with my certificate to make sure the JWT token is not tampered with.
What are the correct settings that will allow validation and authorisation of my JWT token,given that if I am not using JWT,I am getting authorised successfully.

要回答这些问题,如果您启用了日志记录并共享了跟踪,这将有所帮助.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....