- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为快速概述,我正在尝试使用 https://github.com/dvsekhvalnov/jose-jwt 通过 C# 生成 ES256 算法 -JWT token 图书馆。
如说明所述:
ES256, ES384, ES256 ECDSA signatures requires CngKey (usually private) elliptic curve key of corresponding length. Normally existing CngKey loaded via CngKey.Open(..) method from Key Storage Provider. But if you want to use raw key material (x,y) and d, jose-jwt provides convenient helper EccKey.New(x,y,d).
CngKey.Open() 声明它打开一个现有 key ,但听上去我应该改用 CngKey.Import() 吗?当我尝试调用 CngKey.Import() 时,它返回以下错误:
The parameter is incorrect.
基本上我要问的是,将现有 PEM 文件转换为 Jose.JWT.Encode() 函数所需的 CngKey 对象的最简单方法是什么?任何帮助将不胜感激。谢谢!
下面是我的代码(出于安全目的,不是真正的私钥):
public string GenerateToken(int contactID, Database _db)
{
var contact = GetContact(contactID, _db);
var payload = new Dictionary<string, object>()
{
{"broker", 1},
{"contact_id", contact.id},
{"name", contact.fname + " " + contact.lname + ""},
{"iss", "www.somewhere.com"},
{"iat", (DateTime.Now - UnixEpoch).TotalSeconds},
{"nbf", (DateTime.Now - UnixEpoch).TotalSeconds},
{"exp", (DateTime.Now.AddDays(30) - UnixEpoch).TotalSeconds}
};
string privateKey =
"MHcCAQEffEIIIHHHHHHHHHHHHHHHffHHHHHHHHHHHHHHHHHHHHHHHoGgCCqGSM49" +
"AwEHhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhI+pRkAxAb13" +
"77vz2Yjjjjjjjjjjjjjjjjjjjjw==";
byte[] b = Convert.FromBase64String(privateKey);
CngKey cng = CngKey.Import(b, CngKeyBlobFormat.EccPrivateBlob);
string token = Jose.JWT.Encode(payload, cng, JwsAlgorithm.ES256);
return token;
}
最佳答案
我在使用 jose-jwt
时遇到了同样的问题,并使用我自己的 GetECDsaPrivateKey()
实现让它工作。请注意,您的项目应以 .NET 4.6.1 为目标。请按照以下步骤操作:
1.使用openssl生成一个p12 X509Certificate2
> openssl ecparam -name prime256v1 -genkey > private-key.pem
> openssl ec -in private-key.pem -pubout -out public-key.pem
> openssl req -new -key private-key.pem -x509 -nodes -days 365 -out public.cer
> winpty openssl pkcs12 -export -in public.cer -inkey private-key.pem -out publiccert.p12
2.通过读取上面生成的证书中的私钥生成一个JWT:
var claims = new Dictionary<string, object>()
{
{ "sub", "mr.x@contoso.com" },
{ "exp", 1300819380 }
};
var certificate = new X509Certificate2("publiccert.p12", "passcode");
string token = SignJWTWithCert(certificate, claims);
private static string SignJWTWithCert(X509Certificate2 cert, object claims)
{
var header = new { alg = "ES256", typ = "JWT" };
byte[] headerBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(header, Formatting.None));
byte[] claimsBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(claims, Formatting.None));
using (ECDsa ecdsa = cert.GetECDsaPrivateKey())
{
if (ecdsa == null)
throw new ArgumentException("Cert must have an ECDSA private key", nameof(cert));
var payload = Base64UrlEncode(headerBytes) + "." + Base64UrlEncode(claimsBytes);
var signature = ecdsa.SignData(Encoding.UTF8.GetBytes(payload), HashAlgorithmName.SHA256);
return payload + "." + Base64UrlEncode(signature);
}
}
关于c# JWT 将 ES256 PEM 文件加载到 CngKey (jose-jwt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129214/
Ed25519 PEM key 对生成如下: -----BEGIN PRIVATE KEY----- NC4CAQAwBQYcK2VwBCIEIIWUb0/MoKaBxQkmmPlHIGyPfDQb/
我正在尝试使用 node-jose 实现简单的 JOSE encrypt 和 decrypt 函数. 我的代码如下(使用Node 8.2.1编写) const { JWE } = require('n
我正在使用 jose 进行 python jwe 加密。 这是我的示例代码 import jose from time import time from Crypto.PublicKey import
我正在尝试使用 node-jose验证我的 JWT 的签名。我知道 secret ,但无法将此 secret 转换为用于验证的 JWK。 这是一个示例,说明我如何尝试使用我的 secret 创建我的
我正在使用 node-jose v0.11.0 ( https://www.npmjs.com/package/node-jose ) 进行 JWK 和 JWE 操作。我有一个 JWK 格式的 RSA
对示例代码中应用的概念 有疑问“带有 RSA 加密的 JSON 网络 token (JWT)” 引用:http://connect2id.com/products/nimbus-jose-jwt/ex
我正在尝试使用 SpringBoot 实现 Oauth2 授权服务器 guide作为引用。 我的 keystore 只有一个 key 。我已经成功创建了一个 JWToken(我可以在 jwt.io 上
我正在尝试创建 JWE 解密函数,但无法确定如何使用 Go Jose 接口(interface)来执行此操作。我已使用密码进行加密(我更喜欢此用例的密码): token := jwt.NewW
我使用 Nimbus JOSE + JWT 对每个资源请求在服务器和客户端之间来回传递 token 创建 JWT token 的代码: public class TokenProvider {
我正在尝试按照此处提供的示例创建嵌套的 json JWT http://connect2id.com/products/nimbus-jose-jwt/examples/signed-and-encr
我查看了 python-jose 和 jose,但似乎都不支持加密已签名的 JWT。例如,“jose”库支持单独签名和加密,无需嵌套。 我是否遗漏了什么,比如在库外嵌套 JWT 可能相当容易?如果是这
我对 python 有点陌生,之前从未使用过它来验证 jwt token 。 我正在编写一个 lambda 函数。我确信这个问题很简单,但似乎无法解决。 我不断收到此错误: { "errorTyp
这是我在 ubuntu 20.x 上为 JOSE/NODEJS (14.16) 应用程序生成 EdDSA 25519 key 对的命令: $ssh-keygen -o -a 100 -t ed2551
我正在努力理解如何使用 npm jose 模块( https://www.npmjs.com/package/jose )在我的 Node 应用程序中创建和验证签名的 JWT token 。我的场景是
我有一个函数,它接收一个 token ,对其进行解码,然后使用有效负载来执行一些逻辑。我想用我操纵的声明来生成 token 以测试该函数。 我从 https://mkjwk.org/ 生成了一个 ke
作为快速概述,我正在尝试使用 https://github.com/dvsekhvalnov/jose-jwt 通过 C# 生成 ES256 算法 -JWT token 图书馆。 如说明所述: ES2
这个问题在这里已经有了答案: Using the variable "name" doesn't work with a JS object (4 个答案) 关闭 6 年前。 当我在控制台中运行 v
如果我搜索“Jose”,结果为 0。如果我搜索“Josè”,“Jôse”也不会给出任何结果。 select name from TblName where name = 'Jose' or name
我正在尝试在 .NET 中生成 JWT token 。起初,我尝试使用“System.IdentityModel.Tokens.Jwt”,但它在 token 验证期间引起了问题,所以我切换到“jose
我正在尝试整合 Javascript Object Signing and Encryption (JOSE) jose使用我的 iOS 应用程序。 引用This Sample code : hong
我是一名优秀的程序员,十分优秀!