标签: jose

JWT on .NET Core 2.0

我一直在冒险让JWT在DotNet核心2.0上工作(现在到达最终版本).有大量的文档,但是所有的示例代码似乎都在使用已弃用的API并且刚刚进入Core,它确实令人眼花缭乱地想出它应该如何实现.我尝试使用Jose,但应用程序.不推荐使用UseJwtBearerAuthentication,并且没有关于下一步操作的文档.

有没有人有一个使用dotnet core 2.0的开源项目,它可以简单地从授权头解析JWT并允许我授权HS256编码的JWT令牌?

类下面不抛出任何异常,但没有请求授权,和我没有得到任何指示,为什么他们是未经授权的.响应是空的401,所以对我来说,表明没有异常,但秘密不匹配.

奇怪的是我的令牌是用HS256算法加密的,但是我没有看到任何指示器要求它强制它在任何地方使用该算法.

这是我到目前为止的课程:

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Net.Http.Headers;
using Newtonsoft.Json.Linq;
using Microsoft.IdentityModel.Tokens;
using System.Text;

namespace Site.Authorization
{
    public static class SiteAuthorizationExtensions
    {
        public static IServiceCollection AddSiteAuthorization(this IServiceCollection services)
        {
            var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("SECRET_KEY"));

            var tokenValidationParameters = new TokenValidationParameters
            {
                // The signing key must match!
                ValidateIssuerSigningKey = true,
                ValidateAudience = false,
                ValidateIssuer = false, …
Run Code Online (Sandbox Code Playgroud)

c# jwt .net-core jose

79
推荐指数
4
解决办法
5万
查看次数

JOSE、JWA、JWE、JWK、JWS 和 JWT 有什么区别?

JOSE、JWA、JWE、JWK、JWS 和 JWT 之间有什么区别?它们之间有何关系?

jwt jwe jwk jose

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

无效语法 jose.py

我试图使用 Jose 库对我的 Flask 应用程序之一进行身份验证。使用 import 语句如下

from jose import jwt
Run Code Online (Sandbox Code Playgroud)

但它抛出以下错误,

Traceback (most recent call last):
   File "F:/XXX_XXX/xxxx-services-web/src/auth.py", line 6, in <module>
      from jose import jwt
   File "F:\Users\XXXX_XXXXX\AppData\Local\Programs\Python\Python37\lib\site-packages\jose.py", line 546
      print decrypt(deserialize_compact(jwt), {'k':key},
            ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

这个库过时了吗?

python jose

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

Ed25519 的 alg 值?

RFC7518 具有JWT 中使用的算法值列表EdDSA然而,诸如 之类的没有任何价值Ed25519。在 Jose 验证时也不Ed25519接受作为有效值。正确的 alg 值是多少Ed25519

jwt ed25519 jose

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

为 JOSE/NODEJS 生成 EdDSA 25519 密钥对

ubuntu 20.x这是我用来为 JOSE/NODEJS (14.16) 应用程序生成 EdDSA 25519 密钥对的命令:

$ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id-ed25519 -C myemail_address
Run Code Online (Sandbox Code Playgroud)

这是生成的私钥:

-----BEGIN OPENSSH PRIVATE KEY-----
a3BlbnNzaC1rZXktdjEAAAAABG5vbmVAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACAp92w+fwodL4kaUDrNghdZScdcg54IJOO6tLpG91oeKgAAAJj71Y9w+9WP
cAAAAAtzc2gtZWQyNTUxOQAAACAp92w+awodL4kaUDrNghdZScdcg54IJOO6tLpG91oeKg
AAAEDsEfbdyx4HaM5cL1f2Ag2Knb0NDCIiuIDsm6FwR5NJESn3bD5/Ch0viRpQOs2CF1lJ
c1yDnggk47q0ukb3Wh4qAAAAFGVtY2yhYjIwMTFAZ21haWwuY29tAQ==
-----END OPENSSH PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

私钥有 366 字节而不是 32 字节。

这是公钥:

BAAAC3NzaC1lZ1I1NTE5AAAAICn3CD5/Ch0viRpQOs2CF1lJx1yDnggk47q0ukb3Wh4q myemail_address
Run Code Online (Sandbox Code Playgroud)

不包括电子邮件地址的话,它有 63 字节,看起来太长了。

这是为 EdDSA 25519 生成密钥对的正确方法吗?如果不是,正确的方法是什么?

jwt jose

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

使用node-jose,如何解密刚刚加密的数据?

我正在尝试使用简单JOSE encryptdecrypt函数node-jose.

我的代码如下(使用Node 8.2.1编写)

const { JWE } = require('node-jose');

const jose = (publicKey, privateKey) => {
  async function encrypt(raw) {
    if (!raw) throw new Error('Missing raw data.')
    const buffer = new Buffer(JSON.stringify(raw));
    return JWE.createEncrypt(publicKey).update(buffer).final();
  }

  async function decrypt(encrypted) {
    if (!encrypted) throw new Error('Missing encrypted data.')
    const buffer = new Buffer(JSON.stringify(encrypted));
    return JWE.createDecrypt(privateKey).decrypt(buffer);
  }

  return { encrypt, decrypt }
}

module.exports = jose;
Run Code Online (Sandbox Code Playgroud)

我使用生成RSA密钥对generate-rsa-keypair.

因此,通过此代码进行测试,加密方面的工作正常

const { JWK } = require('node-jose'); …
Run Code Online (Sandbox Code Playgroud)

javascript encryption rsa node.js jose

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

从密钥对字符串进行签名和加密

我是 jwt 的新手,在阅读了大量网页后,我没有找到如何使用从该网站https://mkjwk.org/生成的密钥对生成令牌(签名和加密)的示例。我认为这不会很困难。我认为这是生成签名令牌的方法(我不知道是否正确):

        RSACryptoServiceProvider rsaCrypto = new RSACryptoServiceProvider();

        var payload = new Dictionary<string, object>()
        {
            {"jti", "ORIGEN_" + Guid.NewGuid().ToString()},
            {"iat", DateTime.UtcNow},
            {"exp", DateTime.UtcNow.AddYears(1)},
            {"login", "USER" },
            {"password", "PASSWORD" },
            {"origen", "ORIGEN" }
        };

        // Contains both public and private keys to sign
        var headers = new Dictionary<string, object>()
        {
            { "kty", "RSA" },
            { "d", "A7Q8cttv_CSG4CJkX_xlU5lUoeRrCPZpyZx9eVaD7zi-tE7wDPKNmJPRP6uR_LA2YVXMmfY9w8q1_v_MiYxkYnFgZqNZlKdwucSQUlnfX5Tt806qh_323h5NnHrKweL-98_d8R4RuZXCWEQ3X0QDCVfccaLVVqLJy8S5zlx0aAVuBJxLxBHFRO700qdUN-RaMjHULoOnE1KbwmfKPfGlLL0YWPHQ9t-qIBh6OSZsDZh30K4VLF8sRXkGgn81_Byp4hK9tCfG98R6fWUM2_FCQrC9R1hO-KTsLffRzMboWe-2ymZGQfZKO-gtFaQH7_AjdVnQYMyKhSSCGYAAroSZAQ"},
            { "e", "AQAB" },
            { "use", "enc"},
            { "kid", "RPA" },
            { "alg", "RS256" },
            { "n", "qJPwMcHtb7xFGGczn20IiEtrPVehquyT6lxIJa_e4vcZE33uM6myVZWocTZWzTDmrNT3bJghEpLOhrgYatT3QnJIiTM9KAD01kYPc5cP5yo6Wmu0YjivqL3Rj7dUvi2pvl7juwYxt1_8zfdnBN5GpBIYcaY3ulVo_OSL7TOxJrua5IMhilQz6kqta3-Rgz3GSglOs94RHRvorYxMyHPQ6KhwSlh_zLzJQZ-0-AZ4yaMPdVwEaaEJpL-odYmRudX4E0t42dExLf_q1rpRfvTcdFSwfsJ7FmQcOtlc340WUgr4BHJfwrNIE4i-TFqrB4zSQJVKHlBfLeGKiYZQPD7igw" }
        };

        string …
Run Code Online (Sandbox Code Playgroud)

.net c# encryption sign jose

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

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

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

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

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

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

谢谢!

JWS Spec

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

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

如何使用 ES256 alg 的 JWK 验证 JWT?

我有智威汤逊作为

var signedJwt = "eyJhbGciOiJFUzI1NiIsImtpZCI6IjZjNTUxNmUxLTkyZGMtNDc5ZS1hOGZmLTVhNTE5OTJlMDAwMSIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1OTY3MzA4ODMsInJlcXVlc3RfYm9keV9zaGEyNTYiOiI4NDMyODhkMWMxYmM0NzhlMTBhOTM2NWQ1YjIzY2U5ZWZlY2E2ZjdkYjA3NDQ3Y2JmNjU4YTg3ZjEzZjI1ZjJmIn0.3yQY6gtNq0lQlx6eNLO_3coGqf2VkX2CBRWam9Lz0dcVvr8h4LkYfuZMwQf1fzZ_XXHEV_o17LciyBC-O72UUw"
Run Code Online (Sandbox Code Playgroud)

然后我得到一个公钥:

{
    "alg": "ES256",
    "created_at": 1560466143,
    "crv": "P-256",
    "expired_at": null,
    "kid": "6c5516e1-92dc-479e-a8ff-5a51992e0001",
    "kty": "EC",
    "use": "sig",
    "x": "35lvC8uz2QrWpQJ3TUH8t9o9DURMp7ydU518RKDl20k",
    "y": "I8BuXB2bvxelzJAd7OKhd-ZwjCst05Fx47Mb_0ugros"
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 C# 中的 Jose 库进行解码

var claims = Jose.JWT.Decode(signedJwt, publicKey, JwsAlgorithm.ES256);
Run Code Online (Sandbox Code Playgroud)

每次我收到错误时:

EcdsaUsingSha 算法期望密钥为 CngKey 或 ECDsa 类型。

我认为我使用密钥的方式不正确,但我找不到任何方法将 json 密钥转换为 pem 或任何有效的东西。

c# jwt jwk asp.net-core jose

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

如何使用 npm Jose 创建签名的 JWT,然后验证此令牌?

我正在努力了解如何使用 npm jose 模块(https://www.npmjs.com/package/jose)在我的 Node 应用程序中创建和验证签名的 JWT 令牌。我的场景是这样的:我想签署经过身份验证的请求来访问资源。我可以成功为此请求授予令牌创建 JWT 声明,该声明尊重 \xe2\x80\x9cits\xe2\x80\x9d 和 \xe2\x80\x9caud\xe2\x80\x9d、\xe2\x80\x9cexp\ 的属性xe2\x80\x9d 等,但我想对其进行签名(即使用 SignJWT 对象和 \xe2\x80\x98sign\xe2\x80\x99 方法),以便当它作为请求我可以验证它并授予或拒绝访问。\n\n\xe2\x80\x9csign\xe2\x80\x9d 方法不\xe2\x80\x99t 似乎喜欢我为 \xe2\x80\x98key\xe2 传递的任何内容\x80\x99 参数(我没有传递任何选项 \xe2\x80\x94 也许我应该传递,但是什么?)。\n我正在尝试使用 RSA 密钥对。我想用私钥签名并用公钥验证。为了满足我的迫切需要,我想我可以使用对称密钥,但我正在考虑其他一些未来场景,在这些场景中我将需要证书密钥的这种经典 PKCS 关系。无论如何,我不\xe2\x80\x99认为这个选择与当前我的进步的障碍有任何关系。\n我首先尝试使用 jose/util/generate_key_pair 创建我的公共/私有对。但是当我去使用密钥时,错误告诉我我的实现不支持这一点。因此,我转而尝试在我的应用程序之外创建 \xe2\x80\x98pem\xe2\x80\x99 证书并应用它(作为文本),但这也失败了。\xe2\x80\x98sign\xe2\x80\x99 方法报告密钥必须是 \xe2\x80\x98KeyLike\xe2\x80\x99、\xe2\x80\x98CryptoKey\xe2\x80\x99 或 \xe2 \x80\x98Uint8Array\xe2\x80\x99 类型。好吧,UInt8Array(节点缓冲区)没有足够的类型信息:它不\xe2\x80\x99t说明该缓冲区中的内容,而\xe2\x80\x9cKeyLike\xe2\x80\x9d是一个如此模糊的定义,它\xe2\x80\x99s 可以忽略。在请求搜索引擎的神谕之后,我发现我可以使用 Node API 中的以下内容创建 CryptoKey 格式的密钥对:

\n
crypto.webcrypto.subtle.generateKey(\n    {\n        name: \'RSASSA-PKCS1-v1_5\',\n        modulusLength: 2048,\n        publicExponent: new Uint8Array([1, 0, 1]),\n        hash: "SHA-256"\n    },\n    true,\n    [\xe2\x80\x98sign\xe2\x80\x99, \xe2\x80\x98verify\xe2\x80\x99]\n).then((pair:any) => {\n    serverInstance.keyPair = pair\n})\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我到达签名部分时:\nsiaToken.sign(serverInstance.keyPair.privateKey).then(signature => {

\n

我收到一个异常,报告\n\xe2\x80\x9cTypeError: CryptoKey 不支持此操作\xe2\x80\x9d …

node.js jwt jose

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