Google App Engine Admin API를 쉘 스크립트에서 두드리기 위해 TOKEN을 가져옵니다.

10924 단어 GAEOAuthapi

목적



Google의 App Engine Admin API를 curl에서 두드려야했습니다.
서버 측 등에서 쉘 스크립트로 이동하므로 refresh_token을 이용하여 여러 번 사용할 수있는 형태로 토큰을 얻고 싶습니다.

전제



이번은, 2018/12/06에 사내에서 이미 이용하고 있는 프로젝트에 대해서 설정했기 때문에, 설명하는 순서를 실행할 때, 사람에 따라서는 과금 정보의 등록 화면이나, 다른 동의 화면등이 나올지도 모릅니다 응.
그 근처에 대해서는, 적절히 읽어 주세요.

흐름



  • Developer Console의 API Manager으로 이동하여 App Engine Admin API를 선택하고 API를 활성화합니다.
  • API 및 서비스 자격 증명 화면에서 OAuth 클라이언트 ID를 만들고 클라이언트 ID, 클라이언트 비밀 ID를 얻습니다.
  • 코드 얻기
  • refresh_token 얻기
  • 쉘 실행시에 클라이언트 ID, 클라이언트 시크릿 ID, refresh_token에 근거해 access_token를 취득한다.
  • access_token을 header에 포함시켜 API를 실행한다

  • 1. Developer Console의 API Manager에 액세스하여 App Engine Admin API를 선택하여 API를 활성화합니다.



    Developer Console의 API Manager 로 이동합니다.


    이번에 내 목표는 App Engine Admin API이므로 그곳을 선택하고 활성화합니다.


    2. API 및 서비스 자격 증명 화면에서 OAuth 클라이언트 ID를 만들고 클라이언트 ID, 클라이언트 비밀 ID를 얻습니다.



    API를 사용 설정한 후 API 및 서비스 화면에서 자격 증명으로 이동하여 자격 증명 만들기에서 OAuth 클라이언트 ID를 만듭니다.


    애플리케이션 유형을 '기타'로 설정하고 이름을 입력합니다.

    그런 다음 클라이언트 ID를 설정하여 클라이언트 ID, 클라이언트 비밀을 기록합니다.


    3. 코드 얻기



    OAuth 2.0 Scopes for Google APIs 을 참고로 scope를 설정하고 redirect_uri 를 urn:ietf:wg:oauth:2.0:oob로 아래에 액세스하십시오
    https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI&scope=$SCOPE&access_type=offline
    

    쉘을 만들고 URL을 만들고 브라우저에 붙여 넣었습니다.

    gae_token.sh
    #!/bin/sh
    
    export CLIENT_ID="client_id.apps.googleusercontent.com"
    export CLIENT_SECRET="CLIENT_SECRET"
    
    export SCOPE="https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform"
    export REDIRECT_URI="urn:ietf:wg:oauth:2.0:oob"
    
    echo "https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=$CLIENT_ID&redirect_uri=$REDIRECT_URI&scope=$SCOPE&access_type=offline"
    

    확인 화면이 나온 후 코드가 표시되므로 기록합니다.

    4. refresh_token 얻기



    이전 코드를 가져와 refresh_token을 가져옵니다.

    gae_token.sh
    #!/bin/sh
    
    export CLIENT_ID="client_id.apps.googleusercontent.com"
    export CLIENT_SECRET="CLIENT_SECRET"
    export AUTHORIZATION_CODE="4/AUTHORIZATION_CODE"
    export REDIRECT_URI="urn:ietf:wg:oauth:2.0:oob"
    
    
    curl -X POST --data "code=$AUTHORIZATION_CODE" --data "client_id=$CLIENT_ID" --data "client_secret=$CLIENT_SECRET" --data "redirect_uri=$REDIRECT_URI" --data "grant_type=authorization_code" --data "access_type=offline" https://www.googleapis.com/oauth2/v4/token
    

    이 때, 취득한 코드가 시간이 지나 무효가 되고 있으면 Bad Request와에서 고민하기 때문에 주의해 주세요. (그래서 잠시 빠졌습니다)
    { 
      "error": "invalid_grant",
      "error_description": "Bad Request"
    }
    

    잘하면 refresh_token을 얻을 수 있습니다.
    access_token은 이제 무시하고 refresh_token을 기록합니다.
    { 
      "access_token": "access_tokenaccess_tokenaccess_tokenaccess_tokenaccess_tokenaccess_tokenaccess_token",
      "expires_in": 3600,
      "refresh_token": "1/REFRESH_TOKEN",
      "scope": "https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin",
      "token_type": "Bearer"
    }%                                                                                                                                                                                                                                                                              
    

    5. 쉘 실행시, 클라이언트 ID, 클라이언트 시크릿 ID, refresh_token에 기초하여 access_token을 취득한다



    refresh_token을 기반으로 access_token을 가져옵니다.

    gae_token.sh
    #!/bin/sh
    
    export CLIENT_ID="client_id.apps.googleusercontent.com"
    export CLIENT_SECRET="CLIENT_SECRET"
    export REFRESH_TOKEN="1/REFRESH_TOKEN"
    
    curl -X POST --data "refresh_token=$REFRESH_TOKEN" --data "client_id=$CLIENT_ID" --data "client_secret=$CLIENT_SECRET" --data "grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token
    
    

    잘하면 액세스 토큰을 얻을 수 있습니다.
    {
      "access_token": "access_tokenaccess_tokenaccess_tokenaccess_tokenaccess_tokenaccess_token",
      "expires_in": 3600,
      "scope": "https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/cloud-platform",
      "token_type": "Bearer"
    }%
    

    6. access_token을 header에 포함시켜 API 실행



    쉘 스크립트에서 수행하려는 처리 전에 API 키를 가져옵니다.
    json이므로 처리로 jq 명령을 사용하고 싶었지만 작업 서버에 들어 있지 않았기 때문에 awk를 사용하여 처리했습니다.

    gae_token.sh
    #!/bin/sh
    
    export CLIENT_ID="client_id.apps.googleusercontent.com"
    export CLIENT_SECRET="CLIENT_SECRET"
    export REFRESH_TOKEN="1/REFRESH_TOKEN"
    
    # APIキーの取得処理
    export API_KEY=`curl -X POST --data "refresh_token=$REFRESH_TOKEN" --data "client_id=$CLIENT_ID" --data "client_secret=$CLIENT_SECRET" --data "grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token 2> /dev/null | awk '/access_token/ {match($2, /"(.+)",/, token); print token[1]}'`
    
    # API叩く例
    export APPS_ID="test-porject"
    export SERVICES_ID="test"
    URL="https://appengine.googleapis.com/v1/apps/$APPS_ID/services/$SERVICES_ID/versions/"
    curl -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -X GET $URL
    
    

    참고



    Google API의 Access Token을 쉽게 얻을 수 있습니다 htps : // 코 m / 신 1 오가와 / ms / 49 076f62 5f17f18 5

    좋은 웹페이지 즐겨찾기