Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

OAuth 2.0으로 사용자에게 귀속되는 SAP 쓰기

사용자 귀속 쓰기는 공용 기술 계정의 권한만 사용하는 대신 실제 사용자의 SAP 권한으로 BAPI 등의 변경을 수행합니다. SAP가 OAuth 2.0 서버, Foundry가 클라이언트가 되는 Authorization Code 흐름입니다. 사용자는 처음 쓸 때 SAP에서 Foundry에 권한을 위임하는 승인을 진행합니다.

대량 및 병렬 BAPI 쓰기는 OAuth 2.0 인증을 지원하지 않으므로 이 흐름과 구분합니다.

SAP 측 전제 조건

  • Connector SP21 이상
  • SAP_BASIS 7.4 SP09 이상과 활성화한 SAP Gateway
  • Foundry 기술 사용자의 유형이 SYSTEM
  • 기술 사용자와 쓰기를 수행할 최종 사용자에게 /PALANTIR/OAUTH_CLIENT 할당
  • 최종 사용자에게 /PALANTIR/CONTENT_FUNCTION_ALL과 대상 업무 함수에 필요한 권한 할당
  • OAuth 구성에 필요한 /sap/public/bc 서비스, /sap/bc/sec/oauth2*, /default_host/sap/bc/webdynpro/sap/oauth2_authority 활성화

SAP OAuth 서버 진단에는 SAP Note 1688545가 관련됩니다. Note 열람에는 SAP 로그인이 필요합니다.

SOAUTH2 클라이언트 등록

  1. SOAUTH2에서 Create를 선택합니다.
  2. OAuth 2.0 Client ID에 Foundry 기술 사용자의 SAP 사용자명을 입력합니다.
  3. User ID에도 같은 기술 사용자명을 지정합니다.
  4. Client User ID and Password와 SSL Client Certificate를 모두 활성화합니다.
  5. Redirect URI에 자신의 Foundry 기본 도메인의 다음 callback 경로를 지정합니다.
https://<FOUNDRY_DOMAIN>/workspace/oauth2-clients/callback
  1. Scope Assignment에 /PALANTIR/SRV_0001을 추가합니다. 설명은 SAP 함수로 Foundry 쓰기를 수행한다는 용도를 나타내도록 작성합니다.
  2. Next와 Finish로 등록을 마칩니다.

Palantir OData 서비스

Maintain service에서 opu > odata > palantir를 찾아 Activate Service로 활성화합니다. Create/Change a Service의 Interactive Options에서 GUI Configuration을 열고 ~CHECK_CSRF_TOKEN을 0으로 설정합니다. 이 절차의 대상은 Palantir OData 서비스이며 SAP 전체 서비스의 CSRF 검증을 무차별적으로 끄는 설정이 아닙니다.

/IWFND/MAINT_SERVICE에서 System Aliases의 Add System Alias를 선택하고 다음 값을 지정합니다.

필드값
Service Doc. Identifier/PALANTIR/SRV_0001
User Role비움
Host Name비움
SAP System AliasLOCAL
Metadata Default선택하지 않음
Default System선택
Tech. Svc. Name/PALANTIR/SRV
Ext. Service NameODATA_SRV
Version1
User Name비움

Foundry 연결 경로 선택

SAP 접근 경로외부 인증 애플리케이션 구성
Foundry 워커에서 에이전트 프록시로 SAP에 접근표준 Foundry Worker OAuth 연결
SAP Data Accelerator 사용SAP ERP 소스의 토큰 웹훅 두 개와 On-premise webhook 연결. 이 UI 선택지는 Legacy 표시지만 소스는 Foundry 워커입니다.
기존 전용 REST API 토큰 웹훅 구성지원이 유지되는 Legacy 경로. 새 구성에는 앞의 해당 경로를 사용합니다.

외부 인증 애플리케이션은 조직 수준에서 관리합니다. Manage outbound applications 권한이 필요하며 기본적으로 조직 관리자 역할에 부여됩니다.

에이전트 프록시를 사용하는 표준 연결

  1. Control Panel의 Organization settings > Outbound applications에서 New application을 선택합니다.
  2. Application name과 사용자에게 표시할 Approval prompt를 입력합니다. 예를 들어 “Foundry가 SAP에서 사용자를 대신하여 작업하도록 허용할까요?”처럼 승인 대상을 명확히 합니다.
  3. OAuth 2.0 server connection에서 Foundry Worker를 선택합니다.
  4. Authorization page URL과 Token endpoint URL에 SAP HTTPS 호스트 및 포트를 포함합니다.
https://<SAP_DOMAIN>:<SAP_PORT>/sap/bc/sec/oauth2/authorize
https://<SAP_DOMAIN>:<SAP_PORT>/sap/bc/sec/oauth2/token
  1. SAP에 접근할 수 있는 네트워크의 Data Connection 에이전트를 경유하는 agent proxy egress policy를 연결합니다.

  1. OAuth 2.0 settings의 Client ID를 SOAUTH2에 등록한 값으로 맞추고 Scopes에 /PALANTIR/SRV_0001을 추가합니다. 표준 외부 인증 애플리케이션의 Client secret도 SAP에 등록한 클라이언트 인증 방식에 맞게 구성해야 합니다. 클라이언트 사용자 ID/비밀번호 방식이면 그 클라이언트 사용자의 자격 증명과 맞춰야 합니다.
  2. 저장한 애플리케이션을 SAP BAPI 웹훅의 인증에 연결합니다.

에이전트 프록시는 Foundry가 토큰 서버에 연결하는 경로입니다. 사용자의 컴퓨터도 브라우저에서 SAP authorization endpoint에 접근할 수 있어야 합니다.

SAP Data Accelerator를 사용하는 연결

이 사용자 귀속 쓰기는 Beta이며 토큰 및 갱신 웹훅, 외부 인증 애플리케이션과 BAPI 실행 모두 해당 제공 조건을 따릅니다. SAP OAuth 서버와 Data Accelerator 소스 연결을 먼저 준비합니다.

토큰 웹훅 생성

같은 SAP ERP 소스에서 get token과 refresh token 웹훅을 각각 만듭니다. 두 웹훅 모두 다음 조건을 지킵니다.

  • Function configuration을 끕니다. 함수로 게시한 웹훅은 외부 인증 애플리케이션에서 사용할 수 없습니다.
  • Request configuration의 Authorization에서 Outbound application을 Not selected로 둡니다. 이 웹훅들이 토큰을 얻는 애플리케이션을 다시 인증에 지정하면 순환 의존 관계가 생깁니다.
  • Webhook safety는 기본 Write API를 유지합니다.
  • Task type을 고른 뒤 Insert example로 본문과 입력/출력 매핑을 생성합니다.

Get token 웹훅의 Task type은 sap-erp-oauth2-token-webhook-task입니다.

입력자료형필요 조건
client_idString필수
redirect_uriString필수
authorization_codeString필수
code_verifierOptional string외부 인증 애플리케이션에서 Enable PKCE를 켜면 필수

본문은 다음 Handlebars 템플릿입니다.

{
    "client_id": {{json client_id}},
    "redirect_uri": {{json redirect_uri}},
    "authorization_code": {{json authorization_code}},
    "code_verifier": {{json code_verifier}}
}

Refresh token 웹훅은 sap-erp-oauth2-refresh-webhook-task를 사용합니다.

입력자료형필요 조건
client_idString필수
refresh_tokenString필수
{
    "client_id": {{json client_id}},
    "refresh_token": {{json refresh_token}}
}

Foundry가 승인과 갱신 시 입력값을 공급합니다. 본문의 매개변수 참조를 고정된 토큰 값으로 바꾸지 않습니다.

두 웹훅의 출력 매핑

Responses에서 출력마다 별도 매개변수를 만들고 같은 이름의 응답 key에 연결합니다. Insert example이 생성한 결과도 다음과 맞는지 확인합니다.

출력자료형응답 key
access_tokenStringaccess_token
scopeStringscope
token_typeOptional stringtoken_type
expires_inOptional stringexpires_in
refresh_tokenOptional stringrefresh_token

expires_in도 이 웹훅 매핑에서는 Optional string입니다. 숫자형으로 임의 변경하지 않습니다.

Refresh token이 반환되지 않으면 토큰 만료 뒤 사용자가 다시 승인해야 합니다. expires_in이 없으면 외부 인증 애플리케이션에 설정한 Access token expiration을 사용합니다. 서버가 만료값을 반환하면 그 값이 애플리케이션의 수동 만료 설정보다 우선합니다.

외부 인증 애플리케이션

  1. Control Panel의 Outbound applications에서 이름과 승인 문구를 입력합니다.
  2. 서버 연결에서 Legacy로 표시된 On-premise webhook을 선택합니다. 이것은 토큰 교환 연결 방식이며 SAP ERP 소스의 실행 위치는 계속 Foundry 워커입니다.
  3. Source connection에 웹훅을 만든 SAP ERP 소스를 선택합니다.
  4. Token webhook과 Refresh token webhook에 앞의 두 웹훅을 연결합니다.
  5. Authorization page URL에는 사용자의 브라우저가 접근할 수 있는 SAP 주소의 /sap/bc/sec/oauth2/authorize를 지정합니다. 토큰 교환과 갱신은 Data Accelerator를 쓰지만 브라우저의 대화형 승인은 별도 네트워크 접근이 필요합니다.
  6. Client ID를 SOAUTH2의 클라이언트 ID, 즉 앞서 등록한 기술 사용자명으로 지정하고 Scopes에 /PALANTIR/SRV_0001을 추가합니다.
  7. 저장합니다.

같은 SAP ERP 소스의 실제 BAPI 웹훅에는 Request configuration > Authorization > Outbound application에서 이 애플리케이션을 선택합니다. 유효한 토큰이 없으면 사용자 승인을 요청하고, 이후 사용자의 SAP 권한으로 쓰며 필요한 때 refresh 웹훅으로 새 토큰을 받습니다.

기존 REST API 웹훅 기반 OAuth

이전의 전용 REST API 소스 방식은 Legacy이며 추가 개발은 예정되어 있지 않지만 기존 통합은 계속 사용할 수 있습니다. SAP 소스 URL은 HTTPS여야 합니다.

REST API 소스

새 REST API 소스에 SAP의 기본 도메인과 포트를 설정하고 Basic 인증에 SAP 연결 사용자명과 비밀번호를 지정합니다.

Authorization code 웹훅

  1. REST API 소스에서 Create webhook을 선택하고 이름을 지정합니다.
  2. Function Configuration을 끕니다.
  3. Calls의 메서드는 POST, 경로는 sap/bc/sec/oauth2/token으로 지정합니다. 기본 client가 아니면 Query Params의 sap-client도 설정합니다.

  1. 입력 redirect_uri, client_id, authorization_code를 각각 String으로 만듭니다. PKCE를 사용하는 외부 인증 애플리케이션이라면 code_verifier 입력도 추가하여 전달해야 합니다.

  1. Body에서 Form URL Encoded를 선택하고 다음 필드를 구성합니다.
Form 필드값 또는 매핑
grant_type고정값 authorization_code
redirect_uri같은 이름의 입력
client_id같은 이름의 입력
code입력 authorization_code
code_verifierPKCE 사용 시 해당 입력

필드에 @를 입력하고 Input Parameter를 선택한 뒤 대상을 골라 Add하면 매핑할 수 있습니다.

  1. Responses에 access_token, token_type, expires_in, refresh_token, scope를 각각 String 출력으로 만들고 같은 이름의 응답 key로 추출합니다.
  2. Create webhook and continue로 저장합니다.

Refresh 웹훅

같은 REST API 소스에서 이름이 다른 웹훅을 만들고 Function Configuration을 끕니다. 메서드와 경로는 앞과 같은 POST sap/bc/sec/oauth2/token이며 필요하면 sap-client를 설정합니다. Content-Type은 application/x-www-form-urlencoded입니다.

입력은 client_id, refresh_token의 두 String입니다. 본문은 다음과 같이 매핑합니다.

Form 필드값 또는 매핑
grant_type고정값 refresh_token
client_id같은 이름의 입력
refresh_token같은 이름의 입력

출력은 토큰 웹훅과 같은 다섯 String 필드를 응답 key로 추출하고 저장합니다.

Legacy 애플리케이션 연결

Control Panel에서 사용자 정의 웹훅 기반 외부 인증 애플리케이션을 만들고 위 두 웹훅을 Token 및 Refresh token 항목으로 연결합니다. 브라우저용 SAP authorization URL, SOAUTH2의 Client ID와 /PALANTIR/SRV_0001 scope를 지정합니다. 저장한 앱을 실제 SAP 쓰기 웹훅의 인증에 사용합니다.

토큰 교환 웹훅과 업무 BAPI 웹훅의 인증 역할을 구분하고, 토큰이나 갱신 토큰을 고정 본문 또는 로그에 기록하지 않습니다.