创建 API 网关部署
使用您的函数准备就绪,您可以将 JWT 验证的本地验证机制与 Oracle Identity Cloud Service 进行集成和测试。
使用本机 JWT 验证创建 API 网关部署
通过使用 Oracle Cloud Infrastructure 网关本机 JWT 验证功能,可以为部署添加基于 Java Web 标记(JWT)的验证策略。
使用此 JWT 类型可以指定执行传入访问标记验证所需的数据(通过标头或参数)。策略需要以下信息:
- 允许的发布者:标记发布者。会出现多个 OAuth 服务器,但在这种情况下,您将使用
https://identity.oraclecloud.com/
。 - 受众:允许访问此令牌的资源。
- 公共密钥:要用于在发布者和受众内验证标记的 Json Web 密钥集(JWKS)。允许两种类型的 Jwk:
- 静态密钥:使用此选项,您需要使用 JSON 格式手动指定 JWKS,根据 RFC 7517 部分 4 应具有所需的属性。
- 远程密钥:使用此选项,您需要指定可以使用 REST 从中使用 JWKS 的 URL。此功能的限制是指定的 URL 需要不受保护,因为此功能不支持读取受保护的 URL 来检索 jwps。
- 高级选项:
- 以秒为单位的最大时钟偏差:如果 API 网关与身份提供方的时间差不同,则使用此值可以调整标记有效性窗口时间,以尝试在两个服务之间保持时间。
- 声明:在需要检入标记时验证索赔。例如,
client_id
声明或user_id
索赔。
使用端点和 JWT 验证在 API 网关中创建新的部署名称以使路由达到在之前步骤中创建的函数。在此示例中,部署名为:my_jwt_test
。
my_jwt_test
有效负载的内容。
测试端点 REST 调用
要测试新的端点 REST 调用,可以使用 Postman 的“获取新的访问标记”功能。
请注意,如果在以下步骤中使用生成的标记,则无法直接访问 Oracle Fusion Applications Cloud Service 端点,这是因为标记是通过 Oracle Visual Builder 中的 Oracle Identity Cloud Service 应用程序生成的,并且只能按照您以前设置的范围访问 Oracle Functions。此外,如果使用不同的 Oracle Identity Cloud Service 应用程序生成标记,并且应用程序缺少访问 Oracle Functions 资源范围的授权,由于您添加了 Oracle Functions Oracle Identity Cloud Service 资源的受众,网关 API 将不允许请求(它将返回 401 错误)。如果您添加了声称客户机标识验证,API 网关将确保标记仅与指定的 Oracle Identity Cloud Service 应用程序 client_ids 匹配。
使用以下参数进行测试:
- 授权类型:口令身份证明 - 此授权类型用于确保提供的用户名将作为生成的标记中的主题。
- 访问标记 URL:您的 Oracle Identity Cloud Service 实例 OAuth URL。例如,
https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token
。 - 用户名:Oracle Identity Cloud Service 和 Oracle Fusion Applications Cloud Service 中同时存在具有适当权限的用户。
- 口令:输入此用户的口令。
- ClientId:与 Oracle Visual Builder 关联的 Oracle Identity Cloud Service Client Oracle Functions 资源的 ID。
- ClientSecret:与 Oracle Visual Builder 关联的 Oracle Identity Cloud Service 应用程序客户端 Oracle Functions 资源的客户端密钥
- 范围:此范围应与 Oracle Functions Oracle Identity Cloud Service 应用程序提供的资源匹配。例如,
https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
{
"principal": "mary.jane",
"gotPrincipalFrom": "BEARER",
"statusCode": "200",
"response": {
"items": [],
"count": 0,
"hasMore": false,
"limit": 25,
"offset": 0,
"links": [
{
"rel": "self",
"href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
"name": "expenses",
"kind": "collection"
}
]
}
}
可以选择性地使用定制验证创建 API 网关部署
如果选择使用定制验证函数来验证对 API 网关端点的入站调用的 Bearer 标记,请使用此方法。
如果您后跟来自选择性地在 Oracle Cloud Infrastructure 中定义验证函数部分的词干,则此函数是您定义的可选函数。
以下代码片段是可用于部署的 Oracle Cloud Infrastructure API 部署规范 JSON 文件的示例,而不是使用向导。在此文件中,我们可以看到:
- 行 1-8:验证请求策略。这是指示对此部署中的任何请求执行的定义,首先调用此函数(functionId), 传递 tokenHeader, 如果该函数返回“真”, 则继续,否则使用 HTTP 未授权消息响应。
- 行 9-17:用于管理和控制跨源资源共享的 CORS 定义。
- 第 18-43 行:FaaS 中有两个 URL 入口点/version 指向单个函数。
{
"requestPolicies": {
"authentication": {
"type": "CUSTOM_AUTHENTICATION",
"isAnonymousAccessAllowed": true,
"functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
"tokenHeader": "Authorization"
}
"cors":{
"allowedOrigins": [<list-of-origins>],
"allowedMethods": [<list-of-methods>],
"allowedHeaders": [<list-of-implicit-headers>],
"exposedHeaders": [<list-of-exposed-headers>],
"isAllowCredentialsEnabled": <true|false>,
"maxAgeInSeconds": <seconds>
}
},
"routes": [
{
"path": "/opportunities",
"methods": [
"GET"
],
"requestPolicies": {},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
}
},
{
"path": "/opportunities/{optyid}",
"methods": [
"PATCH"
],
"requestPolicies": {},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
}
}
]
}
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>