BTP

XSUAA OAuth2 설정 실수 3가지 #shorts #SAP #BTP

▶ YouTube에서 보기

XSUAA OAuth2 설정에서 자주 발생하는 3가지 실수

SAP BTP XSUAA(Extended Services for User Account and Authentication)는 BTP 애플리케이션의 인증/인가를 담당합니다. OAuth2 기반으로 동작하며, xs-security.json 설정이 잘못되면 앱이 아예 실행되지 않거나, 권한 체크가 동작하지 않거나, 토큰이 너무 빨리 만료됩니다.

실수 1: xsappname 중복 또는 특수문자 포함

# 잘못된 xs-security.json
{
  "xsappname": "My Sales App 2026",  # 공백 포함 — 오류 발생
  "tenant-mode": "dedicated"
}

# 또 다른 오류: 같은 서브어카운트에 동일 xsappname 사용
# 두 번째 XSUAA 인스턴스 생성 시 실패
# 올바른 방법: 영문 소문자, 숫자, 하이픈만 사용
{
  "xsappname": "my-salesapp-prod-2026",  # 허용
  "tenant-mode": "dedicated",
  "description": "My Sales App Production"
}

# xsappname 규칙:
# - 영문 소문자 + 숫자 + 하이픈(-) + 언더스코어(_)만 허용
# - 공백, 특수문자 금지
# - 서브어카운트 내 유일해야 함
# - 최대 100자

실수 2: Scope 이름과 Role Template 불일치

# 잘못된 설정: scope 이름과 role-template scope-references 불일치
{
  "xsappname": "salesapp",
  "scopes": [
    { "name": "$XSAPPNAME.SalesOrder_Read" }   # 언더스코어
  ],
  "role-templates": [
    {
      "name": "SalesViewer",
      "scope-references": ["$XSAPPNAME.SalesOrderRead"]  # 언더스코어 없음
    }
  ]
}
# role-template이 존재하지 않는 scope를 참조 → 권한 체크 항상 실패
# 올바른 설정: scope 이름과 scope-references 완전 일치
{
  "xsappname": "salesapp",
  "scopes": [
    {
      "name": "$XSAPPNAME.SalesOrder.Read",
      "description": "판매 주문 조회"
    },
    {
      "name": "$XSAPPNAME.SalesOrder.Write",
      "description": "판매 주문 생성/수정"
    },
    {
      "name": "$XSAPPNAME.Admin",
      "description": "관리자 전체 권한"
    }
  ],
  "role-templates": [
    {
      "name": "SalesViewer",
      "description": "주문 조회 전용",
      "scope-references": ["$XSAPPNAME.SalesOrder.Read"]  # 정확히 일치
    },
    {
      "name": "SalesManager",
      "description": "주문 관리",
      "scope-references": [
        "$XSAPPNAME.SalesOrder.Read",
        "$XSAPPNAME.SalesOrder.Write"
      ]
    }
  ]
}

실수 3: 토큰 유효시간 설정 오류

# 잘못된 설정 1: token-validity 너무 짧음
{
  "oauth2-configuration": {
    "token-validity": 300      # 5분 — 세션이 너무 빨리 만료됨
  }
}

# 잘못된 설정 2: refresh-token-validity 없음
{
  "oauth2-configuration": {
    "token-validity": 43200    # 12시간
    # refresh-token-validity 없음 → 12시간마다 재로그인
  }
}
# 올바른 설정: 업무 패턴에 맞는 토큰 유효시간
{
  "xsappname": "salesapp",
  "oauth2-configuration": {
    "token-validity": 43200,          # 12시간 (업무 시간 커버)
    "refresh-token-validity": 604800, # 7일 (주중 재로그인 불필요)
    "autoapprove": true               # 사용자 동의 화면 스킵 (내부 앱)
  }
}

# 타입별 권장 유효시간:
# 인터널 업무용: access=12h, refresh=7d
# 고객 포털: access=1h, refresh=1d
# API 전용: access=1h, refresh 없음
# 배치 프로세스: access=24h, 별도 기술 사용자 권장

XSUAA 설정 검증 방법

# XSUAA 토큰 내용 확인 (디버깅)
# 1. 앱 로그인 후 JWT 토큰 추출
# 2. jwt.io에서 디코딩 (운영 토큰은 절대 외부 사이트에 붙여넣기 금지!)
# 로컬 디코딩:
python3 -c "
import base64, json, sys
token = sys.argv[1].split('.')[1]
padding = 4 - len(token) % 4
token += '=' * padding
print(json.dumps(json.loads(base64.b64decode(token)), indent=2, ensure_ascii=False))
" YOUR_JWT_TOKEN

# 확인 항목:
# - scope: ["salesapp!t12345.SalesOrder.Read"] 형태로 포함되어 있는가
# - exp: 만료 시간이 적절한가
# - iss: 올바른 XSUAA 인스턴스 URL인가

CDS에서 XSUAA 스코프 연결

# service.cds
service SalesService @(requires: 'authenticated-user') {
  @(restrict: [
    { grant: 'READ',   to: 'SalesViewer' },
    { grant: 'CREATE', to: 'SalesManager' },
    { grant: 'UPDATE', to: 'SalesManager' }
  ])
  entity Orders as projection on db.Orders;
}
# xs-security.json의 role-template 이름과 일치해야 함

공식 문서

XSUAA xs-security.json 전체 스펙은 SAP BTP XSUAA 공식 문서에서 확인하세요.

댓글 0

아직 댓글이 없습니다.