- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在 AWS Cognito 上验证访问 token 。我必须做的一件事是将 key 从 jwks.json(用户池的)转换为 rsa 公钥结构(取决于使用的 JWT API)。
所以 'n' 和 'e' 的值必须是 big int (long) 和 int。
这两个变量的正确值是多少,例如:
raw_n := "rdTmzrh7t0i_YN0MDLejnS0jXIFoSzRfFEbqf-bwGuRLnhLI4T3zGAk9HGZeAG6B5gg1D40Jsz1upo4E70VS0raGfSBPYPO7ZAJ2VCUUeblr9X_aWK4f294v4Cf3n8jZyFcGK9qhgcqy3DlHqqDANtjamWVtEhTRTFc-qoz1ScvHmPupsXlj1FsAEFEbVhP4705ez5gW3uQOoidrm38sPFwCN7g7xhA9CyzF04Zsjky55OfMCyWlIt7nljLx7ZRG3dVRD3vdEBI99qtxf43qMCWSPUk7Whn11Wf_u0xDrWhtGR9k599rKBBRWuqcujYYnFuOT0BeQIL25cePPK8lxw"
raw_e := "AQAB"
我想这是 Base64 编码的 URL。我正在使用 Go,在解码它们时,我有这些值:
Value of N = 21944212446918148307583266513211511961176501179660110972882270757464120247554839864039423096862533136364974693915136668416630333929475539217929135693935014796040215031370110392351836608149288005498214604075814317642291632460369313969964278103135047317799644939426174469533574133378199425168189176269507635563270873057483981163804984573367938044175828995131343800369166239708527999544583873649523245709447765091038652758632917341001616695912404965678061555823269517387737693508193881028187912513285002546706797506255288735805912213209305939523528571103281920754204216834697552752238593850648051945624431639572960454087
E 的值 = 65537
最终的值是:
TokenSignature= GYZQKv7o8_o9E4ktVKZngYD4BS5QluOMwE-MRcJB432CmNimQm6JbvT3H48ECThe4f3sZ1KyVbgDJbyUnlkaAwMEBjMnlV7AUaZb-ifveM7kHM30BS5LCV_SCiCk-PvmWjeIHu9bR3EwG8azJCceD5A7gDLmhAtPN94gRy-opXJPAnaCba00AwKBd_pN3UH7LYu4u4EQ29eIfn4k4RCLuR31jr7ad3dvvjhhy658dQSHzSuPZGcN1-CRVSlrd0nk0Ba2t8W33LtjxM6wzPThWgh0fpy2XEDosGU_9FiXdEjUKisE3VHxroygQ8ekVWKHssa2eujXCx8OthWzaGag0w1
Signing String= eyJhbGciOiJSUzI1NiIsImtpZCI6ImpBNlFvakp0RkI0TmNIR1BmcS85ZWgzSHI2YnVXWEI0VzkxRTd5bWNjSk09In0.eyJleHAiOjE0NzAyNzgzMTEsInRva2VuX3VzZSI6ImFjY2VzcyIsImlzcyI6Imh0dHBzOi8vY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vdXMtZWFzdC0xX0d1OFlhVGg3MiIsImNsaWVudF9pZCI6IjRwNzNuYjhra3NsbHJrbTlzMzdzYXZsNzEzIiwidXNlcm5hbWUiOiJtYXRlbyIsImtpZCI6IiIsImFsZyI6IiIsImp0aSI6IjhmNTBiZmU4LWVlNGUtNGFkZi04MDQxLWU5MGM4YWJkZDExZCIsImlhdCI6MTQ3MDI3NDcxMSwic3ViIjoiYjFjMDZhMTktYjE5Yy00NGMwLTgzZjctODY2NTZjYzRmMjMxIn0
rsa.PublicKey{N:21944212446918148307583266513211511961176501179660110972882270757464120247554839864039423096862533136364974693915136668416630333929475539217929135693935014796040215031370110392351836608149288005498214604075814317642291632460369313969964278103135047317799644939426174469533574133378199425168189176269507635563270873057483981163804984573367938044175828995131343800369166239708527999544583873649523245709447765091038652758632917341001616695912404965678061555823269517387737693508193881028187912513285002546706797506255288735805912213209305939523528571103281920754204216834697552752238593850648051945624431639572960454087, E:65537}
但是,使用这些重访者值,我仍然收到 crypto/rsa: verification error
。如何确定问题是来自 JWT 库还是值?
非常感谢
最佳答案
您应该能够使用下面的程序或在 https://play.golang.org/p/VZqD5m057b 生成的 rsa.PublicKey 来验证签名。它基于 https://github.com/mendsley/gojwk 中的代码(请参阅 playground 链接或 https://github.com/mendsley/gojwk/blob/master/LICENSE 了解版权归属)——我建议克隆该存储库并将其用作示例和模型。
package main
import (
"crypto/rsa"
"encoding/base64"
"encoding/binary"
"fmt"
"math/big"
)
func main() {
rawN := "rdTmzrh7t0i_YN0MDLejnS0jXIFoSzRfFEbqf-bwGuRLnhLI4T3zGAk9HGZeAG6B5gg1D40Jsz1upo4E70VS0raGfSBPYPO7ZAJ2VCUUeblr9X_aWK4f294v4Cf3n8jZyFcGK9qhgcqy3DlHqqDANtjamWVtEhTRTFc-qoz1ScvHmPupsXlj1FsAEFEbVhP4705ez5gW3uQOoidrm38sPFwCN7g7xhA9CyzF04Zsjky55OfMCyWlIt7nljLx7ZRG3dVRD3vdEBI99qtxf43qMCWSPUk7Whn11Wf_u0xDrWhtGR9k599rKBBRWuqcujYYnFuOT0BeQIL25cePPK8lxw"
rawE := "AQAB"
decodedE, err := base64.RawURLEncoding.DecodeString(rawE)
if err != nil {
panic(err)
}
// make sure that the E field is at least 4 bytes, pad if necessary
if len(decodedE) < 4 {
ndata := make([]byte, 4)
copy(ndata[4-len(decodedE):], decodedE)
decodedE = ndata
}
pubKey := &rsa.PublicKey{
N: &big.Int{},
E: int(binary.BigEndian.Uint32(decodedE[:])),
}
decodedN, err := base64.RawURLEncoding.DecodeString(rawN)
if err != nil {
panic(err)
}
pubKey.N.SetBytes(decodedN)
fmt.Println(decodedN)
fmt.Println(decodedE)
fmt.Printf("%#v\n", *pubKey)
}
输出:
[173 212 230 206 184 123 183 183 72 191 96 221 12 12 12 183 163 163 157 45 35 92 129 104 75 52 95 20 70 234 127 234 127 230 240 26 228 75 158 18 20025 225 225 225 61 243 243 243 24 9 61 28 102 94 02 28 102 94 0 2 28 102 94 0 2 110 129 230 8 53 15 141 9 179 61 110 166 142 4 239 69 82 210 182 134 125 32 79 96 243 187 100 2 118 84 37 20 121 185 107 245 127 218 88 174 31 219 222 47 224 39 247 159 200 217 200 87 6 43 218 161 129 202 178 220 57 71 170 160 192 54 216 218 153 101 109 18 20 209 76 87 62 170 140 245 73 203 199 152 251 169 177 121 99 212 91 0 16 81 27 86 19 248 239 78 94 207 152 22 222 228 162 39 107 155 127 44 60 92 2 55 184 59 198 16 61 11 44 197 211 134 108 134 108 142 76 185 228 228 228 228 231 204 11 37 165 34 222 222 231 150 50 237 50 241 237 148 70 148 70 148 70 213 81 213 81 213 81 213 81 151 213 81 213 81 151 213 81 151 15 123 221 16 18 61 246 171 113 127 141 234 48 37 146 61 73 59 90 25 245 213 103 255 187 76 67 173 104 109 25 31 100 231 223 107 40 16 81 90 234 156 186 54 24 156 91 142 79 64 94 64 130 246 229 199 143 60 175 37 199][0 1 0 1]rsa.PublicKey{N:21944212446918148307583266513211511961176501179660110972882270757464120247554839864039423096862533136364974693915136668416630333929475539217929135693935014796040215031370110392351836608149288005498214604075814317642291632460369313969964278103135047317799644939426174469533574133378199425168189176269507635563270873057483981163804984573367938044175828995131343800369166239708527999544583873649523245709447765091038652758632917341001616695912404965678061555823269517387737693508193881028187912513285002546706797506255288735805912213209305939523528571103281920754204216834697552752238593850648051945624431639572960454087, E:65537}
关于json - AWS Cognito 解码 JWKS.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38773185/
我目前在 AWS 上使用 Cognito 进行用户管理, 我希望能够与我的用户一起导入 CSV 以添加到项目中。有了基本信息我就可以成功添加用户了。 不过,我想直接在 CSV 中添加一个用户和一个关联
我正在使用 Cognito 提供的 Web UI 表单,以便用户通过 OAuth 流程登录我们的网站。 我们有一个用例,用户应该跨浏览器退出所有登录的 session 。 查看文档,似乎是 Admin
一个应用程序正在通过 Open ID Connect 协议(protocol)与 进行通信AWS 认知 , 连接到 ADFS ,通过 SAML 进行通信。 Cognito 本质上是“代理”ADFS 服
我们当前在尝试创建密码中包含空格字符的用户时遇到 InvalidParameterException。 有什么方法可以更新密码策略以启用此功能,这是错误还是预期行为? 最佳答案 Cognito 的密码
Cognito 用户池配置为用户使用他们的“电子邮件地址”来注册和登录。 如果用户使用其他人的电子邮件注册,那么该电子邮件将陷入未确认状态,所有者将无法正确使用它。 话虽如此,让我提供一个具有以下场景
我在 AWS Cognito 用户池中设置了一个 OpenID Connect 身份提供商。在浏览器中尝试此 URL 时: https:///oauth2/authorize?redirect_uri
我正在开发一个应用程序,我在其中使用 AWS Cognito 来存储用户数据。我正在努力了解如何管理 Cognito 的备份和灾难恢复方案! 以下是我的主要问题: 我想知道这些存储的用户数据的可用性如
用户在 Cognito 中更新电子邮件,Cognito 将电子邮件验证标志翻转为 false 并发送验证电子邮件。如果 Cognito 无法发送电子邮件或代码已过期,我将如何强制 Cognito 重新
有没有一种方法可以对Amazon Cognito用户池中的用户强制执行密码过期策略? 最佳答案 password policy似乎没有内置过期功能。您可以通过添加passwordUpdatedAt字段
我已使用连接到 Google 身份提供商的应用客户端设置了 Cognito 授权方。 “回调 URL”为 http://localhost而“退出 URL”是 http://localhost/log
我正在使用 Aws Cognito,但无法找到从 Cognito 登录页面中删除“注册”按钮的解决方案。谢谢。 Cognito 用户池提供了默认登录页面,其中包含忘记密码、登录和注册。但我想从该页面隐
这个问题在这里已经有了答案: Reference - What does this regex mean? (1 个回答) 4年前关闭。 我正在使用 AWS Cognito 对我的应用程序进行身份验证
我们正在使用 Cognito。一切都很好。我使用 AdminCreateUser API 添加了一个用户,他们收到了他们的临时密码。不幸的是,他们等了一个多月才登录,现在当他们尝试使用临时密码登录时,
我们使用 Cognito 托管 UI 和本地帐户登录以及少数 SAML 提供商。有一个选项可以自定义一些样式,但我正在寻找一些额外的东西。 添加自定义文本和指向外部网站的链接 - 例如条款和条件 SA
Amazon Cognito 会针对忘记密码请求发送一封验证电子邮件。如何使用个性化参数更新此验证电子邮件,使其包含以下参数:(用户名/电子邮件)。 最佳答案 您可以为自定义消息使用类似于下面的 la
我想创建一个允许用户注册的服务,但这些用户可以是团队或组织的一部分;就像任何其他服务一样,例如Slack、Trello、Google Apps 等。因此,这些用户需要从他们注册的上级团队或组织继承设置
如果激活验证功能,Amazon Cognito 会自动发送验证码。在我的项目中,有时我会添加用户(AWS Java SDK 中的注册功能)并通过 AdminConfirmSignup 自己验证它们,所
我正在使用 AWS Cognito 通过向用户的电子邮件发送验证链接来验证用户的电子邮件。用户点击链接后,默认的确认信息“您的注册已被确认!”显示。有没有办法自定义此消息? 谢谢! 最佳答案 目前(2
Cypress 有没有办法与 Cognito 集成?我有一个没有登录页面的应用程序,但使用来自另一个具有 Cognito 登录名的网站的 cookie。 (使用cookies) 无论如何,是否可以在不
每当我使用除以下内容之外的任何redirect_uri 将浏览器定向到 Cognito 注销端点时: http://localhost:63882/signin-oidc 我收到“redirect_m
我是一名优秀的程序员,十分优秀!