如何在 java 应用程序中获取 okta 登录页面

how to get okta login page in java application

我是 okta 的新手,不确定我是否理解正确。

我有一个现有的 java 网络应用程序,它部署在 2 个 tomcat 服务器上;一个用于 UI 和一个服务。现在我们在 UI 中使用 Redhat SSO 登录并且在 UI 代码上没有 spring。

现在,我必须使用 OKTA 而不是 redhat sso。我已按照此处提到的步骤进行操作。 https://developer.okta.com/blog/2018/09/12/secure-java-ee-rest-api

而不是下面的:

jwtVerifier = new JwtHelper()
                    .setIssuerUrl("https://{yourOktaDomain}/oauth2/default")
                    .setClientId("{yourClientId}")
      
          .build();

以下使用:

AccessTokenVerifier jwtVerifier = JwtVerifiers.accessTokenVerifierBuilder()
              .setIssuer("https://dev-xxxx.okta.com/oauth2/aus2ibr84krwxxxx")
              .setAudience("testAudience") 
              .setConnectionTimeout(Duration.ofSeconds(1))
              .setReadTimeout(Duration.ofSeconds(1))
              .build();

以上代码都工作正常,没有任何问题..但是当我尝试登录时 URL 我收到 401 状态码。

我还尝试了以下 .setAudience("api://default")

//.setIssuer("https://dev-xxx.okta.com/oauth2/default")
//.setIssuer("https://dev-xxx.okta.com")
//.setIssuer("https://dev-xxx.okta.com/api/v1/authorizationServers/default")

然后,在想我需要首先验证令牌。所以添加了下面的一段代码来验证默认令牌。当我调用解码时它失败了。最初我得到 "Caused by: io.jsonwebtoken.MalformedJwtException: Unable to read JSON value: ??i???z???N?"。然后我创建了另一个令牌然后使用它。现在得到 "com.okta.jwt.JwtVerificationException: Token did not contain signature"

try {
            Jwt jwt = jwtVerifier.decode("C4o4J2aspA68D5si1bRd9YXd_ushOGH4x7UnHlMsL8");
            return (String) jwt.getClaims().get("uid"); 
        } catch (JwtVerificationException e) {
              log.error("local introspect error", e);
              return null;
        }

我们真的需要在代码中显式验证令牌吗?如果是这样,如何从 okta 获取令牌? 我假设该应用程序正在访问 okta 服务器并且由于某种原因未授权。

有人可以帮助我澄清我的疑问或一些我可以使用的工作示例或对我的问题的一些了解吗? 注意:没有使用 Maven,仍然使用 ANT。

关注此 URL 并获得登录页面。 https://developer.okta.com/docs/guides/implement-grant-type/authcode/main/#grant-type-flow

如上所述构建 URL 并调用 sendRedirect 获取登录页面。