SAML so với đăng nhập liên kết bằng OAuth


100

Sự khác biệt giữa SAML và đăng nhập liên kết bằng OAuth là gì? Giải pháp nào có ý nghĩa hơn, nếu một công ty muốn sử dụng ứng dụng web của bên thứ ba, đồng thời muốn đăng nhập một lần và là cơ quan xác thực?

Câu trả lời:


128

Họ giải quyết các vấn đề khác nhau.

SAML là một tập hợp các tiêu chuẩn đã được xác định để chia sẻ thông tin về người dùng là ai, tập thuộc tính của họ là gì và cung cấp cho bạn cách cấp / từ chối quyền truy cập vào một thứ gì đó hoặc thậm chí yêu cầu xác thực.

OAuth thiên về việc ủy ​​quyền quyền truy cập vào một thứ gì đó. Về cơ bản, bạn đang cho phép ai đó "hành động" như bạn. Nó được sử dụng phổ biến nhất để cấp quyền truy cập api có thể làm điều gì đó thay mặt bạn.

Chúng là hai thứ hoàn toàn khác nhau.


Một số ví dụ có thể giúp ích.

OAuth nghĩ về một twitter. Giả sử bạn đang sử dụng Google Buzz và Twitter và bạn muốn viết một ứng dụng để có thể đồng bộ hóa cả hai. Về cơ bản, bạn có thể thiết lập sự tin cậy giữa ứng dụng của mình và twitter. Lần đầu tiên bạn liên kết ứng dụng với twitter, bạn thực hiện lời nhắc cổ điển để đăng nhập vào twitter, sau đó hộp xác nhận bật lên và hỏi "Bạn có muốn cấp quyền truy cập vào« tên ứng dụng của bạn »không?" khi bạn nhấp vào "có", niềm tin đã được thiết lập và giờ đây ứng dụng của bạn có thể hoạt động như bạn trên Twitter. Nó có thể đọc các bài đăng của bạn, cũng như tạo các bài viết mới.

SAML - Đối với SAML, hãy nghĩ đến một số loại "thỏa thuận" giữa hai hệ thống thành viên không liên quan. Trong trường hợp của chúng tôi, chúng tôi có thể sử dụng US Airways và Hertz. Không có tập hợp thông tin xác thực được chia sẻ nào có thể đưa bạn từ trang web này đến trang web khác, nhưng hãy giả sử Hertz muốn cung cấp một "thỏa thuận" cho US Airways. (Cứ cho là tôi biết đây là một ví dụ cực đoan, nhưng hãy chịu đựng với tôi). Sau khi mua chuyến bay, họ sẽ cho thuê xe hơi miễn phí cho các thành viên Chủ tịch. US Airways và Hertz sẽ thiết lập một số hình thức tin cậy và một số cách để xác định người dùng. Trong trường hợp của chúng tôi, "id liên kết" của chúng tôi sẽ là địa chỉ email và đó sẽ là một cách tin cậy mà Hertz tin tưởng rằng nhà cung cấp danh tính US Airways sẽ cung cấp mã thông báo chính xác và an toàn. Sau khi đặt chuyến bay, nhà cung cấp danh tính US Airways sẽ tạo mã thông báo và điền cách họ đã xác thực người dùng, cũng như "thuộc tính" về người đó trong trường hợp của chúng tôi, thuộc tính quan trọng nhất sẽ là cấp trạng thái của người đó trong US Airways. Khi mã thông báo đã được điền, nó sẽ chuyển nó qua một số loại tham chiếu hoặc được mã hóa trong một url và khi chúng tôi đến Hertz, nó sẽ xem xét mã thông báo, xác thực nó và bây giờ có thể cho phép thuê xe miễn phí.

Vấn đề với ví dụ SAML này là nó chỉ có một trường hợp sử dụng chuyên biệt trong số nhiều trường hợp sử dụng. SAML là một tiêu chuẩn và hầu như có quá nhiều cách để bạn có thể thực hiện nó.


Ngoài ra, nếu bạn không quan tâm đến ủy quyền, bạn gần như có thể tranh luận rằng việc xác nhận xác thực qua SAML và OpenID .


4
Tôi vẫn không nhận được sự khác biệt. "Cấp / từ chối quyền truy cập" và "cấp quyền truy cập vào api's" nghe giống như vậy đối với tôi. Bạn có thể đưa ra 2 ví dụ giống nhau hơn để tôi thấy sự khác biệt được không? Ví dụ: tại sao chúng tôi không thể sử dụng SAML để thiết lập sự tin cậy giữa ứng dụng của bạn và Twitter? Hoặc tại sao bạn không thể sử dụng OAuth cho Hertz để nói với USAirways về thỏa thuận đặc biệt?
Tim Cooper

3
Tôi hiểu rồi, nhưng tôi luôn có thể thực hiện SSO với OAuth (bằng cách yêu cầu quyền truy cập vào một API cung cấp danh tính). Điều đó có nghĩa là OAuth có thể làm được mọi thứ SAML có thể và hơn thế nữa?
Dirk

@Dirk bạn gần như đúng, tức là chúng tôi có thể lấy danh tính của người dùng bằng OAuth cũng như nhiều ứng dụng yêu cầu đăng nhập qua Google, Facebook, GitHub để lấy danh tính của người dùng và các thuộc tính khác để cho phép họ truy cập vào ứng dụng của mình. Nhưng đúng là chúng ta có thể đạt được nhiều thứ hơn là nhận được danh tính bằng OAuth.
chirag soni

39

Hãy xem phần giải thích đơn giản được tóm tắt ở đây:

Nhiều người nhầm lẫn về sự khác biệt giữa SAML, OpenID và OAuth, nhưng nó thực sự rất đơn giản. Mặc dù có một số trùng lặp, đây là một cách rất đơn giản để phân biệt giữa ba loại.

OpenID - đăng nhập một lần cho người tiêu dùng

SAML - đăng nhập một lần cho người dùng doanh nghiệp

OAuth - Ủy quyền API giữa các ứng dụng

Đối với những người cảm thấy thoải mái với các mẫu thiết kế OO, tôi nghĩ rằng có một hệ quả tốt đẹp đối với các mẫu bao bọc . Hãy nghĩ về các mẫu Mặt tiền , Trình trang tríProxy . Về cơ bản, tất cả đều giống nhau, chúng chỉ là những cái bao bọc ... Sự khác biệt là ý định của mỗi mẫu .

Tương tự, SAML, OAuth và OpenID đều hỗ trợ các ý định khác nhau thông qua một cơ chế cơ bản chung , đó là chuyển hướng đến nhà cung cấp dịch vụ / cơ quan nhận dạng cho một số tương tác riêng tư, sau đó là chuyển hướng đến ứng dụng của bên thứ ba ban đầu.

Nhìn xung quanh trên mạng, bạn sẽ thấy chồng chéo giữa các khả năng của giao thức. Xác thực qua OAuth là hoàn toàn hợp lý. SSO qua OAuth có thể không có nhiều ý nghĩa vì SAML và OpenID đặc biệt hướng tới danh tính được liên kết.

Đối với câu hỏi, trong bối cảnh công ty, SAML có vẻ thích hợp hơn OAuth cho SSO . Tôi cá là nếu bạn nhìn vào các ứng dụng của bên thứ ba mà bạn muốn tích hợp với danh tính công ty của mình, bạn sẽ thấy chúng đã được thiết kế để tích hợp với SAML / LDAP / Radius, v.v. IMO OAuth thích hợp hơn cho tương tác Internet giữa các ứng dụng hoặc có thể là các ứng dụng bao gồm Kiến trúc hướng dịch vụ trong môi trường doanh nghiệp lớn.

Các quy tắc ủy quyền cũng có thể được chỉ định trong môi trường công ty theo những cách khác. LDAP là một công cụ phổ biến cho việc này. Tổ chức người dùng thành các nhóm và liên kết các đặc quyền của ứng dụng chống lại tư cách thành viên nhóm là một cách tiếp cận phổ biến. LDAP cũng có thể được sử dụng để xác thực. Active Directory là một ví dụ tuyệt vời, mặc dù tôi thích OpenLDAP hơn.


1
Cám ơn cập nhật @Sundeep liên kết
quickshiftin

Đã cập nhật liên kết, tuy nhiên phần tóm tắt đã có trong câu trả lời vẫn như cũ.
quickshiftin

OpenID chỉ được xây dựng trên oAuth. oAuth không hỗ trợ giao diện người dùng của chính nó. OpenId làm điều đó cho chúng tôi. Không có sự khác biệt khác giữa OAuth và OpenID
Đó là một cái bẫy

@ Itatrap không đúng; OpenID về xác thực, OAuth là về ủy quyền, tuy nhiên chúng có chung một cơ chế (chuyển hướng trình duyệt) tương tự. Không liên quan nhiều đến giao diện người dùng ... Hãy xem câu trả lời này . Bạn cũng có thể xem ở đây . Bạn cũng có thể đọc lại câu trả lời của tôi để rõ hơn haha.
quickshiftin

1
@ Itatrap Bạn có thể muốn xem xác thực OpenId Spec " được xây dựng trên OAuth 2.0"; và cả OAuth 2.0 Spec " Khung ủy quyền OAuth 2.0 " ... Một lần nữa, một cái được thiết kế để xác thực , cái còn lại để ủy quyền . Tận dụng cái sau cho cái trước là OK vì chúng có chung một mô hình cơ bản (lần thứ 3 hoặc thứ 4, tôi đã nói rồi lol). Tất cả được tóm tắt trong câu trả lời không thay đổi của tôi. Bạn nên học cách đọc bro.
quickshiftin

3

Tìm thấy bài viết hay ở đây

nhập mô tả hình ảnh ở đây

SAML (Ngôn ngữ đánh dấu xác nhận bảo mật) được thiết lập các tiêu chuẩn để đạt được Đăng nhập một lần (SSO), Quản lý liên kết và danh tính.

Ví dụ : Người dùng (chính) xác thực với trang web đặt vé máy bay, AirFlyer (nhà cung cấp danh tính) đã định cấu hình SSO qua SAML với trang web đặt vé đưa đón, Shuttler (nhà cung cấp dịch vụ). Sau khi được xác thực với Flyer, người dùng có thể đặt xe đưa đón trên Shuttler mà không cần xác thực

OAuth (Ủy quyền mở) là một tiêu chuẩn để ủy quyền tài nguyên. Nó không đối phó với xác thực.

Ví dụ : Ứng dụng di động chia sẻ ảnh (người dùng OAuth) cho phép người dùng nhập ảnh từ tài khoản Instagram của họ (nhà cung cấp OAuth). Ứng dụng này sẽ gửi mã truy cập tạm thời hoặc khóa đến ứng dụng chia sẻ ảnh sẽ hết hạn sau vài giờ.


2

SAML có nhiều "hồ sơ" để lựa chọn cho phép người dùng khác "đăng nhập" vào trang web của bạn. SAML-P hoặc SAML Passive rất phổ biến và khá đơn giản để thiết lập. WS-Trust cũng tương tự và nó cũng cho phép liên kết giữa các trang web.

OAuth được thiết kế để ủy quyền. Bạn có thể đọc thêm ở đây:

Sự khác biệt giữa OpenID và OAuth là gì?


Tôi cố gắng hiểu sự khác biệt giữa "đăng nhập" và "ủy quyền". Bạn có thể cho một ví dụ minh họa sự khác biệt?
Tim Cooper

@TimCooper "đăng nhập" là thuật ngữ lỏng lẻo cho xác thực trong khi "ủy quyền" được cũng ủy quyền ... Một ví dụ cho mỗi yêu cầu của bạn
quickshiftin

1
@quickshiftin Được rồi, tôi hiểu sự khác biệt đó. Câu trả lời của bạn dường như ngụ ý rằng SAML thực hiện xác thực trong khi OAuth thực hiện ủy quyền. Đúng không? Hoặc cả hai đều làm cả hai - (trong trường hợp đó tôi vẫn không biết sự khác biệt là gì).
Tim Cooper

1
@TimCooper Các giao thức có một số khả năng chồng chéo. OAuth được nhắm mục tiêu để ủy quyền, nhưng nó cũng hỗ trợ xác thực . SSO trong bối cảnh công ty là thứ mà SAML được xây dựng có mục đích. Mặt khác, SAML cũng hỗ trợ ủy quyền. Các bối cảnh là yếu tố quan trọng nhất khi quyết định công nghệ để sử dụng. Năm ngoái, tôi đã viết một tiện ích mở rộng cho Expression Engine sử dụng SimpleSAMLPhp để xác thực người dùng dựa trên phần phụ trợ Kerberos, sau đó tra cứu các quy tắc ủy quyền từ hệ thống LDAP. Đó là một thế giới điên rồ ngoài kia!
quickshiftin

2

Họ xử lý một trường hợp sử dụng tinh vi

  • SAML - Chia sẻ thông tin xác thực (ví dụ: SSO) của người dùng với các nhà cung cấp dịch vụ khác nhau (ví dụ: web hoặc dịch vụ web)
  • OAuth - Người dùng ủy quyền cho Ứng dụng truy cập tài nguyên thay mặt cho họ


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.