Application Load Balancer를 사용하여 사용자 인증 - Elastic Load Balancing

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Application Load Balancer를 사용하여 사용자 인증

애플리케이션에 액세스하는 사용자를 안전하게 인증하도록 Application Load Balancer를 구성할 수 있습니다. 이렇게 하면 애플리케이션이 비즈니스 로직에 집중할 수 있도록 사용자 인증 작업을 로드 밸런서로 오프로드할 수 있습니다.

지원되는 사용 사례는 다음과 같습니다.

  • OpenID Connect(OIDC) 호환 자격 증명 공급자(IdP)를 통해 사용자를 인증합니다.

  • Amazon Cognito에서 지원하는 사용자 풀을 통해 Amazon 또는 Google과 같은 소셜 미디어를 IdPs 통해 사용자를 인증합니다. FaceBook

  • Amazon Cognito에서 지원되는 사용자 풀을 통해 SAML, OpenID Connect(OIDC) 또는 OAuth를 사용하는 기업 자격 증명을 통해 사용자를 인증합니다.

OIDC 호환 IdP 사용 준비

Application Load Balancer에서 OIDC 호환 IdP를 사용하는 경우 다음을 수행합니다.

  • IdP에서 새 OIDC 앱을 생성합니다. IdP의 DNS는 공개적으로 확인할 수 있어야 합니다.

  • 클라이언트 ID와 클라이언트 암호를 구성해야 합니다.

  • IdP가 게시하는 권한 부여, 토큰 및 사용자 정보와 같은 엔드포인트를 가져옵니다. 구성에서 이 정보를 찾을 수 있습니다.

  • IdP 엔드포인트 인증서는 신뢰할 수 있는 공개 인증 기관에서 발급해야 합니다.

  • 엔드포인트의 DNS 항목은 프라이빗 IP 주소로 확인되더라도 공개적으로 확인할 수 있어야 합니다.

  • IdP 앱에서 리디렉션 URL 중 하나를 사용자가 사용하도록 허용합니다. 여기서 DNS는 로드 밸런서의 도메인 이름이고 CNAME은 애플리케이션의 DNS 별칭입니다.

    • https://DNS/oauth2/idpresponse

    • https://CNAME/oauth2/idpresponse

Amazon Cognito 사용 준비

애플리케이션 로드 밸런서를 위한 Amazon Cognito 통합은 다음 지역에서 사용할 수 있습니다.

  • 미국 동부(버지니아 북부)

  • 미국 동부(오하이오)

  • 미국 서부(캘리포니아 북부)

  • 미국 서부(오레곤)

  • 캐나다(중부)

  • 유럽(스톡홀름)

  • 유럽(밀라노)

  • 유럽(프랑크푸르트)

  • 유럽(취리히)

  • 유럽(아일랜드)

  • 유럽(런던)

  • 유럽(파리)

  • 남아메리카(상파울루)

  • 아시아 태평양(도쿄)

  • 아시아 태평양(서울)

  • 아시아 태평양(오사카)

  • 아시아 태평양(뭄바이)

  • 아시아 태평양(싱가포르)

  • 아시아 태평양(시드니)

  • 아시아 태평양(자카르타)

  • 중동(UAE)

  • 중동(바레인)

  • 아프리카(케이프타운)

  • 이스라엘(텔아비브)

Application Load Balancer에서 Amazon Cognito 사용자 풀을 사용하는 경우 다음을 수행합니다.

  • 사용자 풀을 생성합니다. 자세한 내용은 Amazon Cognito 개발자 안내서Amazon Cognito 사용자 풀을 참조하세요.

  • 사용자 풀 클라이언트를 생성합니다. 클라이언트가 클라이언트 암호를 생성하고, 코드 부여 흐름을 사용하며, 로드 밸런서가 사용하는 것과 동일한 OAuth 범위를 지원하도록 클라이언트를 구성해야 합니다. 자세한 내용은 Amazon Cognito 개발자 안내서사용자 풀 앱 클라이언트 구성을 참조하세요.

  • 사용자 풀 도메인을 생성합니다. 자세한 내용은 Amazon Cognito 개발자 안내서사용자 풀의 도메인 이름 추가를 참조하세요.

  • 요청된 범위가 ID 토큰을 반환하는지 확인하세요. 예를 들어, 기본값 범위 openid는 ID 토큰을 반환하지만 aws.cognito.signin.user.admin 범위는 그렇지 않습니다.

    참고: 애플리케이션 로드 밸런서는 Amazon Cognito에서 발급한 사용자 지정 액세스 토큰을 지원하지 않습니다. 자세한 내용은 Amazon Cognito 개발자 안내서의 사전 토큰 생성을 참조하십시오.

  • 소셜 또는 기업 IdP와 연동하려면 연동 섹션에서 IdP를 활성화합니다. 자세한 내용은 Amazon Cognito 개발자 안내서사용자 풀에 소셜 로그인 추가 또는 사용자 풀에 SAML IdP 로그인 추가를 참조하세요.

  • Amazon Cognito의 콜백 URL 필드에서 다음 리디렉션 URL을 허용합니다. 여기서 DNS는 로드 밸런서의 도메인 이름이고 CNAME은 애플리케이션의 DNS 별칭입니다(사용하는 경우).

    • https://DNS/oauth2/idpresponse

    • https://CNAME/oauth2/idpresponse

  • IdP 앱의 콜백 URL에 있는 사용자 풀 도메인을 허용합니다. IdP의 형식을 사용합니다. 다음 예를 참조하세요.

    • https://domain-prefix.auth.region.amazoncognito.com/saml2/idpresponse

    • https://user-pool-domain/oauth2/idpresponse

앱 클라이언트 설정의 콜백 URL은 모두 소문자를 사용해야 합니다.

사용자가 Amazon Cognito를 사용하여 사용자를 인증하도록 로드 밸런서를 구성할 수 있도록 하려면 cognito-idp:DescribeUserPoolClient 작업을 호출할 수 있는 권한을 사용자에게 부여해야 합니다.

아마존 사용 준비 CloudFront

Application Load Balancer 앞에서 CloudFront 배포를 사용하는 경우 다음 설정을 활성화하십시오.

  • 요청 헤더 전달 (모두) - 인증된 요청에 대한 응답을 CloudFront 캐시하지 않도록 합니다. 이렇게 하면 인증 세션이 만료된 후 응답이 캐시에서 제공되지 않습니다. 또는 캐싱이 활성화된 상태에서 이러한 위험을 줄이기 위해 CloudFront 배포 소유자가 인증 쿠키가 만료되기 전에 time-to-live (TTL) 값이 만료되도록 설정할 수 있습니다.

  • 쿼리 문자열 전달 및 캐싱(모두) - 로드 밸런서가 IdP로 사용자를 인증하는 데 필요한 쿼리 문자열 파라미터에 액세스할 수 있도록 합니다.

  • 쿠키 전달 (전체) - 모든 인증 쿠키를 로드 CloudFront 밸런서에 전달하도록 합니다.

사용자 인증 구성

하나 이상의 리스너 규칙에 대한 인증 작업을 생성하여 사용자 인증을 구성합니다. authenticate-cognitoauthenticate-oidc 작업 유형은 HTTPS 리스너에서만 지원됩니다. 해당 필드에 대한 설명은 Elastic Load Balancing API 레퍼런스 버전 2015-12-01을 참조하십시오 AuthenticateCognitoActionConfig. AuthenticateOidcActionConfig

로드 밸런서는 인증 상태를 유지하기 위해 클라이언트에 세션 쿠키를 보냅니다. 사용자 인증에는 HTTPS 리스너가 필요하므로 이 쿠키에는 항상 secure 속성이 포함됩니다. 이 쿠키에는 CORS(Cross-Origin Resource Sharing) 요청이 있는 SameSite=None 속성이 포함됩니다.

독립적인 클라이언트 인증이 필요한 여러 애플리케이션을 지원하는 로드 밸런서의 경우 인증 작업이 있는 각 리스너 규칙에는 고유한 쿠키 이름이 있어야 합니다. 이를 통해 클라이언트는 규칙에 지정된 대상 그룹으로 라우팅되기 전에 항상 IdP로 인증됩니다.

Application Load Balancer는 URL로 인코딩된 쿠키 값을 지원하지 않습니다.

기본적으로 SessionTimeout 필드는 7일로 설정됩니다. 더 짧은 세션이 필요한 경우 세션 제한 시간을 1초까지 짧게 구성할 수 있습니다. 자세한 내용은 세션 제한 시간 단원을 참조하세요.

애플리케이션에 적절하게 OnUnauthenticatedRequest 필드를 구성합니다. 다음 예를 참조하세요.

  • 사용자가 소셜 또는 기업 자격 증명을 사용하여 로그인해야 하는 애플리케이션 - 이 작업은 기본 옵션인 authenticate에서 지원됩니다. 사용자가 로그인하지 않은 경우 로드 밸런서는 요청을 IdP 권한 부여 엔드포인트로 리디렉션하고 IdP는 사용자에게 사용자 인터페이스를 사용하여 로그인하라고 알립니다.

  • 로그인한 사용자에게 개인 설정된 보기를 제공하거나 로그인하지 않은 사용자에게 일반 보기를 제공하는 애플리케이션 - 이 유형의 애플리케이션을 지원하려면 allow 옵션을 사용합니다. 사용자가 로그인한 경우 로드 밸런서는 사용자 클레임을 제공하며 애플리케이션은 개인 설정된 보기를 제공할 수 있습니다. 사용자가 로그인하지 않은 경우 로드 밸런서는 사용자 클레임 없이 요청을 전달하며 애플리케이션은 일반 보기를 제공할 수 있습니다.

  • 몇 초마다 JavaScript 로드되는 단일 페이지 애플리케이션 - 이 deny 옵션을 사용하면 로드 밸런서가 인증 정보가 없는 AJAX 호출에 HTTP 401 Unauthorted 오류를 반환합니다. 그러나 사용자가 인증 정보를 만료한 경우 클라이언트를 IdP 권한 부여 엔드포인트로 리디렉션합니다.

로드 밸런서는 IdP 토큰 엔드포인트(TokenEndpoint) 및 IdP 사용자 정보 엔드포인트(UserInfoEndpoint)와 통신할 수 있어야 합니다. 애플리케이션 로드 밸런서는 이러한 엔드포인트와 통신할 때만 IPv4를 지원합니다. IdP가 퍼블릭 주소를 사용하는 경우 로드 밸런서의 보안 그룹과 VPC의 네트워크 ACL이 엔드포인트에 대한 액세스를 허용하는지 확인하세요. 내부 로드 밸런서 또는 IP 주소 유형을 dualstack-without-public-ipv4 사용하는 경우 NAT 게이트웨이를 통해 로드 밸런서가 엔드포인트와 통신할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서NAT 게이트웨이 기본 사항 단원을 참조하세요.

다음 create-rule 명령을 사용하여 사용자 인증을 구성합니다.

aws elbv2 create-rule --listener-arn listener-arn --priority 10 \ --conditions Field=path-pattern,Values="/login" --actions file://actions.json

다음은 authenticate-oidc 작업 및 forward 작업을 지정하는 actions.json 파일의 예제입니다. AuthenticationRequestExtraParams는 인증 동안 IdP에 추가 파라미터를 전달할 수 있도록 허용합니다. 지원되는 필드인지 확인하려면 자격 증명 공급자가 제공하는 설명서를 참조하세요.

[{ "Type": "authenticate-oidc", "AuthenticateOidcConfig": { "Issuer": "https://idp-issuer.com", "AuthorizationEndpoint": "https://authorization-endpoint.com", "TokenEndpoint": "https://token-endpoint.com", "UserInfoEndpoint": "https://user-info-endpoint.com", "ClientId": "abcdefghijklmnopqrstuvwxyz123456789", "ClientSecret": "123456789012345678901234567890", "SessionCookieName": "my-cookie", "SessionTimeout": 3600, "Scope": "email", "AuthenticationRequestExtraParams": { "display": "page", "prompt": "login" }, "OnUnauthenticatedRequest": "deny" }, "Order": 1 }, { "Type": "forward", "TargetGroupArn": "arn:aws:elasticloadbalancing:region-code:account-id:targetgroup/target-group-name/target-group-id", "Order": 2 }]

다음은 actions.json 작업 및 authenticate-cognito 작업을 지정하는 forward 파일의 예입니다.

[{ "Type": "authenticate-cognito", "AuthenticateCognitoConfig": { "UserPoolArn": "arn:aws:cognito-idp:region-code:account-id:userpool/user-pool-id", "UserPoolClientId": "abcdefghijklmnopqrstuvwxyz123456789", "UserPoolDomain": "userPoolDomain1", "SessionCookieName": "my-cookie", "SessionTimeout": 3600, "Scope": "email", "AuthenticationRequestExtraParams": { "display": "page", "prompt": "login" }, "OnUnauthenticatedRequest": "deny" }, "Order": 1 }, { "Type": "forward", "TargetGroupArn": "arn:aws:elasticloadbalancing:region-code:account-id:targetgroup/target-group-name/target-group-id", "Order": 2 }]

자세한 내용은 리스너 규칙 단원을 참조하세요.

인증 흐름

다음 네트워크 다이어그램은 Application Load Balancer가 OIDC를 사용하여 사용자를 인증하는 방법을 시각적으로 보여 줍니다.

OIDC를 통해 Application Load Balancer 가 사용자를 인증하는 방법

아래의 번호가 매겨진 항목은 위의 네트워크 다이어그램에 표시된 요소를 강조 표시하고 설명합니다.

  1. 사용자는 Application Load Balancer 뒤에 호스팅되는 웹 사이트에 HTTPS 요청을 보냅니다. 인증 작업이 포함된 규칙에 대한 조건이 충족되면 로드 밸런서는 요청 헤더에서 인증 세션 쿠키를 확인합니다.

  2. 쿠키가 없는 경우 로드 밸런서는 IdP가 사용자를 인증할 수 있도록 사용자를 IdP 권한 부여 엔드포인트로 리디렉션합니다.

  3. 사용자가 인증된 후 IdP는 권한 부여 코드를 사용하여 사용자를 로드 밸런서로 다시 전송합니다.

  4. 로드 밸런서는 IdP 토큰 엔드포인트에 권한 부여 코드를 제공합니다.

  5. 유효한 권한 부여 코드를 받으면 IdP가 Application Load Balancer에 ID 토큰 및 액세스 토큰을 제공합니다.

  6. 그런 다음 Application Load Balancer가 액세스 토큰을 사용자 정보 엔드포인트로 전송합니다.

  7. 사용자 정보 엔드포인트는 사용자 클레임을 액세스 토큰으로 교환합니다.

  8. Application Load Balancer는 AWSELB 인증 세션 쿠키를 사용하는 사용자를 원래 URI로 리디렉션합니다. 대부분의 브라우저는 쿠키 크기를 4K로 제한하기 때문에 로드 밸런서는 크기가 4K를 초과하는 쿠키를 여러 쿠키로 샤드합니다. IdP에서 수신한 사용자 클레임과 액세스 토큰의 총 크기가 11K 바이트를 초과하면 로드 밸런서는 클라이언트에게 HTTP 500 오류를 반환하고 ELBAuthUserClaimsSizeExceeded 지표를 증가시킵니다.

  9. Application Load Balancer가 쿠키를 검증하고 사용자 정보를 X-AMZN-OIDC-* HTTP 헤더 세트의 대상으로 전송합니다. 자세한 정보는 사용자 클레임 인코딩 및 서명 확인을 참조하세요.

  10. 대상은 Application Load Balancer에 응답을 전송합니다.

  11. Application Load Balancer가 최종 응답을 사용자에게 전송합니다.

모든 새 요청은 1~11단계를 거치며 후속 요청은 9~11단계를 거칩니다. 즉, 모든 후속 요청은 쿠키가 만료되지 않은 한 9단계에서 시작됩니다.

AWSALBAuthNonce 쿠키는 사용자가 IdP에서 인증한 후 요청 헤더에 추가됩니다. Application Load Balancer가 IdP에서 리디렉션 요청을 처리하는 방식은 변경되지 않습니다.

IdP가 ID 토큰에서 유효한 새로 고침 토큰을 제공하는 경우 로드 밸런서는 새로 고침 토큰을 저장하고 세션 제한 시간이 초과되거나 IdP 새로 고침이 실패할 때까지 액세스 토큰이 만료될 때마다 이 토큰을 사용하여 사용자 클레임을 새로 고칩니다. 사용자가 로그아웃하면 새로 고침이 실패하고 로드 밸런서는 사용자를 IdP 권한 부여 엔드포인트로 리디렉션합니다. 이렇게 하면 사용자가 로그아웃한 후 로드 밸런서가 세션을 중단할 수 있습니다. 자세한 정보는 세션 제한 시간을 참조하세요.

참고

쿠키 만료는 인증 세션 만료와 다릅니다. 쿠키 만료는 쿠키의 속성이며 7일로 설정됩니다. 인증 세션의 실제 길이는 인증 기능의 Application Load Balancer에서 구성된 세션 제한 시간에 따라 결정됩니다. 이 세션 제한 시간은 마찬가지로 암호화한 인증 쿠키 값에 포함됩니다.

사용자 클레임 인코딩 및 서명 확인

로드 밸런서는 사용자를 성공적으로 인증한 후 IdP에서 수신된 사용자 클레임을 대상에 전송합니다. 로드 밸런서는 애플리케이션이 서명을 확인하고 클레임이 로드 밸런서에서 전송되었음을 확인할 수 있도록 사용자 클레임에 서명합니다.

로드 밸런서는 다음 HTTP 헤더를 추가합니다.

x-amzn-oidc-accesstoken

토큰 엔드포인트의 액세스 토큰, 일반 텍스트.

x-amzn-oidc-identity

사용자 정보 엔드포인트의 제목 필드(sub), 일반 텍스트.

참고: 하위 클레임은 특정 사용자를 식별하는 가장 좋은 방법입니다.

x-amzn-oidc-data

사용자 클레임, JSON 웹 토큰(JWT) 형식.

액세스 토큰 및 사용자 클레임은 ID 토큰과 다릅니다. 액세스 토큰 및 사용자 클레임은 서버 리소스에 대한 액세스만 허용하지만, ID 토큰은 사용자를 인증하기 위한 추가 정보를 전달합니다. Application Load Balancer는 사용자를 인증할 때 새 액세스 토큰을 생성하고 액세스 토큰과 클레임만 백엔드에 전달하지만 ID 토큰 정보는 전달하지 않습니다.

이러한 토큰은 JWT 형식을 따르지만 ID 토큰이 아닙니다. JWT 형식에는 base64 URL 방식으로 인코딩된 헤더, 페이로드 및 서명이 포함되고 끝에 패딩 문자가 포함됩니다. Application Load Balancer는 ES256(P-256 및 SHA256을 사용하는 ECDSA)를 사용하여 JWT 서명을 생성합니다.

JWT 헤더는 다음 필드가 있는 JSON 객체입니다.

{ "alg": "algorithm", "kid": "12345678-1234-1234-1234-123456789012", "signer": "arn:aws:elasticloadbalancing:region-code:account-id:loadbalancer/app/load-balancer-name/load-balancer-id", "iss": "url", "client": "client-id", "exp": "expiration" }

JWT 페이로드는 IdP 사용자 정보 엔드포인트에서 수신된 사용자 클레임이 포함되는 JSON 객체입니다.

{ "sub": "1234567890", "name": "name", "email": "alias@example.com", ... }

로드 밸런서는 사용자 클레임을 암호화하지 않기 때문에 HTTPS를 사용하도록 대상 그룹을 구성하는 것이 좋습니다. HTTP를 사용하도록 대상 그룹을 구성하는 경우 반드시 보안 그룹을 사용하여 트래픽을 로드 밸런서로 리디렉션해야 합니다.

보안을 위해 클레임을 기반으로 권한 부여를 수행하기 전에 서명을 확인하고 JWT 헤더의 signer 필드에 예상 Application Load Balancer ARN이 포함되어 있는지 확인해야 합니다.

퍼블릭 키를 가져오려면 JWT 헤더에서 키 ID를 가져오고 이 정보를 사용하여 엔드포인트에서 퍼블릭 키를 조회합니다. 각 AWS 리전에 대한 엔드포인트는 다음과 같습니다.

https://public-keys.auth.elb.region.amazonaws.com/key-id

의 AWS GovCloud (US)경우 엔드포인트는 다음과 같습니다.

https://s3-us-gov-west-1.amazonaws.com/aws-elb-public-keys-prod-us-gov-west-1/key-id https://s3-us-gov-east-1.amazonaws.com/aws-elb-public-keys-prod-us-gov-east-1/key-id

다음 예에서는 Python 3.x로 퍼블릭 키를 가져오는 방법을 보여줍니다.

import jwt import requests import base64 import json # Step 1: Validate the signer expected_alb_arn = 'arn:aws:elasticloadbalancing:region-code:account-id:loadbalancer/app/load-balancer-name/load-balancer-id' encoded_jwt = headers.dict['x-amzn-oidc-data'] jwt_headers = encoded_jwt.split('.')[0] decoded_jwt_headers = base64.b64decode(jwt_headers) decoded_jwt_headers = decoded_jwt_headers.decode("utf-8") decoded_json = json.loads(decoded_jwt_headers) received_alb_arn = decoded_json['signer'] assert expected_alb_arn == received_alb_arn, "Invalid Signer" # Step 2: Get the key id from JWT headers (the kid field) kid = decoded_json['kid'] # Step 3: Get the public key from regional endpoint url = 'https://public-keys.auth.elb.' + region + '.amazonaws.com/' + kid req = requests.get(url) pub_key = req.text # Step 4: Get the payload payload = jwt.decode(encoded_jwt, pub_key, algorithms=['ES256'])

다음 예에서는 Python 2.7로 퍼블릭 키를 가져오는 방법을 보여줍니다.

import jwt import requests import base64 import json # Step 1: Validate the signer expected_alb_arn = 'arn:aws:elasticloadbalancing:region-code:account-id:loadbalancer/app/load-balancer-name/load-balancer-id' encoded_jwt = headers.dict['x-amzn-oidc-data'] jwt_headers = encoded_jwt.split('.')[0] decoded_jwt_headers = base64.b64decode(jwt_headers) decoded_json = json.loads(decoded_jwt_headers) received_alb_arn = decoded_json['signer'] assert expected_alb_arn == received_alb_arn, "Invalid Signer" # Step 2: Get the key id from JWT headers (the kid field) kid = decoded_json['kid'] # Step 3: Get the public key from regional endpoint url = 'https://public-keys.auth.elb.' + region + '.amazonaws.com/' + kid req = requests.get(url) pub_key = req.text # Step 4: Get the payload payload = jwt.decode(encoded_jwt, pub_key, algorithms=['ES256'])
고려 사항
  • 이 예제에서는 토큰의 서명을 사용하여 발행자의 서명을 검증하는 방법을 다루지 않습니다.

  • 표준 라이브러리는 JWT 형식의 Application Load Balancer 인증 토큰에 포함된 패딩과 호환되지 않습니다.

제한 시간

세션 제한 시간

새로 고침 토큰과 세션 제한 시간은 다음과 같이 연계됩니다.

  • 세션 제한 시간이 액세스 토큰 만료 시간보다 짧은 경우 로드 밸런서는 세션 제한 시간을 준수합니다. 사용자에게 IdP가 포함된 활성 세션이 있는 경우 다시 로그인하라는 메시지가 표시되지 않을 수 있습니다. 그렇지 않으면 사용자가 로그인하도록 리디렉션됩니다.

    • IdP 세션 제한 시간이 Application Load Balancer 세션 제한 시간보다 긴 경우, 사용자는 다시 로그인하기 위해 자격 증명을 제공할 필요가 없습니다. 대신, IdP는 새 권한 부여 코드를 사용하여 Application Load Balancer로 다시 리디렉션합니다. 다시 로그인하지 않는 경우에도 인증 코드는 한 번만 사용합니다.

    • IdP 세션 제한 시간이 Application Load Balancer 세션 제한 시간 이하인 경우 사용자는 다시 로그인하기 위해 자격 증명을 제공해야 합니다. 다시 로그인한 후 IdP는 새 권한 부여 코드를 사용하여 Application Load Balancer로 다시 리디렉션하고 나머지 인증 흐름은 요청이 백엔드에 도달할 때까지 계속됩니다.

  • 세션 제한 시간이 액세스 토큰 만료 시간보다 길고 IdP가 새로 고침 토큰을 지원하지 않는 경우 로드 밸런서는 제한 시간이 초과될 때까지 인증 세션을 유지합니다. 그런 다음 사용자가 다시 로그인하도록 합니다.

  • 세션 제한 시간이 액세스 토큰 만료 시간보다 길고 IdP가 새로 고침 토큰을 지원하는 경우 로드 밸런서는 액세스 토큰이 만료될 때마다 사용자 세션을 새로 고칩니다. 로드 밸런서는 인증 세션 제한 시간이 초과되거나 새로 고침 흐름이 실패한 후에만 사용자가 다시 로그인하도록 합니다.

클라이언트 로그인 시간 초과

클라이언트는 15분 이내에 인증 프로세스를 시작하고 완료해야 합니다. 클라이언트가 15분 한도 내에서 인증을 완료하지 못하면 로드 밸런서에서 HTTP 401 오류가 발생합니다. 이 제한 시간은 변경하거나 제거할 수 없습니다.

예를 들어 사용자가 Application Load Balancer를 통해 로그인 페이지를 로드하는 경우 15분 이내에 로그인 프로세스를 완료해야 합니다. 15분 시간 초과가 만료된 후 사용자가 기다렸다가 로그인을 시도하면 로드 밸런서는 HTTP 401 오류를 반환합니다. 사용자는 페이지를 새로 고치고 다시 로그인을 시도해야 합니다.

인증 로그아웃

애플리케이션은 인증된 사용자를 로그아웃해야 하는 경우 인증 세션 쿠키의 만료 시간을 -1로 설정하고 클라이언트를 IdP 로그아웃 엔드포인트(IdP가 지원하는 경우)로 리디렉션해야 합니다. 사용자가 삭제된 쿠키를 재사용할 수 없도록 하려면 액세스 토큰의 만료 시간을 적절히 짧게 구성하는 것이 좋습니다. 클라이언트가 NULL이 아닌 새로 고침 토큰과 함께 만료된 액세스 토큰이 있는 세션 쿠키를 로드 밸런서에 제공하는 경우 로드 밸런서는 IdP에 연락하여 사용자가 여전히 로그인하고 있는지 확인합니다.

클라이언트 로그아웃 랜딩 페이지는 인증되지 않은 페이지입니다. 즉, 인증이 필요한 Application Load Balancer 규칙 뒤에 있을 수 없습니다.

  • 요청이 대상에 전송되면 애플리케이션은 모든 인증 쿠키에 대해 만료를 -1로 설정해야 합니다. Application Load Balancer는 최대 16K 크기의 쿠키를 지원하므로 클라이언트로 전송하는 샤드를 최대 4개까지 생성할 수 있습니다.

    • IdP에 로그아웃 엔드포인트가 있는 경우 IdP 로그아웃 엔드포인트(예: Amazon Cognito 개발자 안내서에 설명된 LOGOUT 엔드포인트)로 리디렉션을 실행해야 합니다.

    • IdP에 로그아웃 엔드포인트가 없는 경우 요청은 클라이언트 로그아웃 랜딩 페이지로 돌아가고 로그인 프로세스가 다시 시작됩니다.

  • IdP에 로그아웃 엔드포인트가 있다고 가정하면 IdP는 액세스 토큰과 새로 고침 토큰을 만료하고 사용자를 클라이언트 로그아웃 랜딩 페이지로 다시 리디렉션해야 합니다.

  • 후속 요청은 원래의 인증 흐름을 따릅니다.