API 게이트웨이 배치 생성
이 기능이 준비되어 있으면 Oracle Identity Cloud Service에서 JWT 검증을 위한 기본 인증 방식을 통합하고 테스트할 수 있습니다.
고유 JWT 검증을 사용하여 API 게이트웨이 배치 생성
Oracle Cloud Infrastructure 게이트웨이 고유 JWT 검증 기능을 사용하면 배포에 대해 JWT(Java 웹 토큰) 기반 인증 정책을 추가할 수 있습니다.
이 JWT 유형을 사용하면 머리글 또는 매개변수를 통해 수신 액세스 토큰의 검증을 수행하는 데 필요한 데이터를 지정할 수 있습니다. 이 정책에는 다음 정보를 제공해야 합니다.
- 허용된 발행자: 토큰 발행자 여러 OAuth 서버가 발생하지만 이 경우
https://identity.oraclecloud.com/
를 사용합니다. - 대상자: 이 토큰에 액세스할 수 있는 리소스입니다.
- 공용 키: 발행자 및 대상자 내에서 토큰을 검증하는 데 사용할 JWKS(Json 웹 키 집합) 입니다. 두 종류의 Jks가 허용됩니다.
- 정적 키: 이 옵션을 사용하려면 JSON 형식을 사용하여 JWKS를 수동으로 지정해야 합니다. 이 형식은 RFC 7517섹션 4에 따라 필요한 속성이 있어야 합니다.
- 원격 키: 이 옵션을 사용할 경우 REST를 사용하여 JWKS를 사용할 수 있는 URL을 지정해야 합니다. 현재 이 기능은 Jks를 검색하기 위해 보호된 URL을 읽을 수 없으므로 이 기능의 제한 사항은 지정된 URL의 보호를 해제해야 한다는 것입니다.
- 고급 옵션:
- 최대 클럭 불균형(초): API 게이트웨이와 id 제공자의 시간 차이가 있을 경우 이 값을 통해 두 서비스 간의 시간 초과를 조정하도록 토큰 유효성 기간 시간을 조정할 수 있습니다.
- 클레임: 수신 토큰이 필요한 경우 청구를 확인합니다. 예:
client_id
클레임 또는user_id
클레임.
끝점 및 JWT 검증을 사용하여 이전 단계에서 생성된 기능에 도달할 수 있도록 경로를 지정하여 API 게이트웨이에 새 배치 이름을 생성합니다. 이 예제에서 배치의 이름은 my_jwt_test
입니다.
my_jwt_test
페이로드의 콘텐츠를 검토할 수 있습니다.
끝점 REST 호출 테스트
새 끝점 REST 호출을 테스트하려면 Postman의 새 액세스 토큰 가져오기 기능을 사용할 수 있습니다.
다음 단계에서 생성된 토큰을 사용하는 경우 토큰이 Oracle Visual Builder의 Oracle Identity Cloud Service App과 함께 생성되었으며 이전에 설정한 범위별로 현재 구성으로 Oracle Functions에 도달할 수만 있으므로 Oracle Fusion Applications Cloud Service 끝점에 직접 연결할 수 없습니다. 또한 다른 Oracle Identity Cloud Service 앱을 사용하여 토큰을 생성하고 애플리케이션에 Oracle Functions 리소스 범위에 도달할 수 있는 권한이 없는 경우 Oracle Functions Oracle Identity Cloud Service 리소스의 대상자를 추가했기 때문에 API 게이트웨이에서 요청을 허용하지 않습니다(401오류 반환). 청구 클라이언트 ID 확인을 추가한 경우 API 게이트웨이는 지정된 Oracle Identity Cloud Service Apps 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 App Client 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를 전달하고, true를 반환한 다음, 그렇지 않은 경우 HTTP 인증되지 않은 메시지에 응답함을 알리는 정의입니다.
- 행 9-17: 상호 원본 리소스 공유를 관리 및 제어하기 위한 CORS 정의입니다.
- 행 18-43: 두 개의 URL 시작점/verb가 FaaS의 개별 함수에 관련됩니다.
{
"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>