Xác thực bằng SAML trong các ứng dụng web

Nếu bạn đã nâng cấp lên Xác thực Firebase bằng Nền tảng danh tính, bạn có thể xác thực người dùng của mình với Firebase bằng cách sử dụng nhà cung cấp danh tính SAML mà bạn chọn. Điều này giúp bạn có thể sử dụng giải pháp SSO dựa trên SAML để đăng nhập người dùng vào ứng dụng Firebase của bạn.

Xác thực Firebase chỉ hỗ trợ luồng SAML do nhà cung cấp dịch vụ khởi tạo.

Trước khi bắt đầu

Để đăng nhập người dùng bằng nhà cung cấp danh tính SAML, trước tiên bạn phải thu thập một số thông tin từ nhà cung cấp:

  • ID thực thể của nhà cung cấp : Một URI xác định nhà cung cấp danh tính.
  • URL SAML SSO của nhà cung cấp : URL của trang đăng nhập của nhà cung cấp danh tính.
  • Chứng chỉ khóa công khai của nhà cung cấp : Chứng chỉ được sử dụng để xác thực mã thông báo được nhà cung cấp danh tính ký.
  • ID thực thể của ứng dụng : Một URI xác định ứng dụng của bạn, "nhà cung cấp dịch vụ".

Sau khi bạn có thông tin ở trên, hãy bật SAML làm nhà cung cấp dịch vụ đăng nhập cho dự án Firebase của bạn:

  1. Thêm Firebase vào dự án JavaScript của bạn .

  2. Nếu bạn chưa nâng cấp lên Xác thực Firebase bằng Nền tảng nhận dạng, hãy làm như vậy. Xác thực SAML chỉ khả dụng trong các dự án được nâng cấp.

  3. Trên trang Nhà cung cấp đăng nhập của bảng điều khiển Firebase, nhấp vào Thêm nhà cung cấp mới , sau đó nhấp vào SAML .

  4. Đặt tên cho nhà cung cấp này. Lưu ý ID nhà cung cấp được tạo: một cái gì đó như saml.example-provider . Bạn sẽ cần ID này khi thêm mã đăng nhập vào ứng dụng của mình.

  5. Chỉ định ID pháp nhân, URL SSO và chứng chỉ khóa công khai của nhà cung cấp danh tính của bạn. Đồng thời chỉ định ID thực thể của ứng dụng của bạn (nhà cung cấp dịch vụ). Các giá trị này phải khớp chính xác với các giá trị mà nhà cung cấp của bạn đã chỉ định cho bạn.

  6. Lưu các thay đổi của bạn.

  7. Nếu bạn chưa ủy quyền miền ứng dụng của mình, hãy thêm miền đó vào danh sách cho phép trên trang Xác thực> Cài đặt của bảng điều khiển Firebase.

Xử lý quy trình đăng nhập với SDK Firebase

Để xử lý quy trình đăng nhập với SDK JavaScript của Firebase, hãy làm theo các bước sau:

  1. Tạo một phiên bản của SAMLAuthProvider bằng cách sử dụng ID nhà cung cấp mà bạn có trong bảng điều khiển Firebase.

    Web version 9

    import { SAMLAuthProvider } from "firebase/auth";
    
    const provider = new SAMLAuthProvider('saml.example-provider');
    

    Web version 8

    var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider');
    ``
    
  1. Xác thực với Firebase bằng đối tượng nhà cung cấp SAML.

    Bạn có thể chuyển hướng người dùng đến trang đăng nhập của nhà cung cấp hoặc mở trang đăng nhập trong cửa sổ trình duyệt bật lên.

    Chuyển hướng luồng

    Chuyển hướng đến trang đăng nhập của nhà cung cấp bằng cách gọi signInWithRedirect() :

    Web version 9

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);
    

    Web version 8

    firebase.auth().signInWithRedirect(provider);
    

    Sau khi người dùng hoàn tất đăng nhập và quay lại ứng dụng của bạn, bạn có thể nhận được kết quả đăng nhập bằng cách gọi getRedirectResult() .

    Web version 9

    import { getAuth, getRedirectResult, SAMLAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        // User is signed in.
    
        // Provider data available using getAdditionalUserInfo()
      })
      .catch((error) => {
        // Handle error.
      });
    

    Web version 8

    firebase.auth().getRedirectResult()
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    Quy trình bật lên

    Web version 9

    import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    

    Web version 8

    firebase.auth().signInWithPopup(provider)
      .then((result) => {
        // User is signed in.
    
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim.
      })
      .catch((error) => {
        // Handle error.
      });
    
  2. Mặc dù các ví dụ trên tập trung vào quy trình đăng nhập, nhưng bạn có thể sử dụng cùng một mẫu để liên kết nhà cung cấp SAML với người dùng hiện tại bằng cách sử dụng linkWithRedirect()linkWithPopup() , đồng thời xác thực lại người dùng bằng reauthenticateWithRedirect()reauthenticateWithPopup() , có thể được sử dụng để truy xuất thông tin đăng nhập mới cho các hoạt động nhạy cảm yêu cầu đăng nhập gần đây.