home..

SAML and OpenID Connect

SAML

SAML이란 인증 및 인가 정보를 담은 마크업 언어로 SSO를 구현하기 위해 쓰이는 인증 프로토콜이다.( 참고: OAuth 2.0인증 프레임워크 ) SSO를 통해 온프레미스에 이미 구축해 놓은 인증 시스템에서 인증하여 AWS 리소스에 접근할 수 있다.

SAML Assertion은 사용자가 누구인지, 사용자에 대한 정보, 액세스 권한을 기밀로 식별하는 IdP(Identity Provider)와 SP(Service Provider)간에 교환되는 메시지이다.

AWS와 연동

AssumeRoleWithSAML은 SAML 인증 응답을 거쳐 인증된 사용자의 임시 보안 credential를 반환한다. 임시 보안 credentials을 받아 AWS 서비스 호출에 서명할 수 있다.
반환된 임시 보안 credential는 access key ID, secret access key, security token으로 구성된다.

EXAMPLE SAML REQUEST

https://sts.amazonaws.com/
?Version=2011-06-15
&Action=AssumeRoleWithSAML
&RoleArn=arn:aws:iam::123456789012:role/TestSaml
&PrincipalArn=arn:aws:iam::123456789012:saml-provider/SAML-test 
&SAMLAssertion=VERYLONGENCODEDASSERTIONEXAMPLExxxxxx...

EXAMPLE SAML RESPONSE

<AssumeRoleWithSAMLResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
    <AssumeRoleResult>
        <Issuer> https://integ.example.com/idp/shibboleth</Issuer>
        <AssumedRoleUser>
            <Arn>arn:aws:sts::123456789012:assumed-role/TestSaml</Arn>
            <AssumedRoleId>ARO456EXXXXXXXX:TestSaml</AssumedRoleId>
        </AssumedRoleUser>
        <Credentials>
            <AccessKeyId>ASIAV3ZUEF...</AccessKeyId>
            <SecretAccessKey>8P+SQv...</SecretAccessKey>
            <SessionToken> IQoJb3JpZ2luX2VjEOz///////////...== </SessionToken>
            <Expiration>2019-11-01T20:26:47Z</Expiration>
        </Credentials>
        <Audience>https://signin.aws.amazon.com/saml</Audience>
        <SubjectType>transient</SubjectType>
        <PackedPolicySize>6</PackedPolicySize>
        <NameQualifier>SbdGOnUkh1i4+EXAMPLExL/jEvs=</NameQualifier>
        <SourceIdentity>SourceIdentityValue</SourceIdentity>
        <Subject>SamlExample</Subject>
    </AssumeRoleResult>
    <ResponseMetadata>
        <RequestId>c6104cbe-af31-11e0-8154-cbc7ccf896c7</RequestId>
    </ResponseMetadata>
</AssumeRoleWithSAMLResponse>

[ 참고 ] 브라우저에서 SAML 응답 확인하기

개발자 콘솔 - 네트워크 - 로그 보존을 선택한 후 로그인 후 SAML게시물을 찾아 SAMLReponse 속성을 찾아 확인 가능하다.

OpenID Connect

인 경우를 예시로 보자.

  1. 사전에 eBay에서 OP(OpenID Connect)를 사용하기 위해 인증이 가능하도록 해놓고 필요한 Client ID, Client Secret 같은 정보를 OP로부터 제공받는다.

  2. eBay는 OP로부터 발급받은 Client ID를 비롯하여 Redirect URI, scope 등의 정보로 OP에 Authorization code를 요청한다.

  3. OP는 authentication, authorization 여부를 판단하여 1회용 Authorization code를 eBay를 발급한다.

  4. eBay는 전달 받은 code와 Client ID, Client Secret 등의 정보로 OP에 access token, id token을 요청한다.

  5. OP는 access token, id token을 eBay에 전달한다.

  6. eBay는 access token을 이용하여 다른 Resource Server 자원을 요청하게 된다.
    OP는 access token과 함께 id token을 전달한다. 이 JWT(JSON Web Token)에 암호화된 토큰 안에 user info를 비롯한 정보를 HTTP header의 최대 4KB 이내 저장할 수 있다. eBay는 access token을 사용하여 id token을 복호화하여 사용하게 된다.
    id token은 Header.Payload.Signature.을 구분자로 하여 구성된다. Header에서는 서명 알고리즘 type(HS264, HS384, HS512 RSA264, RSA384, RSA512 등)을 선택할 수 있다.

OpenID Connect vs. SAML

OpenID Connect vs. OAuth 2.0

OpenID Connect은 OAuth 2.0의 확장 인증 프로토콜로, 인증에 초점을 맞춘다. OAuth 2.0은 인증 프레임워크로, 데이터에 대한 액세스 권한 부여에 초점을 맞춘다.


Reference

© 2025 Yujin Lee   •  Powered by Soopr   •  Theme  Moonwalk