메뉴 건너뛰기

프로그래밍


Cognito 사용자 풀에 등록된 사용자가 AWS Lambda API를 호출 할 때 

Sign-in 을 통해 얻은 토큰으로 API를 호출 할 수 있도록 권한을 부여하는 방법과 API 호출 방법을 설명합니다.


0. API Gateway 에서 대상 API를 선택 한 후 -> 권한 부여자 -> 새로운 권한 생성을 클릭합니다.

1. 적당한 이름(여기서는 'CogAuth')을 입력하고 권한 부여자는 'Cognito'를 선택합니다.

2. 'Cognito 사용자 풀'에서 사용코자 하는 사용자 풀을 선택합니다.

3. '토큰 원본'에는 적당한 헤더 명을 입력합니다. 여기서는 'AuthTokenHeader' 라고 입력합니다.

4. '생성'을 클릭합니다.

5. API Gateway 에서 Lambda API가 연결된 메소드에 CORS 를 활성화 시킵니다.

6. 그리고 각 리소스의 메소드를 선택한 후 '메소드 요청'을 클릭합니다.

7. '승인'에서 연필아이콘을 클릭하여 'CogAuth'를 선택합니다.


상시 설정을 완료 하였다면, 아래의 코드를 실행해 봅니다.

import boto3
import json
from botocore.exceptions import ClientError
import httplib, urllib

host = 'blahblah123431244.execute-api.ap-region-2.amazonaws.com'
url = '/pr/test'

CLIENT_ID = "cognito_clientid"
 
#region을 지정하지 않으면 exception이 발생합니다
boto3.setup_default_session(region_name='ap-region-2')
client = boto3.client('cognito-idp', region_name='ap-region-2')


def callRestGet(tokenData):
    headers = {
    'User-Agent': 'python',
    'Content-Type': 'application/json',
    'AuthTokenHeader': tokenData
    }

    conn = httplib.HTTPSConnection(host)
    conn.request("GET", url, headers=headers)
    response = conn.getresponse()

    data = response.read()
    print(data)


def signin():
  try:
    response = cognito.initiate_auth(
      AuthFlow='USER_PASSWORD_AUTH',
      AuthParameters={ 'USERNAME': 'mytempid', 'PASSWORD': '1234567' },
      ClientMetadata={
                'testval': '1234',
                'testval2': '5678'
      },
      ClientId=CLIENT_ID)

    callRestGet(response['AuthenticationResult']['IdToken'])
    
  except ClientError as e:
      print "Unexpected error: %s" % e


즉, Sign-in 하여  'IdToken' 값을 얻은 후 API 호출시 헤더(AuthTokenHeader)값에 해당 토큰 값을 입력하고 호출 하는 예제입니다.



[참고] PYTHON에서 Cognito 에 Sign-up, Sign-in 하는 방법 

- http://airpage.org/xe/language_data/26810




번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [20] 파이팅건맨 2016.02.20 51414
공지 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 8120
공지 [TIP] php로 기상청에서 제공하는 기상정보 API 호출하기 파이팅건맨 2017.01.17 5132
167 [TIP] gcc 빌드중에 /usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in ... 와 같은 오류를 만났을 때 파이팅건맨 2019.11.25 9
166 [TIP] Windows UWP에서 시리얼 포트가 열리지 않을때 파이팅건맨 2019.11.08 133
165 [TIP] 화면 스크롤시 HTML Element가 화면의 중간에 위치하면 감지하기 파이팅건맨 2019.10.03 153
164 [TIP] Visual Studio 2019 에서 (배포용)설치파일 만들기 파이팅건맨 2019.09.30 302
163 [TIP] Android에서 MS의 Face Rest API사용하기 (How to use the MS Face API on Android) 파이팅건맨 2019.07.16 198
162 [TIP] Xcode에서 boost 사용하는 방법 파이팅건맨 2019.06.28 102
161 [TIP] 아두이노에서 두근두근 Open API 호출하기 파이팅건맨 2019.06.04 183
160 [TIP] AWS Lambda, API Gateway 를 이용하여 S3에 파일 업로드 하기 파이팅건맨 2018.06.12 792
» [TIP] 파이선에서 AWS Lambda API 호출시 Cognito 사용자 토큰으로 권한 확인하기 파이팅건맨 2018.06.11 475
158 [TIP] 파이선에서 AWS Cognito 에 Sign-up, Sign-in 하는 예제 파이팅건맨 2018.06.08 483
157 [TIP] Ajax에서 AWS Lambda Rest API CALL 하기 (How to call AWS Lambda API from Ajax) 파이팅건맨 2018.02.12 614
156 [TIP] 나만의 OpenAPI 배포 플랫폼 만들기 [6] 파이팅건맨 2018.01.30 794
155 [TIP] 파이선에서 AWS Lambda로 만든 Restful API 호출하기 (How to call AWS Lambda Restful API from Python) 파이팅건맨 2018.01.23 444
154 [TIP] 파이선에서 서브프로세스를 실행시키고 출력되는 내용을 얻어오기 파이팅건맨 2018.01.22 1681
153 [TIP] 아두이노에서 AWS Lambda로 제작한 Restful API 호출하기 (The way how to call AWS Lambda Restful API from Arduino) 파이팅건맨 2018.01.18 560
152 [TIP] 파이선에서 Redis 이벤트 받기 파이팅건맨 2017.10.12 597
151 [TIP] 파이선에서 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position ... 오류 해결 방법 파이팅건맨 2017.09.29 1382
150 [TIP] The function size must be used with a prefix when a default namespace is not specified 오류 해결하기 파이팅건맨 2017.08.02 1347
149 [TIP] 페이스북 개인 담벼락의 좋아요수 크롤링하기 파이팅건맨 2017.07.15 1086
148 [TIP] 자바스크립트와 PHP코드간에 암호화 통신하기 (Encrypt with Javascript, Decrypt with PHP) [2] 파이팅건맨 2017.03.16 2549
위로