使用 Oracle Identity Cloud Service 开发 Java 应用
了解验证流并了解示例 Customer Quotes 应用程序如何使用 Java servlet 实现与 Oracle Identity Cloud Service 的集成。
了解验证流
以下流程流介绍了验证流中的步骤以及示例客户报价应用程序与 Oracle Identity Cloud Service 之间的通信。
-
用户访问“客户报价”应用程序 (
https://localhost:8181/cquotes
),然后单击使用 Identity Cloud Service 登录。 -
“客户报价”应用程序以以下格式准备授权代码请求:
-
网址:
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
。
-
-
-
Customer Quotes 应用程序将用户重定向到在步骤 2 中生成的 Oracle Identity Cloud Service 授权代码 URL。
-
Oracle Identity Cloud Service 接收来自客户报价应用程序的授权代码请求(由其
client_id
标识)。 -
Oracle Identity Cloud Service 验证用户是否已验证。如果是,Oracle Identity Cloud Service 将跳过登录过程。否则,Oracle Identity Cloud Service 将启动登录过程并显示登录页。
-
用户将登录身份证明提交到 Oracle Identity Cloud Service 进行验证。在成功验证登录身份证明之前,Oracle Identity Cloud Service 登录过程将应用密码策略。
-
如果登录过程成功,Oracle Identity Cloud Service 将使用以下重定向 URL 将用户重定向回“客户报价”应用程序:
-
URL:
-
https://localhost:8181/cquotes/return?code=code
-
-
参数:
-
code
:由 Oracle Identity Cloud Service 创建的授权代码。
-
-
-
“客户报价”应用程序从请求中提取授权代码。
-
Customer Quotes 应用程序直接与 Oracle Identity Cloud Service 通信,以便使用以下 URL 和标头交换用户访问令牌的授权代码:
-
网址:
https://example.identity.oraclecloud.com/oauth2/v1/token?grant_type=authorization_code&code=code
-
请求标头:
-
Authorization=Basic
( client_id:client_secret ,64 位编码) -
Accept=*/*
-
-
参数:
-
grant_type
:由于您正在使用authorization_code
从 Oracle Identity Cloud Service 请求访问令牌,因此授权类型必须为authorization_code
。 -
code
:用户成功登录后从 Oracle Identity Cloud Service 收到的授权代码。
-
-
标题列表:
-
授权:可信应用程序
client_id
和client_secret
(64 位编码),格式为:client_id:client_secret
。 -
接受:客户报价应用程序期望的回应类型
.
-
-
-
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
告知应用程序用户已验证并且具有有效令牌。
-
-
-
“客户报价”应用程序处理 JWT 标记 (
id_token
),然后提取 Oracle Identity Cloud Service 返回的用户信息,例如名称和电子邮件。 -
“客户报价”应用程序将显示包含有关用户的信息的主页,例如姓名和电子邮件。
了解 Java 应用程序代码
示例 Customer Quotes 应用程序使用 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 注销用户。
-
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
类进行。