标签: jose

node-jose 解释/示例?

我想在 JWT 中使用基于令牌的身份验证(如果可能,已签名和加密)。我在服务器端使用 NodeJS。

我正在尝试使用这个 node-jose 模块:https : //github.com/cisco/node-jose

我对生成/存储密钥和加密算法了解不多。即使文档看起来很清楚,我也不明白部分密钥和密钥存储(直到签名部分):https : //github.com/cisco/node-jose#keys-and-key-stores

  • 我需要如何生成以及我需要在我的服务器节点应用程序中存储密钥的位置,然后允许我签署和验证我的令牌?我需要使用对称密钥或非对称公钥私钥对吗?

我想这取决于我需要什么,但由于我的加密水平,我不知道我需要什么......

然后在签名部分,当我需要使用密钥时,我不太了解这部分https://github.com/cisco/node-jose#keys-used-for-signing-and-verifying

  • 我怎么知道在 OCT、EC、RSA 等之间使用哪一种?最后,他们在签名部分谈论的输入缓冲区是什么?

我可以解释一下这些问题吗?

先感谢您。

javascript key token node.js jose

4
推荐指数
1
解决办法
7172
查看次数

jose 中是否有任何实用程序可以将 Ed25519 的密钥从 PEM 转换为 JWK?

Ed25519PEM密钥对生成如下:

-----BEGIN PRIVATE KEY-----
NC4CAQAwBQYcK2VwBCIEIIWUb0/MoKaBxQkmmPlHIGyPfDQb/U3D6jQ+gMUGtvpa
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
NCowBQYDK2VwAyEAWFnlEbTVgD4TilnSzyDmZK16dm1IeQURtHFcLhSwmDo=
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

在 中jose 3.11.1parseJwk接受JWK输入,用于生成用于签名和验证的密钥。将密钥jose转换为在第三方实用程序中使用或与第三方实用程序一起使用是否有实用程序?我没有找到一个项目。PEMJWKpaseseJwknodejs

jose

4
推荐指数
1
解决办法
3100
查看次数

编写一个带有导入子路径打字稿选项的包

我编写了一个包(我们称之为它)commons和另一个导入它的项目。
我不想导入整个包,而只想导入该包的一个子路径。
import { client } from '@commons/clients'相反,import { client } from '@commons'

我看到了诸如jose之类的打字稿包可以实现这种行为。
例如import createRemoteJWKSet from 'jose/jwks/remote'

经过一番研究,我确实发现我可以package.json用 key 来定义这种行为exportsjs不幸的是,据我测试,这似乎只适用于纯文本,不适用于打字稿。另外,我发现打字稿exports在某些线程中尚不支持。像这样的包如何jose管理这个?

package typescript jose

4
推荐指数
1
解决办法
1117
查看次数

如何验证 Microsoft jwt id_token?

我正在使用从 Microsoft 到客户端的 jwt 令牌来验证从它到 Web API(服务器)的请求。我可以控制客户端(js)和服务器(Python)的代码。

在客户端,我使用以下请求来获取令牌(用户通过租户上的密码/2FA 声明):

`https://login.microsoftonline.com/${TENANT_ID}/oauth2/v2.0/authorize
            ?response_type=id_token+token
            &client_id=${CLIENT_ID}
            &redirect_uri=${redirect_uri}
            &scope=openid+email+profile
            &state=${guid()}
            &nonce=${guid()}`
Run Code Online (Sandbox Code Playgroud)

这里guid有一个唯一的值,TENANT_ID是租户和CLIENT_ID客户。

获得此令牌后,我将其作为授权标头发送,如下所示:

init = {
    headers: {
       'Authorization': `Bearer ${token}`,
    }
}

return fetch(url, init).then(response => {
    return response.json()
})
Run Code Online (Sandbox Code Playgroud)

在服务器上,我然后检索令牌并验证它:

if 'Authorization' in request.headers and request.headers['Authorization'].startswith('Bearer '):
    token = request.headers['Authorization'][len('Bearer '):]
    from authlib.jose import jwt
    claims = jwt.decode(token, jwk)
Run Code Online (Sandbox Code Playgroud)

jwk的内容在哪里https://login.microsoftonline.com/{TENANT_ID}/discovery/v2.0/keys

整个流程一直工作到验证失败,并出现以下错误:

authlib.jose.errors.InvalidHeaderParameterName: invalid_header_parameter_name: Invalid Header Parameter Names: nonce
Run Code Online (Sandbox Code Playgroud)

这表明令牌的标头包含一个密钥nonce(我验证了它)。

查看 Microsoft 对此的文档, …

jwt jose microsoft-identity-platform

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

结合JWE和JWS

只要了解JOSE,我就会知道JWE用于加密,JWS用于签名。我似乎无法找到示例的是经过加密和签名的有效负载。

假装我有一个有效载荷hello world。做这样的事情是正确的吗?JWS(JWE('hello world')加密的JWE作为JWS的有效负载?

encryption json jwt jwe jose

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

从字符串创建 NodeJS KeyObject

如何从 .env 文件中的随机字符串创建 NodeJS Crypto KeyObject?

我使用jsonwebtoken来创建/验证 JWT,但它无法在 nextjs 中间件边缘函数中运行,因此我想迁移到使用jose。问题是,在 jose 中,您无法使用 .env 文件中的秘密字符串对 JWT 进行签名,您需要创建一个加密 KeyObject 并使用它来对 JWT 进行签名。

// example env file
JWT_SECRET=Swe4g7c?UBm5Nrd96vhsVDtkyJFbqKMTm!TMw5BDRLtaCFAXNvbq?s4rGKQSZnUP
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的 API 创建 KeyObject,但我收到 jose 的错误:

// example env file
JWT_SECRET=Swe4g7c?UBm5Nrd96vhsVDtkyJFbqKMTm!TMw5BDRLtaCFAXNvbq?s4rGKQSZnUP
Run Code Online (Sandbox Code Playgroud)

我还尝试使用 Uint8Array,因为jose 文档说我可以,但我收到此错误:

import crypto from 'crypto'; 
const key = crypto.createSecretKey(process.env.JWT_SECRET, 'utf-8'); 
const jwt = new jose.SignJWT(payload).sign(key); 

// Error: KeyObject or CryptoKey instance for asymmetric algorithms must not be of type "secret."
Run Code Online (Sandbox Code Playgroud)

预先感谢您的任何帮助、评论、链接、资源!

cryptography node.js jwt jose next.js

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