jwt令牌,互操作dotnet核心和dotnet经典

问题描述 投票:2回答:1

可悲的是,关于这些东西的文档很难得到。

我有点陷入困境,因为我有一个系统可以获得一个新的基于dotnetcore的API,但我现在可以不替换主系统或它具有的安全处理。

在旧系统中,我们使用OWIN API的/ token端点生成令牌(从那时起,它就没有移植到dotnet核心)。

我们使用具有以下选项的OAuthAuthorizationServer:

new OAuthAuthorizationServerOptions()
{
    TokenEndpointPath = new PathString("/token"),
    AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(5) + TimeSpan.FromSeconds(10),
    Provider = new AppOAuthAuthorizationServerProvider("OBB"),
    RefreshTokenProvider = new AppOAuthBearerRefreshProvider(),
}

机器配置有validateionkey和decryptionkey,并设置为使用validation =“HMACSHA384”decryption =“3DES”

这很好,并且在web.config中使用硬编码的机器密钥进行签名。是的,要替换的东西 - 在2019年的dotnet核心2.2看起来像,当我们将整个东西移动到适当的oauth服务器时。

我现在需要在dotnet核心中使用该令牌。我认为我使用Microsoft.AspNetCore.Authentication.JwtBearer拥有正确的库,而令牌显然是一个JWT令牌。不过我可能错了。

我试图解码它,但我最终无处可去 - 所有调用返回invalid_token。

我用以下方式设置服务:

services.AddAuthentication(o =>
{
    o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = false,
        ValidateAudience = false,
        ValidateActor = false,
        ValidateIssuerSigningKey = false,
        ValidateLifetime = false,
        ValidateTokenReplay = false,
        // Specify the key used to sign the token:
        //IssuerSigningKey = descryptionkey,
        //RequireSignedTokens = false,
    };
});

我究竟做错了什么?我似乎无法找到任何关于如何获得在dotnet核心中接受的dotnet“正确”发布的令牌的文档。

我需要正确验证该令牌,并提取其中的一个信息(id)。

oauth-2.0 .net-core jwt owin
1个回答
0
投票

我使用JWT这个配置,也许这​​会对你有所帮助。

        services.AddAuthentication(options =>
                                   {
                                       options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                                       options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                                   }
                                  )
                .AddJwtBearer(options =>
                {
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateAudience = true,
                        ValidAudience = appSettings["JwtAudience"],
                        ValidateIssuer = true,
                        ValidIssuer = appSettings["JwtIssuer"],
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,
                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(appSettings["JwtSigningKey"]))
                    };
                });

此外,标题密钥是授权,其值为格式为Bearer xxx,其中xxx是JWT。

© www.soinside.com 2019 - 2024. All rights reserved.