SAML
SAML(Security Assertion Markup Language)
[ Microsoft Security ] SAML 이란?
정의
- SAML은 하나의 자격 증명으로 한 번만 로그인하여 여러 앱에 액세스할 수 있도록 해 주는 기술입니다.
- 사용자가 로그인하면 Microsoft Entra ID와 같은 ID 공급자가 사용자를 확인한 후 사용자가 액세스하려는 사이트, 서비스 또는 앱의 서비스 공급자 측으로 인증 데이터를 전달합니다.
용도
- SAML은 비즈니스의 보안을 강화하고 직원, 파트너, 고객의 로그인 프로세스를 간소화합니다.
- 조직에서는 SAML을 사용하여 하나의 사용자 이름과 암호로 여러 사이트, 서비스, 앱에 액세스하는 Single Sign-On, 을 설정할 수 있습니다.
작동 방식
SAML 인증에서는
서비스 공급자
와 ID 공급자
가 로그인 및 사용자 데이터를 공유하여 액세스를 요청하는 각 사용자에게 권한을 부여합니다. SAML 인증은 보통 다음과 같은 단계로 이루어집니다.- 직원이
ID 공급자
가 제공하는 로그인 페이지에서 로그인하여 업무를 시작합니다.
ID 공급자
가 사용자 이름, 암호, PIN, 디바이스, 생체 인식 데이터와 같은 인증 세부 정보의 조합을 확인하여 해당 직원이 실제 사용자가 맞는지 확인합니다.
- 직원이 Microsoft Word나 Workday와 같은
서비스 공급자
앱을 실행합니다.
서비스 공급자
가ID 공급자
와 통신하여 해당 직원에게 앱에 액세스할 권한이 부여 되었는지 확인합니다.
ID 공급자
가 인증 및 권한 부여 정보를 전달합니다.
- 직원이 또다시 로그인할 필요 없이 앱에 액세스합니다.
SAML 어설션?
SAML 어설션은 서비스 공급자에게 로그인하는 직원이 인증되었음을 알려 주는 데이터를 포함하는 XML 문서
인증 어설션
은 사용자를 식별하며, 사용자가 로그인한 시간과 사용자가 사용한 인증의 유형(암호, 다단계 인증 등)을 포함합니다.
속성 어설션
은 SAML 토큰을 공급자에게 전달합니다. 이 어설션은 사용자에 관한 특정 데이터를 포함합니다.
권한 부여 결정 어설션
은 서비스 공급자에게 사용자가 인증되었는지 아니면 자격 증명에 문제가 있거나 해당 서비스를 사용할 권한이 없어서 액세스가 거부되었는지 알려줍니다.
SAML 과 OAuth
- SAML과 OAuth는 사용자가 여러 서비스에 개별적으로 로그인할 필요가 없도록 간편한 환경을 지원한다는 점에서는 동일하지만, 사용하는 기술과 프로세스는 저마다 다릅니다.
SAML
은 사용자가 동일한 자격 증명을 사용하여 여러 서비스에 액세스하도록 지원하기 위해XML
을 사용하는 반면OAuth
는JWT
또는JavaScript Object Notation
을 사용하여 권한 부여 데이터를 전달합니다.
- OAuth에서는 사용자가 해당 서비스를 위한 새로운 사용자 이름과 암호를 만드는 대신 Google, Facebook 계정과 같은 타사 권한 부여를 사용하여 서비스에 로그인합니다.
Vue(SPA)에서 SAML 연동..?
SAML
requires metadata exchange between the IDP (Okta) and the SP (your app) which is not possible if you don’t have a server side component.The ideal way to enable SSO for your SPA if it doesn’t have a server side component is using
Open ID Connect
. Okta has an SDK for Vue JS : https://www.npmjs.com/package/@okta/okta-vue 75You can find some samples here: https://github.com/okta/samples-js-vue 111
However, if you need to use SAML without server side component you could perhaps leverage features of your web server to add a SAML interceptor. You can find an example here: https://medium.com/@farasath/enable-single-sign-on-for-your-spas-hosted-on-apache-http-server-97b466067910 155
작동방식
- Idp Single Sign On URL 을 통해 SAML Assertion을 공급받음

- 해당 URL에서 Assertion을 Assertion Consumer Service URL(
Single Sign On URL
(SP의), orRecipient URL
)로 보냄

- Assertion을 통해서 인증을 거치고 Authentication이 성공됨
- The default for the relying party’s
entityId
is{baseUrl}/saml2/service-provider-metadata/{registrationId}
- The default for the
assertionConsumerServiceLocation
is/login/saml2/sso/{registrationId}
OIDC
- OIDC(Open Identity Connection) 은 OpenID Foundation 에서 정의한 개방형 Authentication 표준이며, Consumer Application SSO를 목적으로 JSON 형식으로 개발되었습니다.
- OIDC는 OAuth 2.0 프로토콜을 기반으로 상위계층에서 간편하게 인증을 처리하며, 신원확인 서비스(IDP = OP—OpenID Provider. eg, 카카오, 네이버, 구글)를 통해 안전한 방식으로 사용자 정보를 제공할 수 있습니다.
Vue-oidc 연동
[ okta docs ] okta oidc
signOut()
호출 시, postLogoutRedirectUrl 은 app에서 지정한 Sign-out redirect URLs와 같아야 함(http://localhost 이 부분도 같이 붙어야 함. endpoint만 있어서는 bad request 오류 발생함)
signInWithRedirect()
호출 시, originalUri는 signIn 후 , 어느 url로 redirect 할지를 설정하는 것
설정
- clientID : app의 고유 번호
- issuer : authentication을 수행하는 authorization server의 URL 임