SAML과 OAuth를 사용한 페더레이션 로그인


100

SAML과 OAuth를 사용한 페더레이션 로그인의 차이점은 무엇입니까? 회사가 타사 웹앱을 사용하고 싱글 사인온을 원하고 인증 기관이되기를 원하는 경우 어떤 솔루션이 더 합리적입니까?

답변:


128

그들은 다른 문제를 해결합니다.

SAML 은 사용자가 누구인지, 그의 속성 집합이 무엇인지에 대한 정보를 공유하고 무언가에 대한 액세스 권한을 부여 / 거부하거나 인증을 요청하는 방법을 제공하도록 정의 된 표준 집합입니다.

OAuth 는 무언가에 대한 액세스 권한을 위임하는 것에 관한 것입니다. 당신은 기본적으로 누군가가 당신처럼 행동하도록 허용하고 있습니다. 가장 일반적으로 사용자를 대신하여 작업을 수행 할 수있는 액세스 API를 부여하는 데 사용됩니다.

그들은 완전히 다른 두 가지입니다.


도움이 될만한 몇 가지 예.

OAuth는 트위터를 생각합니다. Google 버즈 와 트위터를 사용 중이고 두 가지를 동기화 할 수있는 앱을 작성하고 싶다고 가정 해 보겠습니다. 기본적으로 앱과 트위터간에 신뢰를 구축 할 수 있습니다. 처음으로 앱을 Twitter에 연결하려면 기본 메시지를 통해 Twitter에 로그인하면 확인 상자가 나타나고 ""앱 이름 "에 대한 액세스 권한을 부여 하시겠습니까?"라는 메시지가 표시됩니다. "예"를 클릭하면 신뢰가 구축되고 이제 앱이 Twitter에서 귀하의 역할을 할 수 있습니다. 게시물을 읽고 새 게시물을 만들 수 있습니다.

SAML-SAML의 경우 관련되지 않은 두 멤버십 시스템 간의 "계약"유형을 생각해보십시오. 우리의 경우 US Airways와 Hertz를 사용할 수 있습니다. 한 사이트에서 다른 사이트로 이동할 수있는 공유 자격 증명 세트는 없지만 Hertz가 US Airways에 "거래"를 제공하려고한다고 가정 해 보겠습니다. (나는 이것이 극단적 인 예라는 것을 알고 있지만 저를 참아주십시오). 비행기를 구입하면 회장 회원에게 무료 렌터카를 제공합니다. US Airways와 Hertz는 어떤 형태의 신뢰를 설정하고 사용자를 식별하는 방법을 설정합니다. 우리의 경우 "연합 ID"는 이메일 주소이며 Hertz는 US Airways ID 제공자가 정확하고 안전한 방식으로 토큰을 제공 할 것이라고 신뢰하는 한 가지 신뢰 집합이 될 것입니다. 항공편을 예약 한 후 US Airways ID 공급자는 토큰을 생성하고 사용자를 인증 한 방법을 채울뿐만 아니라 우리의 경우 그 사람에 대한 "속성"을 채 웁니다. 가장 중요한 속성은 US Airways의 상태 수준입니다. 토큰이 채워지면 어떤 유형의 참조를 통해 전달하거나 URL로 인코딩되고 Hertz에 도착하면 토큰을보고 유효성을 검사하고 이제 무료 렌트카를 허용 할 수 있습니다.

이 SAML 예제의 문제점은 많은 경우 중 단 하나의 특수한 사용 사례라는 것입니다. SAML은 표준이며이를 구현할 수있는 방법은 거의 없습니다.


또는 권한 부여에 관심이 없다면 SAML 및 OpenID 를 통해 인증을 주장한다고 거의 주장 할 수 있습니다.


4
나는 여전히 차이를 얻지 못합니다. "접근 허용 / 거부"와 "API에 대한 접근 허용"은 나에게 똑같은 소리로 들립니다. 더 유사한 두 가지 예를 들어 주시면 차이점을 알 수 있습니까? 예를 들어 SAML을 사용하여 앱과 Twitter 간의 신뢰를 구축 할 수없는 이유는 무엇입니까? 아니면 Hertz 용 OAuth를 사용하여 USAirways에 특별 거래에 대해 알리지 못한 이유는 무엇입니까?
Tim Cooper

3
나는 그것을 얻었지만 항상 OAuth로 SSO를 할 수 있습니다 (ID를 제공하는 API에 대한 액세스를 요청하여). 이것이 OAuth가 SAML이 할 수있는 모든 일을 할 수 있다는 것을 의미합니까?
Dirk

@Dirk는 거의 맞습니다. 즉, 많은 응용 프로그램이 Google, Facebook, GitHub를 통해 로그인을 요청하는 것처럼 사용자의 ID 및 기타 속성을 가져와 응용 프로그램에 들어갈 수 있도록 요청하는 것처럼 OAuth를 사용하여 사용자의 ID를 얻을 수 있습니다. 그러나 OAuth를 사용하여 신원을 얻는 것 이상을 달성 할 수 있다는 것은 사실입니다.
chirag soni

39

한 번 봐 가지고 이 간단한 설명이 여기에 요약을 :

많은 사람들이 SAML, OpenID 및 OAuth의 차이점에 대해 혼란 스럽지만 실제로는 매우 간단합니다. 겹치는 부분이 있지만 여기에 세 가지를 구별하는 매우 간단한 방법이 있습니다.

OpenID – 소비자를위한 싱글 사인온

SAML – 엔터프라이즈 사용자를위한 싱글 사인온

OAuth – 애플리케이션 간 API 인증

OO 디자인 패턴에 익숙한 사람들에게는 래퍼 패턴에 대한 좋은 결과가 있다고 생각 합니다 . 에 대해 생각하다Facade , DecoratorProxy 패턴을 . 근본적으로 이것들은 모두 똑같습니다. 그들은 단지 래퍼 일뿐입니다 . 차이점은 각 패턴 의 의도 입니다 .

마찬가지로 SAML, OAuth 및 OpenID는 모두 일부 비공개 상호 작용을 위해 서비스 제공 업체 / ID 기관으로 리디렉션 한 다음 원래 타사 앱으로 리디렉션 하는 공통 기본 메커니즘을 통해 서로 다른 의도촉진 합니다.

네트워크를 둘러 보면 프로토콜의 기능이 겹치는 것을 알 수 있습니다. OAuth를 통한 인증 은 완벽하게 합리적입니다. OAuth를 통한 SSO는 SAML 및 OpenID가 특히 페더레이션 ID에 맞춰져 있기 때문에별로 의미가 없을 수 있습니다.

질문 자체 에는 기업 컨텍스트에서 SAML이 SSO 용 OAuth보다 더 적절하게 들립니다 . 기업 아이덴티티와 통합하려는 타사 앱을 보면 이미 SAML / LDAP / Radius 등과 통합하도록 설계되었음을 알 수 있습니다. IMO OAuth는 인터넷 상호 작용에 더 적합합니다. 대기업 환경에서 서비스 지향 아키텍처를 구성하는 애플리케이션 또는 애플리케이션 간.

권한 부여 규칙은 다른 방법으로도 회사 환경에서 지정할 수 있습니다. LDAP는이를위한 일반적인 도구입니다. 사용자를 그룹으로 구성하고 애플리케이션 권한을 그룹 멤버십에 연결하는 것은 널리 퍼져있는 접근 방식입니다. LDAP도 인증에 사용할 수 있습니다. Active Directory는 좋은 예이지만 OpenLDAP를 선호합니다.


1
@Sundeep 링크를 업데이트 해 주셔서 감사합니다
quickshiftin

링크가 업데이트되었지만 이미 답변에 있던 요약은 동일합니다.
quickshiftin

OpenID는 oAuth에만 구축됩니다. oAuth는 자체적으로 사용자 인터페이스를 지원하지 않습니다. OpenId가 ​​우리를 위해 그렇게합니다. OAuth를하고 오픈 ID 사이에 다른 차이가 없습니다
그것은 함정

@ It'satrap은 사실이 아닙니다. 인증에 관한 OpenID, OAuth는 권한 부여에 관한 것이지만 유사한 (브라우저 리디렉션) 메커니즘을 공유합니다. 둘 다 UI와 관련 이 없습니다 ... 이 답변 도 참조하십시오 . 여기에서 볼 수도 있습니다 . 더 자세한 설명을 위해 내 대답을 다시 읽을 수도 있습니다.
quickshiftin

1
@ It'satrap " OAuth 2.0 위에 구축 된 인증 " OpenId 사양 을 살펴볼 수 있습니다 . 또한 OAuth는 2.0 사양 는 "의 OAuth 2.0 인증 프레임 워크는"... 다시, 하나는 위해 설계 인증 에 대한 다른 권한 부여 . 나중을 전자에 활용하는 것은 공통된 기본 패러다임을 공유하기 때문에 괜찮습니다 (3 번째 또는 4 번째로 말씀 드렸습니다). 모두 내 대답에 요약되어 있습니다. 형제를 읽는 법을 배워야합니다.
quickshiftin

3

여기 에서 좋은 기사를 찾았 습니다.

여기에 이미지 설명 입력

SAML (Security Assertion Markup Language)은 SSO (Single Sign On), 연합 및 ID 관리를 달성하기위한 일련의 표준입니다.

: 사용자 (주장)가 SAML을 통해 구성된 SSO가있는 항공편 예약 웹 사이트 인 AirFlyer (ID 제공자)와 셔틀 예약 웹 사이트 Shutler (서비스 제공자)로 인증합니다. Flyer에 인증되면 사용자는 인증없이 Shuttler에서 셔틀을 예약 할 수 있습니다.

OAuth (Open Authorization)는 리소스 인증을위한 표준입니다. 인증은 다루지 않습니다.

: 사용자가 Instagram 계정 (OAuth 공급자)에서 사진을 가져올 수 있도록 허용하는 사진 공유 모바일 앱 (OAuth 소비자)은 몇 시간 후에 만료되는 사진 공유 앱에 임시 액세스 토큰 또는 키를 보냅니다.


2

SAML에는 다른 사용자가 귀하의 사이트에 "로그인"할 수 있도록 선택할 수있는 다양한 "프로필"이 있습니다. SAML-P 또는 SAML Passive는 매우 일반적이며 설정이 매우 간단합니다. WS-Trust는 유사하며 웹 사이트 간의 연합도 허용합니다.

OAuth는 인증을 위해 설계되었습니다. 여기에서 자세한 내용을 읽을 수 있습니다.

OpenID와 OAuth의 차이점은 무엇입니까?


"로그인"과 "인증"의 차이점을 이해하기가 어렵습니다. 차이점을 보여주는 예를들 수 있습니까?
Tim Cooper

@TimCooper "login"은 인증에 대한 느슨한 용어 이지만 "authorize"는 잘 인증됩니다 ... 요청에 따른 예
quickshiftin

1
@quickshiftin 좋아요, 그 차이를 이해합니다. 귀하의 대답은 SAML이 인증을 수행하는 반면 OAuth는 인증을 수행한다는 것을 암시하는 것 같습니다. 그 맞습니까? 또는 둘 다 수행합니까-(이 경우 차이점이 무엇인지 여전히 모릅니다).
Tim Cooper

1
@TimCooper 프로토콜에는 일부 중복 기능이 있습니다. OAuth는 인증을 대상으로하지만 인증도 지원합니다 . 기업 컨텍스트에서 SSO는 SAML이 특별히 제작 된 것입니다. 반대로 SAML은 인증도 지원합니다. 컨텍스트는 사용할 기술을 결정할 때 가장 중요한 요소입니다. 작년에 저는 SimpleSAMLPhp를 사용하여 Kerberos 백엔드에 대해 사용자를 인증 한 다음 LDAP 시스템에서 인증 규칙을 조회하는 Expression Engine 용 확장을 작성했습니다. 저 밖은 미친 세상입니다!
quickshiftin 2014-06-14

2

미묘한 사용 사례를 처리합니다.

  • SAML-사용자의 자격 증명 (예 : SSO)을 다양한 서비스 공급자 (예 : 웹 또는 웹 서비스)와 공유
  • OAuth-자신을 대신하여 리소스에 액세스하도록 앱을 위임하는 사용자


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.