- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 auth0,我有两个客户端(ios、react)和一个使用 go-auth0 的 Go 后端 API .
我按照文档做了一个 Verify
方法,看起来像这样:
func Verify(handle httprouter.Handle) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
auth0Domain := viper.GetString("auth0.issuer")
audience := []string{viper.GetString("auth0.audience")}
client := auth0.NewJWKClient(auth0.JWKClientOptions{URI: auth0Domain + ".well-known/jwks.json"}, nil)
configuration := auth0.NewConfiguration(client, audience, auth0Domain, jose.RS256)
validator := auth0.NewValidator(configuration, nil)
_, err := validator.ValidateRequest(r)
if err != nil {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
json.NewEncoder(w).Encode(map[string]string{"error": "Unauthorized"})
return
}
handle(w, r, p)
}
}
不幸的是,我注意到第一次验证需要大约 400 毫秒,随后的验证需要大约 50 毫秒。
但是,如果我用验证器的字段初始化一个结构,将所有设置代码移动到 Initialize()
中,那么它只需要 ~1ms:
func Verify(handle httprouter.Handle) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
_, err := a.validator.ValidateRequest(r)
if err != nil {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
json.NewEncoder(w).Encode(map[string]string{"error": "Unauthorized"})
return
}
handle(w, r, p)
}
}
这样做是不是一个坏主意?我今天刚刚了解 JWK,并查看了 auth0 代码,它们似乎构建了一个缓存,但我并不完全理解它是如何工作的。
有人可以告诉我将配置移动到结构中并使用其验证器是否是个好主意吗?
更新
auth0 有一个内置方法可以做到这一点!这是一个例子:
auth0.NewJWKClientWithCache(auth0.JWKClientOptions{URI: a.issuer + ".well-known/jwks.json"}, nil, auth0.NewMemoryKeyCacher(time.Duration(10)*time.Second, 5 ))
使用此方法,它会为您缓存! :)
最佳答案
缓存客户端对象几乎肯定是安全的,而且这样做通常是个好主意。 (“创建一个客户端并重用它”是一个很好的通用规则。)
我的理解是 JWT 的签名 key 通常有效期为数月甚至更长。 (Auth0's documentation notes 它的 JWKS 文档只有一个 key ,但它会一直发布签名 token ,因此 key 必须在“一段时间内”有效。)RFC 7517没有在 JWKS 或单个 JWK 上定义任何与过期相关的参数,我认为最佳做法是在 JWKS 端点上使用普通的 HTTP 缓存控件来偶尔刷新它,但不要那么频繁。
关于go - 缓存 auth0 JWK 是个坏主意吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52024874/
任何人都可以帮忙吗??我使用以下命令使用 jwk 在 python 中生成了一个 key ,并存储在一个变量 key 中 key = jwk.JWK.generate(kty='RSA', size=
是否有为 JWK 创建指纹(又名指纹)的标准规范方法? 从我阅读的内容来看,该标准似乎没有定义 kid应该指定,我觉得很奇怪。对我来说,它是最重要的,因为它是一个确定性的值,而不是一个需要查找表的值,
我实现了一个 rest 授权服务器,它使用 com.nimbusds:nimbus-jose-jwt:9.13 以 JWK 格式返回给定 keyId 的公钥包裹。代码看起来像这样: @RequestM
我正在尝试使用我提供的 JWK 签署一些数据。 到目前为止,我已经尝试使用 jwt.io 来做到这一点,标题是 { "alg" : "RS256", "typ" : "JWT" } 有效载荷是 { "
我正在使用 auth0,我有两个客户端(ios、react)和一个使用 go-auth0 的 Go 后端 API . 我按照文档做了一个 Verify 方法,看起来像这样: func Verify(h
我已经使用 JWT 和 OAuth2 实现了一个 spring boot 应用程序。私钥和公钥是通过使用带有 jks keystore 的 java keytool 生成的。生成的 .jks 文件被复
假设我有一个代表 RSA key 对的 python 结构,如下所示: rsa_key_pair = { 'private_key': '-----BEGIN PRIVATE KEY-----
我需要将 RSA 公钥转换为有效的 JWK。特别是 JWK 的值“n”和“e”是我正在努力解决的问题。在查看位于 https://www.rfc-editor.org/rfc/rfc7517#page
我正在尝试使用 python 中的公钥验证 idToken。 我首先将 JWK token 转换为 PEM,但是当我调用“解码”函数时,我看到“签名验证失败”异常。我错过了什么? # Long str
RFC 中有一个 RSA key : https://www.rfc-editor.org/rfc/rfc7516#appendix-A.1 {"kty":"RSA", "n":"oahUIoW
我在 Spring Boot 应用程序中使用了 Azure AD。问题是当我尝试使用 AADAuthenticationFilter 类验证 token 时,我在公司网络(互联网)中收到此错误,但是当
这个问题在这里已经有了答案: Convert a JSON Public/Private Key pair to rsa.PrivateKey and rsa.PublicKey (1 个回答) C
我正在遭受这个问题:无法检索远程 JWK 集:读取超时 我在 Spring boot 2.5.3 中使用 Java 11, 对于依赖项: spring-security-oauth2-jose 5.5
我有 JWT var signedJwt = "eyJhbGciOiJFUzI1NiIsImtpZCI6IjZjNTUxNmUxLTkyZGMtNDc5ZS1hOGZmLTVhNTE5OTJlMDAw
我正在尝试实现 openid-configuration/jwks 提供的公钥缓存我们的 JWT 提供商的端点。我想使用缓存值来验证传入请求的签名。我们希望有适当的缓存,以降低 jwks 端点的请求。
我正在尝试实现 openid-configuration/jwks 提供的公钥缓存我们的 JWT 提供商的端点。我想使用缓存值来验证传入请求的签名。我们希望有适当的缓存,以降低 jwks 端点的请求。
我正在尝试将我的 GO Web 服务器连接到 Amazon Cognito 进行身份验证。我正在使用 gorilla 的 jwt 中间件。我也在遵循 AuthO 的指南:https://auth0.c
我生成了一个 ECDH key 对,并从中获取了公钥。使用 nodejs 和加密库。 const ecdh = crypto.createECDH('secp384r1'); ecdh.generat
我正在开发一个 P2P 基础设施,它将包含来自一组不同应用程序的数据,并通过网络分发。这个 P2P 覆盖层由一组 Python Twisted 服务器组成。 我需要保证每个应用程序的每个用户所存储数据
Here 是一种在线工具,可将 JWK 转换为 PEM,反之亦然。 我想在 C++ 代码中使用相同的代码。 对于 JWK: { "kty":"RSA", "e":"AQAB", "kid
我是一名优秀的程序员,十分优秀!