권한 부여 엔드포인트
/oauth2/authorize
엔드포인트는 두 개의 리디렉션 대상을 지원하는 리디렉션 엔드포인트입니다. URL에 identity_provider
또는 idp_identifier
파라미터를 포함하면 사용자를 해당 ID 제공업체(IdP)의 로그인 페이지로 자동 리디렉션합니다. 그렇지 않으면 요청에 포함된 것과 동일한 URL 파라미터를 사용하여 Login 엔드포인트로 리디렉션됩니다.
권한 부여 엔드포인트는 호스팅 UI 또는 IdP 로그인 페이지로 리디렉션합니다. 이 엔드포인트에서 사용자 세션의 대상은 사용자가 브라우저에서 직접 상호 작용해야 하는 웹 페이지입니다.
권한 부여 엔드포인트를 사용하려면 사용자 풀에 다음 사용자 풀 세부 정보에 대한 정보를 제공하는 매개변수를 사용하여 /oauth2/authorize
에서 사용자 브라우저를 호출하세요.
-
로그인할 앱 클라이언트입니다.
-
최종 콜백 URL입니다.
-
사용자의 액세스 토큰에서 요청할 OAuth 2.0 범위입니다.
-
필요에 따라 로그인하는 데 사용할 서드 파티 IdP입니다.
Amazon Cognito가 수신 클레임을 검증하는 데 사용하는 state
및 nonce
파라미터를 제공할 수도 있습니다.
GET /oauth2/authorize
/oauth2/authorize
엔드포인트는 HTTPS
GET
만 지원합니다. 대체로 앱은 사용자의 브라우저에서 이 요청을 시작합니다. HTTPS를 통해서만 /oauth2/authorize
엔드포인트에 요청할 수 있습니다.
권한 부여 엔드포인트
요청 파라미터
- response_type
-
응답 유형이며
code
또는token
이어야 합니다.code
의response_type
이 있는 성공적인 요청은 권한 부여 코드 부여를 반환합니다. 권한 부여 코드 부여는 Amazon Cognito가 리디렉션 URL에 추가하는code
파라미터입니다. 앱에서는 액세스, ID 및 새로 고침 토큰을 위해 Token 엔드포인트와 코드를 교환할 수 있습니다. 보안 모범 사례로 사용자를 위한 새로 고침 토큰을 받으려면 앱에서 권한 부여 코드 부여를 사용하세요.token
의response_type
이 있는 성공적인 요청은 암시적 권한 부여를 반환합니다. 암시적 권한 부여는 Amazon Cognito가 리디렉션 URL에 추가하는 ID 및 액세스 토큰입니다. 암시적 권한 부여는 토큰과 잠재적인 식별 정보를 사용자에게 노출하기 때문에 덜 안전합니다. 앱 클라이언트 구성에서 암시적 권한 부여에 대한 지원을 비활성화할 수 있습니다.필수.
- client_id
-
클라이언트 ID입니다.
client_id
값은 요청한 사용자 풀에 있는 앱 클라이언트의 ID여야 합니다. 앱 클라이언트는 Amazon Cognito 로컬 사용자 또는 하나 이상의 서드 파티 IdP 로그인을 지원해야 합니다.필수.
- redirect_uri
-
Amazon Cognito가 사용자에게 권한을 부여한 후 인증 서버에서 브라우저를 리디렉션하는 URL입니다.
리디렉션 URI(Uniform Resource Identifier)의 속성은 다음과 같아야 합니다.
-
절대 URI이어야 합니다.
-
클라이언트를 사용하여 URI를 미리 등록했어야 합니다.
-
여기에는 조각 구성 요소가 없어야 합니다.
OAuth 2.0 - Redirection Endpoint
섹션을 참조하세요. Amazon Cognito를 사용하려면 리디렉션 URI에서 테스트 목적으로 콜백 URL로 설정할 수 있는 HTTPS를 사용해야 합니다(
http://localhost
제외).또한 Amazon Cognito는
myapp://example
과 같은 앱 콜백 URL을 지원합니다.필수.
-
- state
-
앱이 요청에 state 파라미터를 추가하면
/oauth2/authorize
엔드포인트가 사용자를 리디렉션할 때 Amazon Cognito가 해당 값을 앱으로 반환합니다.이 값을 요청에 추가하여 CSRF
공격으로부터 보호할 수 있습니다. state
파라미터의 값을 URL 인코딩 JSON 문자열로 설정할 수 없습니다.state
파라미터에서 이 형식과 일치하는 문자열을 전달하려면 문자열을 Base64로 인코딩한 다음 앱에서 디코딩하면 됩니다.선택 사항이지만 권장됩니다.
- identity_provider
-
호스팅 UI를 무시하고 사용자를 공급자 로그인 페이지로 리디렉션하려면 이 파라미터를 추가합니다. identity_provider 파라미터의 값은 사용자 프로필에 나타나는 대로 자격 증명 공급자(IdP)의 이름입니다.
-
소셜 공급자의 경우 identity_provider 값인 Facebook, Google, LoginWithAmazon 및 SignInWithApple을 사용할 수 있습니다.
-
Amazon Cognito 사용자 풀의 경우 COGNITO 값을 사용합니다.
-
SAML 2.0 및 OpenID Connect(OIDC) 아이덴티티 제공업체(IdP)의 경우 사용자 풀의 IdP에 할당한 이름을 사용합니다.
선택 사항.
-
- idp_identifier
-
identity_provider 이름에 대한 대체 이름을 가진 공급자로 리디렉션할 이 파라미터를 추가합니다. Amazon Cognito 콘솔의 로그인 환경(Sign-in experience) 탭에서 SAML 2.0 및 OIDC IdP에 대한 식별자를 입력할 수 있습니다.
선택 사항.
- scope
-
시스템에 예약된 범위나 클라이언트와 연결된 사용자 지정 범위를 조합하여 사용할 수 있습니다. 범위는 공백으로 구분해야 합니다. 시스템에 예약된 범위로는
openid
,email
,phone
,profile
및aws.cognito.signin.user.admin
이 있습니다. 사용된 범위는 클라이언트와 연결되어 있어야 합니다. 그렇지 않으면 런타임 시 무시됩니다.클라이언트가 범위를 요청하지 않은 경우 인증 서버에서는 클라이언트와 연결된 모든 범위를 사용합니다.
openid
범위가 요청될 경우에만 ID 토큰이 반환됩니다.aws.cognito.signin.user.admin
범위가 요청된 경우에만 Amazon Cognito 사용자 풀에 대해 액세스 토큰을 사용할 수 있습니다.phone
범위도 요청된 경우에만email
,profile
및openid
범위를 요청할 수 있습니다. 이러한 범위는 ID 토큰 내부로 들어가는 클레임을 지정합니다.선택 사항.
- code_challenge_method
-
문제를 생성하는 데 사용된 메서드입니다. PKCE RFC
는 S256 및 일반의 두 가지 메서드를 정의하지만 Amazon Cognito 인증 서버는 S256만 지원합니다. 선택 사항.
- code_challenge
-
code_verifier
에서 생성된 문제입니다.code_challenge_method
파라미터를 지정하는 경우에만 필수입니다. - 논스
-
요청에 추가할 수 있는 임의 값입니다. 제공한 임시 값은 Amazon Cognito가 발행하는 ID 토큰에 포함되어 있습니다. 재생 공격을 방지하기 위해 앱은 ID 토큰의
nonce
클레임을 검사하고 생성한 것과 비교할 수 있습니다.nonce
클레임에 대한 자세한 내용은 OpenID Connect 표준의 ID 토큰 유효성 검사를 참조하세요.
긍정 응답이 있는 요청 예제
인증 코드 권한 부여
예제 요청
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=openid+profile+aws.cognito.signin.user.admin
샘플 응답
Amazon Cognito 인증 서버는 권한 부여 코드 및 상태를 통해 앱으로 다시 리디렉션합니다. 조각이 아닌 쿼리 문자열 파라미터에 코드 및 상태가 반환되어야 합니다. 쿼리 문자열은 '?' 문자 다음에 나오는 웹 요청의 일부이며 이 문자열은 '&' 문자로 구분된 하나 이상의 파라미터를 포함할 수 있습니다. 조각은 '#' 문자 다음에 나오는 웹 요청의 일부이며 문서의 하위 섹션을 지정합니다.
참고
응답은 5분 동안 유효한 일회용 코드를 반환합니다.
HTTP/1.1 302 Found
Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE
PKCE를 통한 인증 코드 권한 부여
샘플 요청
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin& code_challenge_method=S256& code_challenge=CODE_CHALLENGE
샘플 응답
인증 서버는 권한 부여 코드 및 상태를 통해 앱으로 다시 리디렉션합니다. 조각이 아닌 쿼리 문자열 파라미터에 코드 및 상태가 반환되어야 합니다.
HTTP/1.1 302 Found
Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE
openid
범위가 없는 토큰 부여
샘플 요청
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin
샘플 응답
Amazon Cognito 권한 부여 서버는 액세스 토큰을 통해 앱으로 다시 리디렉션합니다. openid
범위가 요청되지 않았기 때문에 Amazon Cognito에서 ID 토큰을 반환하지 않습니다. 또한 Amazon Cognito는 이 흐름에서 새로 고침 토큰을 반환하지 않습니다. Amazon Cognito는 액세스 토큰과 상태를 쿼리 문자열이 아닌 조각으로 반환합니다.
HTTP/1.1 302 Found
Location: https://YOUR_APP/redirect_uri#access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE
openid
범위가 있는 토큰 부여
샘플 요청
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin+openid+profile
샘플 응답
권한 부여 서버는 액세스 토큰 및 ID 토큰을 통해 앱으로 다시 리디렉션합니다(openid
범위가 포함되어 있기 때문).
HTTP/1.1 302 Found
Location: https://YOUR_APP/redirect_uri#id_token=ID_TOKEN&access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE
부정 응답 예제
다음은 부정 응답의 예입니다.
-
client_id
및redirect_uri
는 유효하지만 요청 파라미터의 형식이 올바르게 지정되지 않은 경우 인증 서버가 오류를 클라이언트의redirect_uri
로 리디렉션하고 URL 파라미터에 오류 메시지를 추가합니다. 잘못된 형식 지정의 예로는 응답에서code_challenge_method
가 아닌code_challenge
를 제공하거나 해당code_challenge_method
가 'S256'이 아닐 때 요청에response_type
파라미터가 포함되지 않은 경우가 있습니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request
-
클라이언트가
response_type
에서code
또는token
을 요청했는데 이러한 요청에 대한 권한이 없는 경우 Amazon Cognito 권한 부여 서버에서 다음과 같이unauthorized_client
를 클라이언트의redirect_uri
에 반환합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client
-
클라이언트가 알 수 없거나, 형식이 잘못되었거나, 유효하지 않은 범위를 요청한 경우 Amazon Cognito 권한 부여 서버에서 다음과 같이
invalid_scope
를 클라이언트의redirect_uri
에 반환합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope
-
서버에 예상치 못한 오류가 있는 경우 인증 서버는 클라이언트의
redirect_uri
에server_error
를 반환합니다. HTTP 500 오류는 클라이언트에 전송되지 않으므로 이 오류를 사용자의 브라우저에 표시하지 않습니다. 다음 오류가 반환되어야 합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error
-
Amazon Cognito가 서드 파티 IdP로의 페더레이션을 통해 인증할 때 Amazon Cognito에서 다음과 같은 연결 문제가 발생할 수 있습니다.
-
IdP에게 토큰을 요청하는 동안 연결 제한 시간이 발생하면 인증 서버가 다음과 같이 오류를 클라이언트의
redirect_uri
로 리디렉션합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint
-
id_token
검증을 위해jwks
엔드포인트를 호출하는 동안 연결 제한 시간이 발생하면 인증 서버가 다음과 같이 오류를 클라이언트의redirect_uri
로 리디렉션합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
-
-
서드 파티 IdP로 페더레이션하여 인증할 때 구성 오류 또는 다음과 같은 문제로 인해 공급자가 오류 응답을 반환할 수 있습니다.
-
다른 공급자로부터 오류 응답이 수신되면 인증 서버가 다음과 같이 오류를 클라이언트의
redirect_uri
로 리디렉션합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token
-
Google로부터 오류 응답이 수신되면 인증 서버가 다음과 같이 오류를 클라이언트의
redirect_uri
로 리디렉션합니다.HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google provided error code]
-
-
Amazon Cognito가 외부 IdP에 연결하는 동안 통신 프로토콜에서 예외가 발생하는 경우 인증 서버가 다음 메시지 중 하나와 함께 오류를 클라이언트의
redirect_uri
로 리디렉션합니다.-
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset
-
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out
-