钢钢更新

用行动改变世界,做个有情怀的技术宅

本文主要讲解如何在 ORDS 中利用 OAuth2 认证保护 RESTful API,以及如何在 APEX 中使用 OAuth2 认证的 RESTful API。

创建演示用的 RESTful API

首先登录 Oracle APEX 工作台,在顶部菜单中选择 SQL Workshop -> RESTful Services,如图所示:

创建 Modules

  • 点击 Modules 节点,创建一个新模块,比如:lab.demo

创建 RESTful API

  • 选中这个模块,点击 Create Template 按钮,创建一个新的 RESTful Service,比如:customers,并创建一个最简单的 GET 服务(Resource Handler),如图所示:

在浏览器中测试 RESTful API

将 RESTful API 保护起来

现在我们的 RESTful API 已经创建成功,但是任何人都可以访问,我们需要将这个 RESTful API 保护起来,只允许授权用户访问。

创建 Roles

  • 选择 Roles 节点,新建一个角色(role) ,比如:oracle.dbtools.role.autorest.lab.customer

创建并配置 Privileges

  • 选择 Privileges 节点,新建一个权限(Privilege),比如:oracle.dbtools.autorest.privilege.lab.customer

  • 将刚才创建的角色(Role)关联到这个权限(Privilege)上,并将需要保护的 RESTful API 关联到这个权限(Privilege)上,如图所示:

  • 再次在浏览器中打开 RESTful API,会看到如下信息,证明 RESTful API 已经被保护起来了。

创建 OAuth2 Client

为了能够访问受保护的 RESTful API,我们需要创建一个 OAuth2 Client,将这个 Client 与刚才创建的 Role 关联起来。

点击 SQL Workshop -> SQL Commands 菜单,打开 SQL Worksheet,执行如下 SQL 语句:

1
2
3
4
5
6
7
8
9
BEGIN
oauth.create_client(
p_name => 'lab_client', --client name 必须唯一
p_grant_type => 'client_credentials', --选择 client_credentials 作为授权类型
p_description => 'lab client demo',
p_support_email => 'wfgdlut@gmail.com',
p_privilege_names => 'oracle.dbtools.autorest.privilege.lab.customer'); --将刚才创建的权限(Privilege)关联到 OAuth2 Client 上
COMMIT;
END;

Client 创建成功后,在 SQL Worksheet 中执行如下 SQL 语句,并将返回的 client_idclient_secret 记录下来,后面需要用来获取 access_token

1
2
3
4
5
6
7
SELECT id,
name,
description,
client_id, -- OAuth2 Client ID
client_secret -- OAuth2 Client Secret
FROM user_ords_clients
WHERE name = 'lab_client';

将 OAuth2 Client 与 Role 关联起来

继续在 SQL Worksheet 中执行如下 SQL 语句,将 OAuth2 Client 与 Role 关联起来:

1
2
3
4
5
6
BEGIN
oauth.grant_client_role(
p_client_name => 'lab_client', --刚才创建的 OAuth2 Client 的名称
p_role_name => 'oracle.dbtools.role.autorest.lab.customer'); --刚才创建的 Role 的名称
COMMIT;
END;

获取 access_token

打开命令行终端(或者使用 Postman),执行如下命令,获取 access_token

1
2
3
4
curl -X POST 'https://oracleapex.cn/ords/lab/oauth/token' \                                
-H 'Content-Type: application/x-www-form-urlencoded' \
-u '<Client ID>:<Client Secret>' \
--data 'grant_type=client_credentials&scope=oracle.dbtools.role.autorest.lab.customer'

如果一切正常,就会得到 access_token,如图所示:

这里的 access_token 就是用来访问受保护的 RESTful API 的令牌,将它复制下来。

钢哥提醒:如果获取 access_token 失败,请先参考文末的避坑指南。

通过 curl 命令访问受保护的 RESTful API,如下所示:

1
2
3
4
curl -i \
-X GET "https://oracleapex.cn/ords/lab/api/customers" \
-H "Authorization: Bearer <your_access_token>" \
-H "Accept: application/json"

如果一切正常,就会得到如下信息,证明 RESTful API 已经被成功访问了。

你也可以通过 Postman 或者 Hoppscotch 工具访问受保护的 RESTful API,原理是一样的,必须先通过 client_id 和 client_secret 获取 access_token,然后再通过 access_token 访问受保护的 RESTful API,如下图所示:

在 APEX 中使用 OAuth2 认证的 RESTful API

接下来就可以将这个 RESTful API 集成到 APEX 应用中了。进入到 APEX 工作台,点击 Shared Components -> REST Data Sources -> Create -> From scratch 菜单, 将刚刚创建的 RESTful API 注册到 APEX 中,如图所示:

钢哥提醒:这一步如果报错,请参考文末的避坑指南。

填写好 RESTful API 的相关信息,点击 Create 按钮,根据向导创建一个 REST Data Source,以下是基于我自己的 RESTful API 信息填写的,请参考并对应修改成你自己的。

  • 我的 RESTful API 没有使用分页,所以跳过此步设置,下一步:

这一步很关键,需要填写 OAuth2 的相关信息,如下图所示:

  • Authentication Required: 勾选
  • Authentication Type: OAuth2 Client Credentials
  • OAuth Token URL: https://oracleapex.cn/ords/lab/oauth/token
  • Client ID: 刚才获取到的 client_id
  • Client Secret: 刚才获取到的 client_secret

上述信息填写完成后,点击 Discover 按钮,APEX 会自动获取 access_token 并试图解析 RESTful API 的返回结果,如果一切正常,会看到如下信息:

点击 Create REST Data Source 按钮进行保存。

在 APEX 中使用 OAuth2 认证的 RESTful 数据源

新建一个 APEX 页面,增加一个 Interactive Report 组件,数据源关联刚刚创建的 REST Data Source,如下图所示:

运行后的效果如下:

避坑指南

在获取 access_token 时可能会踩的坑

  1. ORDS 获取 access_token 的 URL 是:https://oracleapex.cn/ords/lab/oauth/token, 其中 lab 是 ORDS 的 workspace 名称,如果你的 ORDS 的 workspace 名称不是 lab,需要将 lab 替换成你的 workspace 名称。后面的 /oauth/token 是固定写法,不要修改;
  2. 如果遇到 Token 获取失败:AUTH TOKEN_REQUEST_INVALID_RESPONSE 的错误,可能是由于 Nginx 或 tomcat 配置的问题。
  • 检查 nginx.conf 文件,确保配置了如下信息:
1
2
3
4
5
proxy_set_header X-Forwarded-Proto  $scheme;   # 关键:告诉后端原始协议
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Host $host;
proxy_set_header Authorization $http_authorization; # 取 token 时要用到 Basic 头
  • 检查 tomcat 的 $CATALINA_BASE/conf/server.xml 文件,确保配置了如下信息:
1
2
3
4
5
6
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
URIEncoding="UTF-8"
proxyPort="443"
proxyName="oracleapex.cn"
scheme="https"
secure="true" />
  • 重启 Nginx 和 tomcat,再次尝试获取 access_token。

解析 RESTful API 可能会踩的坑

如果在解析 RESTful API 时遇到 ORA-29024: Certificate validation failure 的错误,是由于 SSL 证书导致的。APEX(实质是数据库里的 UTL_HTTP)在发起 HTTPS 调用时无法验证对端证书链,所以抛出 ORA-29024: Certificate validation failure。本机 curl 能通,是因为你的客户端已经信任了 Let’s Encrypt/DigiCert 的根证书;数据库并不会自动信任系统根,必须给 Oracle Wallet 配好受信任根证书,并把 APEX 实例的 Wallet Path 指到它。

所以只需要将对应的证书(我使用的是 Let’s Encrypt/DigiCert 的根证书)放到 Wallet 中即可。不知道如何配置 Wallet 的,可以参考钢哥的这篇文章:《Oracle Wallet 钱包配置》

SSL 证书导入 Wallet 后,再次解析 RESTful API,就可以继续往下执行了。

总结

本文详细介绍了如何通过 ORDS 将 RESTful API 保护起来,以及如何在 APEX 中使用 OAuth2 认证的 REST 数据源。很多第三方的 API 都是遵循 OAuth2 协议的,掌握了如何在 APEX 中使用 OAuth2 认证的 REST 数据源,将让你的 APEX 应用与第三方 API 的集成变得更加简单和安全,欢迎大家留言讨论。

2025年8月17日,Oracle 将把运行了20年的 APEX 免费评估服务从 apex.oracle.com 迁移到新的域名:oracleapex.com

APEX 免费评估服务已经运行了超过20年,且一直是 Oracle APEX 社区的核心。这项服务通过为全球数千名开发者提供学习、实验和免费评估 APEX 的平台,在塑造 APEX 今天的面貌中发挥了至关重要的作用。截至目前,在这个开放环境中,有超过9万个活跃工作空间超过26万个应用程序在运行,帮助用户将想法变为现实并体验 APEX。

对于绝大多数用户来说,这一变化将是无缝的。无需进行任何更改,并且可以像往常一样访问自己的工作空间和应用程序。

请查看下方的常见问题解答以获取更多详细信息。

问:APEX 免费评估服务有什么变化?
答:APEX 免费评估服务将迁移到新的域名:oracleapex.com。很快,您将需要在 oracleapex.com 上访问您的工作空间和应用,而不是 apex.oracle.com。营销网站将保留在 apex.oracle.com。

问:旧的收藏夹和保存的链接还能用吗?
答: 是的。变更后一段时间内,将设置从 apex.oracle.com 到 oracleapex.com 的重定向,因此您当前的书签和链接将继续按预期工作。

问: 邮件发送地址会变更吗?
答: 是的。从新域的用户工作空间和应用程序发送的邮件将来自 dbtools-apexext-noreply@oracleapex.com。通用的 APEX 通知地址 (oracle-application-express_ww@oracle.com) 将保持不变。如果您使用允许列表来接收邮件,请根据需要更新它们。

问: 我的应用使用社交登录。域变更会影响社交登录认证吗?
答: 是的,社交登录认证将受迁移至 oracleapex.com 的影响。您需要将新网址向您的社交登录提供者注册。 欲了解更多信息,请访问 APEX 文档或咨询您的社交登录提供者的文档。

问: 新网址将是什么样子的?
答: 工作区登录:https://oracleapex.com/ords/r/apex/workspace-sign-in
应用网址: https://oracleapex.com/ords/r/apex/

问: 我的应用程序或工作区会以其他方式改变吗?
答: 不会。只有用于访问的域名会改变。您应用程序、工作区、数据和设置将保持不变。

问: 我需要做任何准备吗?
答: 对于大多数用户,无需做任何事。一切将一如既往地运行。只有使用社交登录验证或集成了引用 apex.oracle.com 的用户需要根据需要审查和更新。

问: 我有一个在这里没有回答的问题。我可以在哪里寻求帮助?
答: 请访问 Oracle APEX 社区论坛 或通过 oracle-application-express_ww@oracle.com 联系我们,提出任何问题。

可以期待的是,新的 APEX 免费评估服务仍然会是社区爱好者们实验、学习和拓展 APEX 可能性的空间。

有关更多的信息,请访问 Oracle 的网站

以下是截止至 2025.07.30收集的 Oracle APEX 最新博文,完整博文列表请移步这里:Oracle APEX Evangelion(EVA 补完计划)

常规 APEX 博文整理

在云端部署 Oracle APEX?内存不够、CPU 吃紧、响应慢如蜗牛?本篇博文手把手带你全面优化,从操作系统到数据库、从 Tomcat 到 Nginx,通通安排上!

🧭 背景介绍

让我们从一个真实的案例说起。你有一台部署了 APEX 应用的云服务器,配置如下:

  • 云主机:Oracle Cloud Compute VM.Standard.E4.Flex
  • 操作系统:Oracle Linux 8
  • OCPU:1颗
  • 内存:16GB
  • 数据库版本:Oracle 21c
  • APEX 版本:24.2

随着业务量增长,你的应用开始吃紧,该怎么办?——扩容 + 调优

🖥️ 操作系统扩容

云环境的好处就是伸缩自如。登录控制台,把配置从「1颗16G」一键升到「2颗32G」:

扩容完成后重启服务器,登录进去验证配置是否生效:

1
cat /proc/cpuinfo | grep "processor"

1
free -h

🧠 内存规划策略

服务器内存是 32GB,那怎么分配才合理?参考下表:

服务模块内存分配
Oracle 数据库16GB
Tomcat + ORDS8GB
Nginx2GB
系统预留6GB
阅读全文 »

本文翻译至 Oracle 官方博客,原文在此:https://blogs.oracle.com/oracleuniversity/post/announcing-race-to-certification-2025

我们很高兴宣布 Race to Certification 2025 正式启动,活动时间为 2025 年 7 月 1 日至 2025 年 10 月 31 日。无论您探索的是人工智能、Oracle 云基础设施 (OCI)、多云 还是 Oracle 数据平台,这项全球学习和认证挑战赛都是您获得宝贵技能的机会,同时还能 免费获得专业认证考试资格

选择您的赛道

今年,“2025 认证竞赛活动”设有4个学习方向:

  • Oracle 云基础设施 (OCI)
  • 多云架构(MultiCloud
  • 人工智能(AI
  • 数据(Data

您可以聚焦单一或混合搭配多个技术路径认证 - 这完全取决于您。

阅读全文 »

以下是截止至 2025.06.30收集的 Oracle APEX 最新博文,完整博文列表请移步这里:Oracle APEX Evangelion(EVA 补完计划)

常规 APEX 博文整理

Oracle Wallet 是一种安全容器,用于安全地存储敏感信息,如加密密钥、证书、凭据等,在 Oracle 安全体系中扮演着核心角色。本文主要侧重于介绍如何在 Linux 下配置 Oracle Wallet,以便可以通过 utl_http 发起 https 请求(以访问 https://www.google.com 为例)。

Wallet 的主要作用

功能场景说明
1. TDE(Transparent Data Encryption)存储主加密密钥(master encryption key),用于加密/解密表或表空间的数据。Wallet 是 TDE 启动的前提。
2. Oracle Auto-Login(自动登录 Wallet)实现数据库启动时无需手动输入密码即可访问加密内容(常用于无人值守环境)
3. Oracle Secure External Password Store(SEPS)允许将数据库连接口令以加密形式存储在 Wallet 中,避免将密码暴露在脚本或配置文件中
4. SSL/TLS 证书存储存放数据库访问其他服务(如 Web Service、SMTP、LDAP)时所需的客户端证书或信任根证书
5. Oracle GoldenGate / Data Pump 等工具集成在传输加密数据时,利用 Wallet 中的密钥对数据进行加解密
6. Database Link 密码加密(12c+)Wallet 支持存储加密后的数据库链接口令(密钥在 Wallet 中),提高 DBLink 安全性

Wallet 的类型

类型说明
Standard Wallet (ewallet.p12)手动加载,需要口令打开
Auto-Login Wallet (cwallet.sso)自动加载,无需口令(适用于无人值守环境)
Local Auto-Login Wallet与特定服务器绑定,不能跨主机使用
Password-Protected Wallet仅在手动输入密码后才能访问

通常实际部署中,开发/测试环境用 auto-login,生产环境使用手动 wallet 并设置安全策略。

阅读全文 »

以下是截止至 2025.05.31收集的 Oracle APEX 最新博文,完整博文列表请移步这里:Oracle APEX Evangelion(EVA 补完计划)

常规 APEX 博文整理

以下是截止至 2025.04.29收集的 Oracle APEX 最新博文,完整博文列表请移步这里:Oracle APEX Evangelion(EVA 补完计划)

常规 APEX 博文整理

​APEX中文社区2025北京站活动成功举办​

2025年4月26日,APEX中文社区在北京甲骨文大厦举办年度首场技术交流活动。本次活动采用线下线上联动形式,近百人参加,在这个特别的周末,共同探讨了关于APEX低代码开发平台的技术实践与创新应用成果。

​技术实践:企业场景与创新探索​

社区发起人王方钢开场作《社区现状报告》,系统介绍了社区成员构成、地域分布等基本情况,并重点介绍了APEX 24.2版本的新功能。

APEX中国社区介绍-APEX24.2新特性 - 王方钢.mov

APEX项目实施专家何小林通过企业实际案例,展示了APEX在MES生产排产、ERP系统集成等方面的应用案例,引发关于”APEX是否能够助力传统核心业务系统升级”的广泛讨论。

APEX快速实现MES-EBS开发 - 何小林.mov

技术顾问蒋京辰详细演示了APEX与钉钉的身份认证集成方案,通过单点登录实现企业系统入口的统一管理,为参会者提供了可复用的权限管控思路。

APEX钉钉身份认证方案 - 蒋京辰.mov

开发者李雨辰的创新演示成为上午场一大亮点。他基于APEX开发的网页端回合制游戏,通过角色属性管理、战斗回合计算等功能,验证了APEX在复杂交互场景中的应用潜力。”希望通过这个案例,拓展大家对APEX开发能力的认知边界。”

APEX开发网页游戏 - 李雨辰.mov

​AI技术融合应用​

下午的AI专题活动以甲骨文AI实验室参观拉开序幕,Oracle技术专家李力朝现场演示了Oracle AI的各种应用案例,让参会者直观感受Oracle AI技术的最新进展。

在技术分享环节,Oracle高级总监Joyce Li(李珈)系统介绍了Oracle AI的解决方案,让大家对Oracle AI战略有了更深层次的了解。

Oracle AI战略 - 李珈.mov

APEX技术专家徐昕(徐大爷)则通过实战演示,展示如何基于DeepSeek大模型增强APEX应用的智能化水平:利用自然语言指令快速生成数据查询应用,显著提升开发效率。

AI Powers APEX - 徐昕.mov

​共话社区发展未来​

圆桌讨论环节聚焦了APEX的生态建设,与会者就开发者培训体系、社区发展路径等议题展开了务实讨论。小伙伴们的积极的参与,无私分享实战经验与案例,是社区持续发展的核心动力。

作为APEX中文社区2025年度首场大型活动,北京站的成功举办证明了APEX在国内的应用活力。现场交流讨论也为社区后续的发展指明了方向,期待社区论坛早日上线,届时将为大家提供更好的分享交流平台。让我们一起努力,让APEX中文社区越办越好!

0%