我的 SPA 应用程序有一个授权/PKCE 工作流程,用于在 Okta 中请求访问令牌并将其发送到资源服务器。
SPA -> Okta 部分已经解决,将令牌发送到我的 Java 资源服务器很简单。然而,验证令牌对我来说有点棘手。
如果我只是使用okta提供的很棒的sdk,
okta-jwt-verifier
,过程相当简单:
AccessTokenVerifier jwtVerifier = JwtVerifiers.accessTokenVerifierBuilder()
.setIssuer("https://" + issuer + "/oauth2/default")
.build();
AccessTokenVerifier 使用发行者透明地收集公钥并验证令牌。
但是,我们的系统必须支持来自多个来源的 JWT,因此我们已经依赖于 auth0
java-jwt
v3.18 库。我正在研究让 auth0 获取公钥并验证访问令牌的方法,但找不到相应的流程。
创建
com.auth0.jwt.JWTVerifier
实例来验证 Okta 令牌的最佳方法是什么?
由于我们正在努力支持的后勤工作,我需要避免使用任何入门库。
要使用 auth0 Java JWT 库验证 Okta 访问令牌而不使用入门库,您可以手动获取 Okta 的公钥,然后创建自定义 JWTVerifier 实例。以下是步骤的概述:
检索 Okta 的公钥: 您可以使用 Okta 提供的 JWKS(JSON Web 密钥集)URL 检索 Okta 的公钥。此 URL 通常类似于:https://your-okta-issuer/.well-known/jwks.json。 解析 JWKS 并提取公钥: 使用 JSON 解析器解析 JWKS 响应并提取与 Okta 关联的公钥。 JWKS 中的每个密钥都代表一个可能已用于签署 Okta 的 JWT 的不同公钥。 创建自定义 JWTVerifier: 使用提取的公钥从 auth0 库创建自定义 JWTVerifier 实例。