代码之家  ›  专栏  ›  技术社区  ›  IcedDante

我可以使用auth0 java sdk来验证Okta令牌吗?

  •  0
  • IcedDante  · 技术社区  · 1 年前

    我有一个授权/PKCE工作流,用于我们的SPA应用程序在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令牌?

    由于我们试图支持的后勤工作,我需要避免任何入门库。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Shubham Pathak    1 年前

    要在不使用启动库的情况下使用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。 创建自定义JWT验证器: 使用提取的公钥从auth0库创建自定义JWTVerifier实例。

        2
  •  0
  •   Gary Archer    1 年前

    它可以帮助您首先了解非供应商库的流程,例如 jose4j ,适用于任何基于标准的提供商:

    最好的做法是让资源服务器像这样指定预期的算法、颁发者和受众,同时提供JWKS或颁发者端点的URL。

    var httpsJkws = new HttpsJwks(jwksEndpoint);
    var jwksKeyResolver = new HttpsJwksVerificationKeyResolver(httpsJkws);
    
    var claims = new JwtConsumerBuilder()
    .setVerificationKeyResolver(jwksKeyResolver)
    .setJwsAlgorithmConstraints(AlgorithmConstraints.ConstraintType.PERMIT, AlgorithmIdentifiers.RSA_USING_SHA256) 
    .setExpectedIssuer("myissuer");
    .setExpectedAudience("myaudience")
    .processToClaims(accessToken);
    

    我怀疑Okta和Auth0库都与彼此的授权服务器兼容,因为正常的JWT验证通常只按照上面的方式进行。只需查找以上输入并使用它们。然后你应该很快得到一个有效的解决方案。