gpt4 book ai didi

node.js - jsonwebtoken 未在 Nodejs Express 中解码 jwt

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:17 25 4
gpt4 key购买 nike

我正在使用 IdentityServer4 生成 JWT。这是使用 Angular 将其发送到 SPA。 SPA 可以解码 token 并获取声明,例如角色。

const tokenPayload = jwt_decode(token);
return tokenPayload.role === expectedRole;

相同的 token 被发送到 NodeJS 中的 API。我尝试使用 jsonwebtoken 解码 JWT,但无法让它解码。

const token = ExtractJwt.fromAuthHeaderAsBearerToken()(req);
console.log('Reading token: ' + token);
const decoded = jwt.verify(token, 'supersecret',
{
typ:"JWT",
algorithms: ["RS256"],
issuer: 'http://localhost:5500',
audience: 'adApi' }
);
console.log('Decoded token: ' + decoded);

我不断收到错误:“错误:错误:0906D06C:PEM 例程:PEM_read_bio:无起始行”

我明白文档说我应该使用 PEM 文件而不是“supersecret”。

问题:为什么“jwt_decode”可以如此轻松地解码 token ?如何生成 PEM 文件。

这是我正在使用的配置信息。让我提醒您,这是使用 IdentityServer4 的 ASPNET Core Identity。

using IdentityServer4;
using IdentityServer4.Models;
using System.Collections.Generic;

namespace XYZ.Identity
{
public class IdentityServerConfig
{
// scopes define the resources in your system
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile()
};
}

public static IEnumerable<ApiResource> GetApiResources()
{
return new[]
{
new ApiResource
{
Name = "adApi",
DisplayName = "adApi Resource",
Description = "XYZ Admin API",
ApiSecrets = { new Secret("supersecret".Sha256()) },
Scopes = { new Scope("adApi") },
UserClaims = {
"name", "role"
}
}
};

}

public static IEnumerable<Client> GetClients()
{
// client credentials client
return new List<Client>
{
new Client
{
ClientId = "apiclientid",
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
ClientSecrets =
{
new Secret("supersecret".Sha256())
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"adApi"
}
}
};
}
}
}

提前谢谢您!

最佳答案

jwt_decode 仅解码 token 而不验证签名。无需在前端验证签名,因为如果后端没有验证授权,您就永远不会有任何 secret 。

要尝试使用对称签名 key 的签名 token ,您需要将算法RS256更改为对称算法,例如HS256(对于verify,您可以将其添加到允许的算法数组中)。

关于node.js - jsonwebtoken 未在 Nodejs Express 中解码 jwt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com