내용으로 건너뛰기

Amazon Cognito 사용자 풀을 설정한 후 API Gateway REST API 엔드포인트에서 "401 Unauthorized" 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

Amazon API Gateway REST API에서 Amazon Cognito 사용자 풀을 COGNITO_USER_POOLS 권한 부여자로 설정했습니다. API 응답에서 ‘401 Unauthorized’ 오류가 발생합니다.

해결 방법

참고: API Gateway는 다양한 이유로 401 Unauthorized 오류를 반환할 수 있습니다. 다음 절차는 COGNITO_USER_POOLS 권한 부여자와 관련된 401 오류만 해결하는 방법을 보여줍니다.

API 메서드에서 권한 부여자의 구성 확인

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.
  2. 탐색 창에서 API를 선택한 다음, 해당 API를 선택합니다.
  3. 탐색 창의 API에서 권한 부여자를 선택합니다.
  4. 권한 부여자의 구성을 검토하고 다음 사항에 해당하는지 확인합니다.
    사용자 풀 ID가 토큰 발급자와 일치합니다.
    API를 배포했습니다.
    권한 부여자가 ID 토큰의 테스트 모드에서 작동합니다.
    참고: 이 기능을 사용하여 액세스 토큰을 테스트할 수는 없습니다.

자세한 내용은 REST API와 Amazon Cognito 사용자 풀 통합을 참조하십시오.

참고: 권한 부여자의 구성을 확인한 후 API를 호출할 수 없는 경우 보안 토큰의 유효성을 확인하십시오.

보안 토큰의 유효성 확인

보안 토큰의 유효성을 확인하려면 다음 사항에 해당하는지 확인합니다.

  • 보안 토큰이 만료되지 않았습니다.
  • 보안 토큰의 발급자가 API에 구성된 Amazon Cognito 사용자 풀과 일치합니다.
  • ID 토큰액세스 토큰 문자열 값이 유효합니다.
    참고: 문자열 값이 유효하면 토큰을 디코딩할 수 있습니다. 토큰이 유효하지 않은 경우 토큰을 검토하십시오. 토큰에 요청 헤더를 통과할 수 있는 추가 공백이 없는지 확인하십시오.

중요: API Gateway 메서드에서 범위를 구성하지 않은 경우 유효한 ID 토큰을 사용해야 합니다. API Gateway 메서드에서 추가 범위를 구성하는 경우 유효한 액세스 토큰을 사용해야 합니다. 자세한 내용은 Amazon Cognito에서 사용자 지정 범위를 사용하여 API Gateway API에 대한 액세스 권한을 부여하려면 어떻게 해야 합니까?를 참조하십시오.

보안 토큰 페이로드 예시:

Id token payload: {
 "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
 "aud": "xxxxxxxxxxxxexample",
 "email_verified": true,
 "token_use": "id",
 "auth_time": 1500009400,
 "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
 "cognito:username": "janedoe",
 "exp": 1500013000,
 "given_name": "Jane",
 "iat": 1500009400,
 "email": "janedoe@example.com"
 }
Access token payload:
{
    "auth_time": 1500009400,
    "exp": 1500013000,
    "iat": 1500009400,
    "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
    "scope": "aws.cognito.signin.user.admin",
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "token_use": "access",
    "username": "janedoe@example.com"
}

예제 보안 토큰 페이로드에서 다음 클레임 이름을 확인하십시오.

  • token_use는 토큰 유형(ID 또는 액세스 토큰)을 나타냅니다.
  • exp는 토큰의 만료 시간을 나타냅니다.
    참고: exp 클레임은 Unix 에포크(1970-01-01T0:0:0Z) 이후 협정 세계시(UTC) 기준으로 토큰이 만료되는 날짜 및 시간까지의 초 단위로 표시됩니다.
  • auth_time은 토큰이 발급된 시기를 나타냅니다.
  • iss는 토큰을 발급한 사용자 풀의 도메인을 나타냅니다.

중요: 사용하는 토큰은 API Gateway 메서드에서 구성하는 사용자 풀과 일치해야 합니다. API를 호출할 수 없는 경우 인증 헤더를 올바르게 사용했는지 확인하십시오. 401 오류가 발생하면 리소스 정책이 요청을 차단하지 않는지 확인하십시오.

Postman을 사용하여 API를 호출하는 경우

Amazon Cognito 토큰을 직접 사용하려면 OAuth 2.0 권한 부여 모드를 사용하십시오. 자세한 내용은 Postman 웹 사이트의 Postman에서 API 인증 및 권한 부여를 참조하십시오.

OAuth 2.0 권한 부여 모드를 설정할 때 다음 사항에 해당하는지 확인하십시오.

  • 권한 부여 유형 옵션이 권한 부여 코드 또는 암시적 권한 부여로 설정되어 있습니다.
  • 콜백 URL이 사용자 풀의 앱 클라이언트에 구성된 리디렉션 URL과 일치합니다.
  • 인증 URL의 형식이 https://mydomain.auth.us-east-1.amazoncognito.com/login입니다.
    참고: mydomain을 사용자 풀을 구성하는 데 사용하는 도메인 이름으로 바꾸십시오. API를 호스팅하는 AWS 리전을 올바르게 입력했는지 확인하십시오.
  • 클라이언트 ID는 사용자 풀의 앱 클라이언트 ID입니다.
    참고: 클라이언트 보안 암호를 사용자 풀의 앱 클라이언트와 연결하는 경우 권한 부여 탭에서 보안 암호를 지정합니다. 사용자 풀의 앱 클라이언트와 연결된 클라이언트 보안 암호가 없는 경우 클라이언트 보안 암호 필드를 비워 두십시오.
  • 범위Openid로 구성됩니다.
    참고: 사용자 풀의 앱 클라이언트에서 Openid 범위를 허용해야 합니다.
  • 권한 부여 코드 흐름에 올바른 Amazon Cognito 사용자 풀 토큰 엔드포인트를 입력합니다.
    Amazon Cognito 사용자 풀 토큰 엔드포인트의 예:
    https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token

참고: 토큰 엔드포인트가 콘텐츠 유형을 지원하지 않는 경우 Postman에서 필수 콘텐츠를 전달할 수 없어 405 오류가 발생합니다. 이 문제를 방지하려면 암시적 흐름을 사용하십시오. 자세한 내용은 OAuth 2.0 권한 부여를 참조하십시오.

관련 정보

Amazon Cognito 페더레이션 ID, Amazon Cognito 사용자 풀 및 API Gateway를 통한 안전한 API 액세스

Amazon Cognito JSON 웹 토큰의 서명을 디코딩하고 확인하려면 어떻게 해야 합니까?

Amazon Cognito 사용자 풀을 권한 부여자로 사용하여 REST API에 대한 액세스 제어