标签: json-web-signature

将一些信息分配给生成的令牌后如何解决 JsonWebTokenError“无效签名”?

尝试验证令牌时遇到问题(在生成令牌之前我向其添加一些数据之前它工作正常)..但现在它似乎不起作用!

这就是我在用户发送 POST 请求(登录)时生成令牌的方式

require('dotenv')
const jwt       = require('jsonwebtoken');
const bcrypt    = require('bcryptjs')
const Role      = require('../models/Role');
const Section   = require('../models/Section');
const User      = require('../models/User');

// Login !
router.post('/', async (req, res) => {

    let sections_fetched = [];


    // Validate data 
        
    // Check username
    const user = await User.findOne({username: req.body.username });
    if(!user) return res.status(400).send('Wrong user login credentials !');

    // Check password
    const is_pass_valid = await bcrypt.compare(req.body.password , user.password);
    if (!is_pass_valid) return res.status(400).send('Wrong user login credentials !');


    // Get role Object: …
Run Code Online (Sandbox Code Playgroud)

node.js express jwt json-web-signature

13
推荐指数
1
解决办法
6万
查看次数

如何在 C# / .NET 中的服务器端验证 Google Identity Service (GIS) 访问令牌?

我正在从旧的 Google 登录库迁移到新的 Google Identity Services (GIS) 库。这是强制性的,因为从 2023 年 3 月起旧的将不再使用。

\n

之前,我做了(为了清晰起见,进行了简化):

\n
<script src="https://apis.google.com/js/api:client.js"></script>\ngapi.load();\nvar auth2 = gapi.auth2.init();\nauth2.attachClickHandler();\nonGoogleSignIn(googleUser); // attachClickHandler\'s callback\nvar profile      = googleUser.getBasicProfile(); // profile info accessible\nvar authResponse = googleUser.getAuthResponse(); // auth response accessible\nvar accessToken  = authResponse.id_token; // get actual access token\n
Run Code Online (Sandbox Code Playgroud)\n

现在,我正在尝试(为了清楚起见,进行了简化):

\n
<script src="https://accounts.google.com/gsi/client"></script>\nvar gisClient = google.accounts.oauth2.initTokenClient();\ngisClient.requestAccessToken();\ncallback(); // initTokenClient\'s callback\nvar accessToken = response.access_token; // get access token in callback\n
Run Code Online (Sandbox Code Playgroud)\n

使用旧的谷歌登录库,我验证了访问令牌服务器端,如下所示:

\n
Payload payload\xc2\xa0=\xc2\xa0await\xc2\xa0GoogleJsonWebSignature.ValidateAsync(accessToken);\n
Run Code Online (Sandbox Code Playgroud)\n

这还会在有效负载中返回用户的电子邮件和姓名。

\n

我从 GIS 获取的访问令牌比从 GAPI 获取的旧访问令牌短得多。

\n

在线令牌调试器 …

c# jwt google-oauth json-web-signature

8
推荐指数
1
解决办法
2807
查看次数

您什么时候使用不受保护的JWS标头?

我不明白为什么存在JWS不受保护的头文件.

对于某些上下文:JWS未受保护的头包含不受完整性保护的参数,并且只能使用带有JSON序列化的每个签名.

如果它们可以用作顶级标题,我可以看到为什么有人想要包含一个可变参数(这不会改变签名).然而,这种情况并非如此.

任何人都可以想到一个用例或知道为什么它们被包含在规范中?

谢谢!

JWS Spec

jwt json-web-token jose json-web-signature

5
推荐指数
1
解决办法
782
查看次数

在使用 JWS JSON 序列化的 JWS 中具有多个签名的用例是什么?

我阅读了可以在此处找到的 JSON Web 签名规范。该规范为 JSON Web 签名定义了两种序列化表示。一种是 JWS Compact Serialization,另一种是 JWS JSON Serialization 方法。JWS JSON 序列化表示允许一个具有多个签名。使用 JWS JSON 序列化的 JWS 示例是:

{
        "payload": "eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ",
        "signatures": [
            {
                "protected": "eyJhbGciOiJSUzI1NiJ9",
                "header": {
                    "kid": "2010-12-29"
                },
                "signature": "cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh
                -0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB
                --f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO
                --xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6Lbg
                GY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw"
            },
            {
                "protected": "eyJhbGciOiJFUzI1NiJ9",
                "header": {
                    "kid": "e9bc097a-ce51-4036-9562-d2ade882db0d"
                },
                "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU1Q"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

该规范暗示有时拥有多个签名可能是有益的。但是,我终其一生都想不出您需要拥有多个的原因。

那么,话虽如此,在 JWS 中拥有多个签名的用例是什么?

json jwt json-web-signature

3
推荐指数
1
解决办法
895
查看次数

可靠地验证 JWS 证书链和域

我正在 Node.JS 中编写后端代码来验证来自 Google SafetyNet API 的 JWS。我很惊讶没有为此找到现成的模块,因此我开始使用可用的库来研究 JWS 的一些简单验证:

首先,谷歌表示需要执行以下步骤:

  1. 从 JWS 消息中提取 SSL 证书链。
  2. 验证 SSL 证书链并使用 SSL 主机名匹配来验证叶证书是否已颁发给主机名 attest.android.com。
  3. 使用证书来验证 JWS 消息的签名。
  4. 检查 JWS 消息的数据,确保其与原始请求中的数据匹配。特别是,请确保时间戳已经过验证,并且应用程序签名证书的随机数、包名称和哈希值与预期值匹配。

(来自https://developer.android.com/training/safetynet/attestation#verify-attestation-response

我发现node-jose提供了一个简单的接口来验证JWS,并且它有一个允许嵌入密钥的选项。我试图准确了解此过程的作用以及它是否足以验证 JWS 的真实性?

const {JWS} = require('node-jose');
const result = await JWS.createVerify({allowEmbeddedKey: true}).verify(jws);

if (result.key.kid === 'attest.android.com') {
  // Are we good to go or do we manually need to verify the certificate chain further?
}
Run Code Online (Sandbox Code Playgroud)

使用嵌入式密钥是否确实可以x5c使用根 CA 以及针对证书的签名来验证嵌入式证书链?或者我是否需要明确从 Google 获取公钥来单独验证证书?

然后,一个有点相关的问题涉及 Google 用于执行此验证的 API:有一个 …

ssl node.js safetynet json-web-signature node-jose

3
推荐指数
1
解决办法
3320
查看次数

JWT.io 正在根据空密钥验证令牌并说签名已验证

我对此完全陌生,所以如果这完全是愚蠢的,请忍受我的问题。我正在学习如何使用https://jwt.io验证签名

以下是我在做什么

生成的公钥/私钥对

私钥

-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,4A6A48288A531DCA

m2glcvku6rdV8z0QBsBc3Hc72vG4NN3wIPnqdC47FTA3y9WiD7Ukh4m3ZpL2mraz
7PSblIe8ob/aaG9TYViIb4QRYZFg8z3jR6WeNEhC2EbC2CwkSSH3ug8ViQ+1i8d1
kMnQDK1i/s0BZvxlhKPuSy2kOIjelWctkDHvJyvU/WQ=
-----END EC PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

公钥

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHpqkegB/A/12vqfApHOaFXaJcHkyhNw1u9XnZe2+hiDT698U4c3iet5VyTo3D1DOe7Xi5dG07UorsMvWCmSbvU= 
Run Code Online (Sandbox Code Playgroud)

我使用这个网站生成ECDSA-256密钥对,密码为H2

创建 JSON 网络令牌 (JWT)

我使用http://jwtbuilder.jamiekurtz.com/生成令牌

我使用私钥对JWT. 以下是令牌

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIYXJpdCIsImlhdCI6MTU4Nzc1MjM3NCwiZXhwIjoxNjE5Mjg4Mzc0LCJhdWQiOiJodHRwczovL3d3dy5oYXJpdC5kZXYiLCJzdWIiOiJjb250YWN0QGhhcml0LmNvbSIsIkdpdmVuTmFtZSI6Ikhhcml0IiwiU3VybmFtZSI6IkhpbWFuc2h1In0.pmvGfBXH4603YMGYDB6qOXlQjhfdPulvbODrK70ihS0
Run Code Online (Sandbox Code Playgroud)

核实

我去网站https://jwt.io下面是我尝试过的视频

JWT 问题

当秘密为空时,JWT 如何验证并将其作为有效签名。我什至还没有提供秘密。

我错过了什么?

security jwt json-web-signature

2
推荐指数
1
解决办法
423
查看次数