AWS在此处描述了令牌验证:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html?icmpid=docs_elbv2_console 它应该分为3步进行:
1. 从令牌中获取密钥ID 2. 从aws alb端点读取公钥 `(https://public-keys.auth.elb.' + region + '.amazonaws.com/' + key id)` 3. 使用密钥解密有效载荷
这是我得到的JWT:
因此,关键id为:eyJ0eXAiOiJKV1QiLCJraWQiOiJjODE4ZTcxNi01OTAxLTQzOWQtOWFlZC1lYmRmODAyYjZkYTkiLCJhbGciOiJFUzI1NiIsImlzcyI6Imh0dHBzOi8vc2llbWVucy1xYS0wMDA2OS5ldS5hdXRoMC5jb20vIiwiY2xpZW50IjoiMndsS3k0YlRXbGpZWm9KYXZRSVFqVTE3OUprVG4zNDAiLCJzaWduZXIiOiJhcm46YXdzOmVsYXN0aWNsb2FkYmFsYW5jaW5nOmV1LWNlbnRyYWwtMTo0ODU2ODM0ODcxOTY6bG9hZGJhbGFuY2VyL2FwcC9maW5kLXRlc3QtYWxiLzU3YzBmMWYzZjg0YzZjMjEiLCJleHAiOjE1NzU1NDMwMzN9.eyJzdWIiOiJvYXV0aDJ8bWFpbi10ZW5hbnQtb2lkY3xzYW1scHxTaWVtZW5zfFowMDJFSk5VIiwiZ2l2ZW5fbmFtZSI6IlJhcGhhZWwiLCJmYW1pbHlfbmFtZSI6IlNjaG5haXRsIiwibmlja25hbWUiOiJSYXBoYWVsIiwibmFtZSI6IlJhcGhhZWwgU2NobmFpdGwiLCJwaWN0dXJlIjoiaHR0cHM6Ly9zLmdyYXZhdGFyLmNvbS9hdmF0YXIvODkzNWVlY2QzMDc2ZTAyMTQ5ODE2MTZmZjBkZTRkZjI_cz00ODAmcj1wZyZkPWh0dHBzJTNBJTJGJTJGY2RuLmF1dGgwLmNvbSUyRmF2YXRhcnMlMkZyYS5wbmciLCJ1cGRhdGVkX2F0IjoiMjAxOS0xMi0wNVQxMDo0ODozMy4wNjhaIiwiZXhwIjoxNTc1NTQzMDMzLCJpc3MiOiJodHRwczovL3NpZW1lbnMtcWEtMDAwNjkuZXUuYXV0aDAuY29tLyJ9.M39aPefXmaDGzaDd0qHcQHMhvugTVN4i4pyvGJ-7fayewU9vZdtKvSzFF9rVal8GEz7HKTr_auqMw9HemOWyag==
c818e716-5901-439d-9aed-ebdf802b6da9
公钥:-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENARdEGaEpfgHph3440UodVsQdqxi
PYz+l1aEcz+Bivr6emXDnor1nET94dbPqYxk+vtUHGkgOb44VPEZUe4ijQ==
-----END PUBLIC KEY-----
我尝试了以下几种方法来验证代码:
- 使用
System.IdentityModel.Tokens.Jwt
命名空间。但我无法将公钥作为字符串提供给 ValidationParameters。我遵循了这个答案的类似方法 https://dev59.com/HFsW5IYBdhLWcg3w8rH2#51866939。它感觉复杂且易出错。由于我整整一天都没能让它正常工作,所以我决定转向一个提供相同功能的 NuGet 包。 - 使用 JWT NuGet 包,但它不支持 AWS ALB 使用的算法。
- 使用 Jose.JWT NuGet 包并使用以下代码:
Jose.JWT.Decode(__token, publicKeyPem, Jose.JwsAlgorithm.ES256)
会得到以下错误:
错误:脚本执行失败。[ArgumentException] EcdsaUsingSha 算法期望密钥是 CngKey 或 ECDsa 类型。
我该如何在 C# 中简单地验证 AWS ALB 的 JWT?
https://siemens-qa-00069.eu.auth0.com/
颁发的。为什么你要试图使用AWS密钥来验证它? - Vlad DXhttps://siemens-qa-00069.eu.auth0.com/
作为发行者? - Vlad DX=
) - quadroid