当前位置: 首页 > 知识库问答 >
问题:

如何使用jwt手动验证从自定义授权服务器获得的令牌。伊奥?

王锐
2023-03-14

我正在学习关于OAuth2和OpenID连接的实验与ASP. NET核心和识别服务器4.到目前为止,我通过遵循特定的Udemy课程创建了一个受保护的API服务器、一个授权服务器和一个客户端。事情进展顺利,因为客户端能够从授权服务器获取访问令牌,并使用它访问ASP. NET Core Web API项目中受保护的API。

但是,我很好奇如何手动验证从授权服务器获得的JWT。我得到的代币是:

Eyjhbgcioizuzi1niisimtpzci6ijdimjm1nzyymtrlotg3zje3ntdjmwyxnde1ztg4ogeyiiwidhlwijoilduin0。EYJUYMYYYMYNZMSIV4CCI6MTZYWYYAHR0CDOVL2XVY2FSAG9ZDDO1MDAWIIYXVKIJPBIMH0DHA6LY9SB2NHBGH3Q6NTAWMC9YZXNVDxJZXMILCJIYYW5RT2ZEB3ROZRBCGKIXSWIY2XPZW50X2LKIIY2XPZW50IIWIC2NVCGUIOLSIYMFU9MRG90TMV0xPIL19。2.在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,在一个项目上,一个项目上,在一个项目上,一个项目在一个项目上,一个项目在一个项目上,一个项目上,一个项目在一个项目在一个项目上,一个项目上,一个项目在一个在一个项目在一个项目上,在一个项目上,一个项目在一个项目上,一个项目在一个项目在一个项目在一个项目上,一个在一个项目的BOFPX1GLPSO0CWVTFHWANG

当我在jwt上解码时。io网站我得到标题:

{
  "alg": "RS256",
  "kid": "7b23576214e987f1757c1f1415e888a2",
  "typ": "JWT"
}

和有效载荷:

{
  "nbf": 1553256173,
  "exp": 1553259773,
  "iss": "http://localhost:5000",
  "aud": [
    "http://localhost:5000/resources",
    "bankOfDotNetApi"
  ],
  "client_id": "client",
  "scope": [
    "bankOfDotNetApi"
  ]
}

因为我使用了RS256算法进行签名,所以我需要向jwt添加公钥。io来验证令牌。但是我从哪里得到这个公钥呢?如果我转到身份验证服务器的发现endpoint(例如。http://localhost:5000/.well-已知/openid配置/jwks)我得到以下数据:

{
    keys: [
        {
            kty: "RSA",
            use: "sig",
            kid: "7b23576214e987f1757c1f1415e888a2",
            e: "AQAB",
            n: "509tIiUvmKkjjGOwzKElduRqpRND7YO-Op-IlsAeNwTlxY9_t22XfCqmxUyNvuvmdIVYXz-utl5bee3Tjwp8e7ok-Vn2uX-nI0jBcjTIKL0arbd7Qo5XgvICU4x-UcINrHtqMnY4S_R0uMKgaJkl3105bh9svQh--65tknjiKqmefT4M5SLHStWTisy2e0YwiaqvLam-O_rtbEawMy5-4avZep33y9Wz_JlgWyQ4jKD1Kn8mNGybjRoW3FJRkqzVNUSrGzjqwdDPL1cZOzM2HnbBqwVSFNnJiRYxPxKL_N8Q4CS9e2OVRjTof_EdzTTGC5mkOPhBCjpmvYS5d0j6JQ",
            alg: "RS256"
        }
    ]
}

但哪一个是公钥?我尝试将nekid的值粘贴到jwt。“验证签名”部分中公钥文本字段下的io页面,但我总是收到“无效签名”错误。

所以,我如何从发现endpoint获取RS256令牌的公钥,以及如何在jwt中使用它手动验证令牌。io网站?

共有1个答案

丌官子安
2023-03-14

将整个(第一个也是唯一的)对象值放在那里,包括花括号,至少包括以下内容:

{ 
     "kty":"RSA",  
     "kid":"7b23576214e987f1757c1f1415e888a2", 
     "e":"AQAB", 
     "n":"509tIiUvmKkjjGOwzKElduRqpRND7YO-Op-IlsAeNwTlxY9_t22XfCqmxUyNvuvmdIVYXz-utl5bee3Tjwp8e7ok-Vn2uX-nI0jBcjTIKL0arbd7Qo5XgvICU4x-UcINrHtqMnY4S_R0uMKgaJkl3105bh9svQh--65tknjiKqmefT4M5SLHStWTisy2e0YwiaqvLam-O_rtbEawMy5-4avZep33y9Wz_JlgWyQ4jKD1Kn8mNGybjRoW3FJRkqzVNUSrGzjqwdDPL1cZOzM2HnbBqwVSFNnJiRYxPxKL_N8Q4CS9e2OVRjTof_EdzTTGC5mkOPhBCjpmvYS5d0j6JQ"
}
 类似资料:
  • 在我的网络项目中,我想让用户使用用户名/密码和微软帐户登录。技术-堆栈: Asp.网络核心 角 Azure应用服务 首先,我创建了用户名/密码登录。这样地: 启动。反恐精英: 登录方式: 并通过[授权]保护我的api enpoints。到现在为止,一直都还不错。。。这很有效。 现在我想添加一个登录方法与Microsoft帐户。我使用Azure应用服务身份验证/授权(https://docs.mic

  • 在JWT配置中,我不想做任何花哨的事情,只是想让它暂时通过: 我得到以下异常: 我对此的理解是:看起来,当Google发布访问令牌时,授权服务器(作为Google OAuth的客户机)试图将访问令牌解码为JWT,并抛出异常,因为Google的令牌不是有效的JWT(它只是一个访问令牌)。

  • 我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut

  • 我试图用oauth2和jwt为我的API添加安全性。所以目前我可以使用以下命令并获得访问令牌。curl客户端:secret@localhost:8080/oauth/token-d grant_type=password-d username=user-d password=password 显然,我不打算为每个用户调用它))我的问题是在哪里调用这个命令?我应该创建像“localhost:8080

  • 我目前正在构建一个web应用程序,其后端完全构建在API Gateway/lambda中。我构建了一个自定义的JSON Web令牌(JWT)授权器来授权用户。目前我正在头字段中传递令牌。 不幸的是,我只能定义一个头字段,将令牌发送到API网关。我的应用程序将令牌存储在一个cookie中。 有什么办法吗?谢谢!

  • 对于带有PKCE的Oauth 2.1,官方示例Spring授权服务器默认返回一个access_token和id_token https://github . com/spring-projects/spring-authorization-server/tree/main/samples/default-authorization server endpoint/oauth2/token有没有可能

  • 经过大量阅读,我找到了一种实现自定义JWT承载令牌验证器的方法,如下所示。 : 自定义验证器类: 如果令牌被盗,我想添加一个额外的安全层来验证请求是否来自生成令牌的同一个客户端。 问题: 是否有任何方法可以访问类中的,以便根据当前客户端/请求者添加自定义验证 我们是否有其他方法可以使用这种方法/中间件验证请求者的真实性

  • 嗨,伙计们,我正在开发应用程序使用spring boot和spring security在我的应用程序中进行身份验证,我使用自定义令牌,并且我能够成功地对用户进行身份验证。现在我想添加自定义授权到我的应用程序我想通过以下方式进行授权: 我的自定义userDetails服务如下: