Azure AD를 IdP로 설정하고 ALB로 사용자 인증을 시도했습니다.

5423 단어 AzureADAWS
Azure AD를 IdP로 설정하고 ALB에서 사용자 인증을 시도했습니다.

추가 (2020-03-16)



사용자 클레임(x-amzn-oidc-data)의 expire는 2분인 것 같지만, 액세스 토큰(x-amzn-oidc-accesstoken)의 expire는 처음 로그인할 때부터 변하지 않는다(=만료됨) 것 같습니다.
  • IdP가 ID 토큰에 유효한 업데이트 토큰을 제공하는 경우 로드 밸런서는 업데이트 토큰을 저장하고 액세스 토큰이 만료될 때마다 세션을 시간 초과하거나 IdP 업데이트가 실패할 때까지 사용자 클레임을 업데이트합니다.

  • 상기 링크의 AWS 문서의 기술과 조금 맞지 않는 느낌이 듭니다만, 백엔드측은 문서 기재와 같이 유저 클레임으로 유저 인증하는 것이면 문제 없을까?

    절차


  • HTML을 출력하는 Lambda를 작성해, ALB의 타겟으로 설정한다
  • Azure AD에 애플리케이션 등록
  • ALB 설정
  • 테스트

  • 1. HTML을 출력하는 Lambda를 만들고 ALB 대상으로 설정



    아래 기사를 참고하여 Lambda를 만들고 ALB 대상으로 설정합니다.
    htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 에 s 치 c ぉ d ぁ し ん g / ぁ st / あ p ぃ カ チ オン / ぁ MB 다 훗 c 치 온 s. HTML
    ALB 리스너는 HTTPS로 설정하고 Route53에 ALB 별칭 레코드를 등록합니다.

    lambda_function.py
    def lambda_handler(event, context):
    
        print(event)
    
        res = {
            "isBase64Encoded": False,
            "statusCode": 200,
            "statusDescription": "200 OK",
            "headers": {
                "Set-cookie": "cookies",
                "Content-Type": "text/html"
            }
        }
    
        res['body'] = """<html>
        <head>
        <title>hello world</title>
        </head>
        <body>
        <h1>Hello World</h1>
        </body>
        </html>"""
    
        return res
    

    2. Azure AD에 애플리케이션 등록



    Azure에 로그인하여 Azure Active Directory-App registrations에서 애플리케이션을 등록합니다.
    Redirect URI는 다음을 지정합니다.
    https://Route53에 등록한 ALB의 별칭 레코드/oauth2/idpresponse



    그런 다음 응용 프로그램의 클라이언트 비밀을 만듭니다.



    마지막으로 다양한 끝점을 확인합니다.



    아래 명령으로도 확인할 수 있습니다.
    curl https://login.microsoftonline.com/********-****-****-****-************/v2.0/.well-known/openid-configuration
    

    3. ALB 설정



    ALB 리스너를 편집하여 Authenticate 액션을 추가합니다.




    ALB 설정값
    대응하는 Azure측의 값


    Authenticate
    OIDC

    Issure
    Authorization endpoint의 "/oauth2/v2.0/authorize"부분을 "/v2.0"으로 대체 한 URL

    Authorization endpoint
    OAuth 2.0 authorization endpoint (v2)

    Token endpoint
    OAuth 2.0 token endpoint (v2)

    User info endpoint
    htps // g 등 ph. 미 c 로소 ft. 코 m / 어이 dc / 우세 린후

    클라이언트 ID
    Application (client) ID

    Client secret
    만든 비밀


    4. 테스트



    ALB의 별칭 레코드를 URL로 지정하면 로그인 화면이 표시됩니다.



    로그인 후 Lambda가 출력하는 HTML이 표시되면 성공합니다.



    CloudwatchLogs를 확인하면 액세스 토큰 등이 전달되고 있음을 알 수 있습니다.

    잡감


  • 익숙해지면 설정은 매우 간단합니다. (아마)
  • OpenID Connect로 인증하지만 브라우저·ALB간은 액세스 토큰이 아니고 세션 쿠키로 시큐리티를 담보하는 방식은, 액세스 토큰 누설의 문제가 없어서 뭔가 좋은 느낌.
  • 좋은 웹페이지 즐겨찾기