使用 Oracle Identity Cloud Service 开发 Java 应用

了解验证流并了解示例 Customer Quotes 应用程序如何使用 Java servlet 实现与 Oracle Identity Cloud Service 的集成。

了解验证流

以下流程流介绍了验证流中的步骤以及示例客户报价应用程序与 Oracle Identity Cloud Service 之间的通信。

  1. 用户访问“客户报价”应用程序 (https://localhost:8181/cquotes),然后单击使用 Identity Cloud Service 登录

  2. “客户报价”应用程序以以下格式准备授权代码请求:
    • 网址:https://example.identity.oraclecloud.com/oauth2/v1/authorize?client_id=clientid&response_type=code&redirect_uri=https://localhost:8181/cquotes/return&scope=openid

    • 参数:
      • client_id:客户报价在 Oracle Identity Cloud Service 中注册的唯一应用程序 ID。

      • response_type:来自 Oracle Identity Cloud Service 的预期响应。在此步骤中,它是授权代码。

      • redirect_uri:在用户使用 Oracle Identity Cloud Service 完成验证和授权后发送授权代码的 URL。

      • scope:控制“客户报价”应用程序可以代表用户访问和处理哪些数据。由于使用了 OpenID Connect,因此作用域为 openid

  3. Customer Quotes 应用程序将用户重定向到在步骤 2 中生成的 Oracle Identity Cloud Service 授权代码 URL。

  4. Oracle Identity Cloud Service 接收来自客户报价应用程序的授权代码请求(由其 client_id 标识)。

  5. Oracle Identity Cloud Service 验证用户是否已验证。如果是,Oracle Identity Cloud Service 将跳过登录过程。否则,Oracle Identity Cloud Service 将启动登录过程并显示登录页。

  6. 用户将登录身份证明提交到 Oracle Identity Cloud Service 进行验证。在成功验证登录身份证明之前,Oracle Identity Cloud Service 登录过程将应用密码策略。

  7. 如果登录过程成功,Oracle Identity Cloud Service 将使用以下重定向 URL 将用户重定向回“客户报价”应用程序:
    • URL:

      • https://localhost:8181/cquotes/return?code=code

    • 参数:

      • code:由 Oracle Identity Cloud Service 创建的授权代码。

  8. “客户报价”应用程序从请求中提取授权代码。

  9. Customer Quotes 应用程序直接与 Oracle Identity Cloud Service 通信,以便使用以下 URL 和标头交换用户访问令牌的授权代码:
    • 网址:https://example.identity.oraclecloud.com/oauth2/v1/token?grant_type=authorization_code&code=code

    • 请求标头:
      • Authorization=Basicclient_id:client_secret ,64 位编码)

      • Accept=*/*

    • 参数:
      • grant_type:由于您正在使用 authorization_codeOracle Identity Cloud Service 请求访问令牌,因此授权类型必须为 authorization_code

      • code:用户成功登录后从 Oracle Identity Cloud Service 收到的授权代码。

    • 标题列表:
      • 授权:可信应用程序 client_idclient_secret(64 位编码),格式为:client_id:client_secret

      • 接受:客户报价应用程序期望的回应类型

        .
  10. Oracle Identity Cloud Service 将验证请求并将以下 JSON Web 标记 (JWT) 返回到客户报价应用程序:
    • JWT 内容:
      • access_token:包含有关用户的信息。客户报价应用程序可以在代表用户进行 Oracle Identity Cloud Service API 调用时使用此令牌。access_token 内容取决于验证过程中请求的范围。

      • id_token:OpenID Connect 中的主令牌,用于使用 scope=openid 授权端点。id_token 包含有关用户的标识信息(例如,名称和电子邮件)。此信息可由客户端应用程序用于多种目的,包括验证和显示内容。合法(由客户机基于 OpenID Connect 提供者签名进行验证)和活动 id_token 告知应用程序用户已验证并且具有有效令牌。

  11. “客户报价”应用程序处理 JWT 标记 (id_token),然后提取 Oracle Identity Cloud Service 返回的用户信息,例如名称和电子邮件。

  12. “客户报价”应用程序将显示包含有关用户的信息的主页,例如姓名和电子邮件。

了解 Java 应用程序代码

示例 Customer Quotes 应用程序使用 servlet 技术。

应用程序由以下主要 servlet 组成:
  • com.example.servlet.AccessResourceServlet:通过将用户重定向到 Oracle Identity Cloud Service 以请求授权代码来启动验证流。

  • com.example.servlet.ReturnServlet:处理来自 Oracle Identity Cloud Service 的重定向 URL,接收授权代码,并使用 com.example.utils.OICOAuthClient 类交换身份令牌和访问令牌的授权代码。

  • com.example.servlet.LogoutServlet:终止应用程序的用户会话,但不从 Oracle Identity Cloud Service 注销用户。

Servlet 使用以下实用程序类:
  • com.example.utils.OICOAuthClient:构建 Oracle Identity Cloud Service REST API 的 URL 端点,处理请求,对 Oracle Identity Cloud Service 响应进行语法分析,并将用户信息添加到应用程序的 HTTP 会话。

  • com.example.utils.HttpUtil:处理与 Oracle Identity Cloud Service REST API 端点的 HTTP 通信。所有直接从客户报价应用程序到 Oracle Identity Cloud Service 的通信均通过 java.net.HttpURLConnection 类进行。