OAuth2를 사용하여 Edge API에 액세스

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

Apigee Edge를 사용하면 OAuth2 토큰으로 인증된 Edge API 호출을 수행할 수 있습니다. OAuth2 지원은 클라우드 계정의 Edge에서 기본적으로 사용 설정됩니다. Private Cloud용 Edge를 사용하는 경우 먼저 SAML 또는 LDAP를 설정하지 않으면 OAuth2를 사용할 수 없습니다.

OAuth2 작동 방식 (Apigee Edge API 사용)

Apigee Edge API를 호출하려면 본인 인증을 해야 합니다. 사용자를 인증하려면 API에 액세스하기 위한 요청과 함께 OAuth2 액세스 토큰을 전송해야 합니다.

예를 들어 Edge의 조직에 대한 세부정보를 가져오려면 다음과 같은 URL로 요청을 보냅니다.

https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

하지만 신원을 밝히지 않고 요청을 보내실 수는 없습니다. 그렇지 않으면 모든 사용자가 조직의 세부정보를 볼 수 있습니다.

이때 OAuth2가 필요합니다. 사용자를 인증하려면 이 요청에 액세스 토큰도 함께 보내야 합니다. 액세스 토큰은 조직의 세부정보를 볼 수 있도록 사용자의 신원을 알려줍니다.

다행히 Edge OAuth2 서비스에 사용자 인증 정보를 전송하여 토큰을 가져올 수 있습니다. 서비스는 액세스 및 갱신 토큰으로 응답합니다.

OAuth2 흐름: 초기 요청

다음 이미지는 처음으로 Edge API에 액세스할 때의 OAuth2 흐름을 보여줍니다.

OAuth 흐름: 첫 번째 요청
그림 1: OAuth 흐름: 첫 번째 요청

그림 1에 표시된 대로 Edge API에 초기 요청을 하면 다음과 같이 됩니다.

  1. 액세스 토큰을 요청합니다. Edge API, acurl 또는 get_token로 이 작업을 수행할 수 있습니다. 예를 들면 다음과 같습니다.
    get_token
    Enter username:
    ahamilton@apigee.com
    Enter the password for user 'ahamilton@apigee.com'
    [hidden input]
    Enter the six-digit code if 'ahamilton@apigee.com' is MFA enabled or press ENTER:
    123456
  2. Edge OAuth2 서비스는 액세스 토큰으로 응답하고 stdout에 출력합니다. 예:
    Dy42bGciOiJSUzI1NiJ9.eyJqdGkiOiJhM2YwNjA5ZC1lZTIxLTQ1YjAtOGQyMi04MTQ0MTYxNjNhNTMiLCJz
    AJpdGUiLCJhcHByb3ZhbHMubWUiLCJvYXV0aC5hcHByb3ZhbHMiXSwiY2xpZW50X2lkIjoiZWRnZWNsaSIsIm
    NjbGkiLCJhenAiOiJlZGdlY2xpIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjJkMWU3NDI
    GzQyMC1kYzgxLTQzMDQtOTM4ZS1hOGNmNmVlODZhNzkiLCJzY29wZSI6WyJzY2ltLm1lIiwib3BlbmlkIiwic
    ENC05MzhlLWE4Y2Y2ZWU4NmE3OSIsIm9yaWdpbiI6InVzZXJncmlkIiwidXNlcl9uYW1lIjoiZGFuZ2VyNDI0
    RI6ImUyNTM2NWQyIiwiaWF0IjoxNTI4OTE2NDA5LCJleHAiOjE1Mjg5MTgyMDksImlzcyI6Imh0dHBzOi8vbG
    420iLCJlbWFpbCI6ImRhbmdlcjQyNDJAeWFob28uY29tIiwiYXV0aF90aW1lIjoxNTI4OTE2NDA5LCJhbCI6M
    2lLmNvbSIsInppZCI6InVhYSIsImF1ZCI6WyJlZGdlY2xpIiwic2NpbSIsIm9wZW5pZCIsInBhc3N3b3JkIiw

    acurlget_token 유틸리티는 액세스 및 갱신 토큰을 ~/.sso-cli에 자동으로 저장합니다 (갱신 토큰은 stdout에 작성되지 않음). 토큰을 받기 위해 Edge OAuth2 서비스를 사용하는 경우 나중에 사용할 수 있도록 저장해야 합니다.

  3. 액세스 토큰을 사용하여 Edge API에 요청을 전송합니다. acurl는 토큰을 자동으로 연결합니다. 예:
    acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

    다른 HTTP 클라이언트를 사용하는 경우 액세스 토큰을 추가해야 합니다. 예를 들면 다음과 같습니다.

    curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
      -H "Authorization: Bearer ACCESS_TOKEN"
  4. Edge API는 요청을 실행하고 일반적으로 데이터가 포함된 응답을 반환합니다.

OAuth2 흐름: 후속 요청

후속 요청에서는 사용자 인증 정보를 토큰으로 교환할 필요가 없습니다. 대신 아직 만료되지 않았다면 이미 보유한 액세스 토큰만 포함하면 됩니다.

OAuth 흐름: 후속 요청
그림 2: OAuth 흐름: 후속 요청

그림 2에 표시된 것처럼 액세스 토큰이 이미 있는 경우:

  1. 액세스 토큰을 사용하여 Edge API에 요청을 전송합니다. acurl는 토큰을 자동으로 연결합니다. 다른 도구를 사용하는 경우 토큰을 수동으로 추가해야 합니다.
  2. Edge API는 요청을 실행하고 일반적으로 데이터가 포함된 응답을 반환합니다.

OAuth2 흐름: 액세스 토큰 만료 시

액세스 토큰이 만료되면 (12시간 후) 갱신 토큰을 사용하여 새 액세스 토큰을 받을 수 있습니다.

OAuth 흐름: 액세스 토큰 새로고침
그림 3: OAuth 흐름: 액세스 토큰 새로고침

그림 3에 표시된 것처럼 액세스 토큰이 만료되면 다음과 같이 하세요.

  1. Edge API에 요청을 전송했지만 액세스 토큰이 만료되었습니다.
  2. Edge API는 요청을 승인되지 않은 것으로 간주하여 거부합니다.
  3. Edge OAuth2 서비스에 갱신 토큰을 전송합니다. acurl를 사용하는 경우 이 작업이 자동으로 수행됩니다.
  4. Edge OAuth2 서비스가 새 액세스 토큰으로 응답합니다.
  5. 새 액세스 토큰과 함께 Edge API에 요청을 전송합니다.
  6. Edge API는 요청을 실행하고 일반적으로 데이터가 포함된 응답을 반환합니다.

토큰 가져오기

Edge API로 보낼 수 있는 액세스 토큰을 가져오려면 curl과 같은 유틸리티 외에 다음 Apigee 유틸리티를 사용하세요.

  • get_token 유틸리티: Edge API를 호출하는 데 사용할 수 있는 액세스 토큰과 갱신 토큰으로 Apigee 사용자 인증 정보를 교환합니다.
  • acurl 유틸리티: 표준 curl 명령어에 편의 래퍼를 제공합니다. Edge API에 대한 HTTP 요청을 생성하고, get_token에서 액세스 및 갱신 토큰을 가져오고, 액세스 토큰을 Edge API에 전달합니다.
  • Edge OAuth2 서비스의 토큰 엔드포인트: Edge API 호출을 통해 Apigee 사용자 인증 정보에서 액세스 토큰과 갱신 토큰을 교환합니다.

유틸리티는 Apigee 계정 사용자 인증 정보 (이메일 주소 및 비밀번호)를 다음과 같은 기간의 토큰으로 교환합니다.

  • 액세스 토큰은 12시간 후에 만료됩니다.
  • 갱신 토큰은 30일 후에 만료됩니다.

따라서 acurl 또는 get_token로 API 호출을 완료하면 30일 동안 토큰 쌍을 계속 사용할 수 있습니다. 만료 후에는 사용자 인증 정보를 다시 입력하고 새 토큰을 받아야 합니다.

OAuth2로 Edge API에 액세스

Edge API에 액세스하려면 API 엔드포인트에 요청을 보내고 액세스 토큰을 포함합니다. 명령줄 유틸리티(예: curl), 브라우저 기반 UI(예: Postman), Apigee 유틸리티(예: acurl)를 포함한 모든 HTTP 클라이언트에서 이 작업을 수행할 수 있습니다.

acurlcurl를 사용하여 Edge API에 액세스하는 방법은 다음 섹션에서 설명합니다.

acurl 사용

acurl로 Edge API에 액세스하려면 초기 요청에 사용자 인증 정보를 포함해야 합니다. Edge OAuth2 서비스가 액세스 및 갱신 토큰으로 응답합니다. acurl는 토큰을 로컬에 저장합니다.

후속 요청 시 acurl~/.sso-cli에 저장된 토큰을 사용하므로 토큰이 만료될 때까지 사용자 인증 정보를 다시 포함하지 않아도 됩니다.

다음 예는 'ahamilton-eval' 조직의 세부정보를 가져오는 초기 acurl 요청을 보여줍니다.

acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -u ahamilton@apigee.com
Enter the password for user 'ahamilton@apigee.com'
[hidden input]
Enter the six-digit code (no spaces) if 'ahamilton@apigee.com' is MFA-enabled or press ENTER:
1a2b3c
{
  "createdAt" : 1491854501264,
  "createdBy" : "noreply_iops@apigee.com",
  "displayName" : "ahamilton",
  "environments" : [ "prod", "test" ],
  "lastModifiedAt" : 1491854501264,
  "lastModifiedBy" : "noreply_iops@apigee.com",
  "name" : "ahamilton",
  "properties" : {
    "property" : [ {
      "name" : "features.isSmbOrganization",
      "value" : "false"
    }, {
      "name" : "features.isCpsEnabled",
      "value" : "true"
    } ]
  },
  "type" : "trial"
}

acurl https://api.enterprise.apigee.com/v1/o/ahamilton-eval/apis/helloworld/revisions/1/policies

[ "SOAP-Message-Validation-1", "Spike-Arrest-1", "XML-to-JSON-1" ]

이 예시에서는 조직에 대한 세부정보를 가져오는 것 외에도 'helloworld' API 프록시 내에서 정책 목록을 가져오는 두 번째 요청을 보여줍니다. 두 번째 요청에서는 URL에서 '조직'에 단축된 'o'를 사용합니다.

acurl는 두 번째 요청에서 액세스 토큰을 자동으로 전달합니다. acurl에서 OAuth2 토큰을 저장한 후에는 사용자 인증 정보를 전달할 필요가 없습니다. 후속 호출을 위해 ~/.sso-cli에서 토큰을 가져옵니다.

자세한 내용은 acurl을 사용하여 Edge API에 액세스를 참조하세요.

curl 사용

curl를 사용하여 Edge API에 액세스할 수 있습니다. 이렇게 하려면 먼저 액세스 및 갱신 토큰을 가져와야 합니다. get_token 또는 Edge OAuth2 서비스와 같은 유틸리티를 사용하여 가져올 수 있습니다.

액세스 토큰을 성공적으로 저장한 후에는 다음 예시와 같이 Edge API 호출의 Authorization 헤더에 액세스 토큰을 전달합니다.

curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -H "Authorization: Bearer ACCESS_TOKEN"

액세스 토큰은 발급 후 12시간 동안 유효합니다. 액세스 토큰이 만료된 후 갱신 토큰을 30일 동안 사용하면 사용자 인증 정보를 요구하지 않고 다른 액세스 토큰을 발급할 수 있습니다. Apigee에서는 API 호출마다 사용자 인증 정보를 입력하고 새로 요청하는 대신 참조 토큰이 만료된 후에만 새 액세스 토큰을 요청하는 것이 좋습니다.

토큰 만료

액세스 토큰이 만료되면 사용자 인증 정보를 다시 제출하지 않고도 갱신 토큰을 사용하여 새 액세스 토큰을 받을 수 있습니다.

액세스 토큰을 갱신하는 방법은 사용 중인 도구에 따라 다릅니다.

  • acurl: 아무 조치도 필요하지 않습니다. 오래된 액세스 토큰이 포함된 요청을 보내면 acurl에서 액세스 토큰을 자동으로 새로고침합니다.
  • get_token: get_token를 호출하여 액세스 토큰을 새로고침합니다.
  • 에지 OAuth2 서비스: 다음이 포함된 요청을 전송합니다.
    • 갱신 토큰
    • grant_type 양식 매개변수가 'refresh_token'으로 설정됨

머신 사용자용 OAuth2

acurlget_token 유틸리티를 사용하여 머신 사용자를 위한 OAuth2 인증을 통해 Edge API에 대한 자동 액세스를 스크립팅할 수 있습니다. 다음 예에서는 get_token를 사용하여 액세스 토큰을 요청한 후 토큰 값을 curl 호출에 추가하는 방법을 보여줍니다.

  USER=me@example.com
  PASS=not-that-secret
  TOKEN=$(get_token -u $USER:$PASS -m '')
  curl -H "Authorization: Bearer $TOKEN" 'https://api.enterprise.apigee.com/v1/organizations/...'

또는 acurl 유틸리티를 사용하여 토큰 요청과 curl 호출을 결합할 수 있습니다. 예를 들면 다음과 같습니다.

  USER=me@example.com
  PASS=not-that-secret
  acurl -u $USER:$PASS -m '' 'https://api.enterprise.apigee.com/v1/organizations/...'
  

두 가지 예시에서 -m 값을 빈 문자열로 설정하면 머신 사용자에게 MFA 코드를 입력하라는 메시지가 표시되지 않습니다.