SAML , OpenID

zioo·2021년 12월 20일
1

Backend

목록 보기
12/40

SAML (Security Assertion Markup Language)

SSO (Single Sign On)이 필요할 때 많이 쓰이는 인증방식.

SSO는 Single Sign-On의 약자로 한번의 로그인으로 여러개의 다른 도메인을 이용한다는 의미를 담고 있다.

예를들어, 로그인 검증은 A라는 곳에서 하고, B라는 곳에서는 A에서 검증된 로그인 정보라면 검증을 따로 하지 않게끔 하는 것이 SSO에 해당한다.

이런 SSO를 구현하기 위한 대표적인 방법으로 SAML, OAuth가 많이 사용된다.

SAML

  • (로그인) 인증/인가 정보를 담은 XML

  • cross domain 상황, 다양한 플랫폼에 관계없이 표준적인 방법으로 SSO 구현이 가능하게 함

  • 아래와 같이 3가지의 구성원이 존재

    1) Service Provideer (SP) : 서비스 제공 주체

    2) User

    3) Identify Provider (IdP) : User 인증을 담당하는 주체

SAML의 인증 절차

  • Request : User가 로그인 버튼을 클릭
  • Validation: SAML과 Identity Provider가 인증을 위해 연결됨
  • Login: User의 ID와 비밀번호를 입력
  • Token creation: User가 올바른 정보를 입력하면, SAML 토큰이 Service Provider에게 제공되어 서버에 로그인하는 것을 허가함.

OAuth는 Authorization에 특화. 권한을 부여하는 것에 집중되어 있음. (집의 규칙)
SAML은 Authentication에 특화되어 있는 프로토콜. (집 키)

OpenID

OIDC(OpenID Connect)는 웹 애플리케이션에 사용자가 안전하게 로그인하는 데 사용할 수 있는 OAuth 2.0 기반의 인증 프로토콜입니다

OpenID Connect는 OAuth 2.0 프로토콜의 최상위 레이어와 동일한 레이어다. OpenID Connect는 OAuth 2.0을 확장하여 인증 방식을 표준화한다.

OAuth는 유저 인증을 곧바로 제공하지 않지만 권한 부여를 위한 엑세스 토큰을 제공한다. OpenID Connect는 권한부여 서버에 의해 작동하는 인증 시스템을 기반으로 클라이언트가 사용자를 판단할 수 있게 해준다. 권한부여 서버에 유저 로그인과 동의를 요청할 때, openid라는 스코프를 정의하면 OpenID Connect 사용이 가능하다. openid는 OpenID가 필요되는 권한부여 서버에 필수적인 스코프이다.

OpenID Connect 인증을 위한 URI 요청은 다음과 같이 만들어진다.

https://accounts.google.com/o/oauth2/v2/auth?
response_type=code&
client_id=your_client_id&
scope=openid%20contacts&
redirect_uri=https%3A//oauth2.example.com/code

이 요청의 결과는 액세스 토큰과 ID 토큰으로 바꿀 수 있는 어플리케이션 코드이다. OAuth 플로우가 암묵적 플로우면, 서버는 액세스 토큰과 ID 토큰을 바로 줄 것이다.

ID 토큰은 JWT 또는 JSON 웹 토큰이다. JWT는 header, payload, signature 3가지 부분이 담겨있는 인코드된 토큰이다. ID 토큰을 얻은 이후에, 클라이언트는 payload 부분에 인코드된 사용자 정보를 얻을지 결정할 수 있다.


{
  "iss": "https://accounts.google.com",
  "sub": "10965150351106250715113082368",
  "email": "johndoe@example.com",
  "iat": 1516239022,
  "exp": 1516242922
}

0개의 댓글