> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Single Sign-On (SSO)

> Cấu hình SSO SAML hoặc OIDC với Google Workspace, Azure AD, AWS IAM Identity Center, Okta và nhiều hơn nữa

Single Sign-On cho phép nhóm của bạn xác thực vào CloudThinker bằng nhà cung cấp danh tính hiện có — không cần mật khẩu riêng, tự động cấp phép người dùng và hủy cấp phép tập trung khi ai đó rời đi.

<Note>
  SSO khả dụng trên gói **Scale**, **Scale +** và **Enterprise**. Để bắt đầu, điều hướng đến **Organization Settings → Security → SSO** và nhấp **Add Connection**.
</Note>

***

## Cách hoạt động của trình hướng dẫn thiết lập

Trình hướng dẫn SSO có ba bước: **Giao thức → SP Metadata → Cấu hình IdP**.

1. **Giao thức** — Chọn SAML 2.0 hoặc OIDC
2. **SP Metadata** — Sao chép các giá trị của CloudThinker vào IdP khi tạo ứng dụng SAML
3. **Cấu hình IdP** — Dán các giá trị của IdP trở lại vào CloudThinker

Sử dụng các tab bên dưới để theo dõi các bước chính xác cho nhà cung cấp danh tính của bạn.

***

## Thiết lập SAML

<Tabs>
  <Tab title="Google Workspace">
    ### Google Workspace — Thiết lập SAML

    <Steps>
      <Step title="Mở Google Admin Console">
        Truy cập [admin.google.com](https://admin.google.com) → **Apps → Web and mobile apps → Add app → Add custom SAML app**.
      </Step>

      <Step title="Đặt tên ứng dụng">
        Đặt tên là **CloudThinker** và nhấp **Continue**.
      </Step>

      <Step title="Tải xuống siêu dữ liệu IdP">
        Trên màn hình **Google IdP information**, tải xuống **IdP metadata XML** hoặc ghi lại:

        * **SSO URL** (Single Sign-On URL)
        * **Entity ID** (`https://accounts.google.com/o/saml2?idpid=...`)
        * **Certificate** (tải xuống chứng chỉ X.509)

        Nhấp **Continue**.
      </Step>

      <Step title="Nhập thông tin SP CloudThinker">
        Sao chép các giá trị từ **CloudThinker → Settings → Security → SSO → SP Metadata**:

        | Trường Google      | Giá trị CloudThinker                 |
        | ------------------ | ------------------------------------ |
        | **ACS URL**        | Dán **ACS URL** từ CloudThinker      |
        | **Entity ID**      | Dán **SP Entity ID** từ CloudThinker |
        | **Name ID format** | `EMAIL`                              |
        | **Name ID**        | `Basic Information > Primary email`  |

        Nhấp **Continue**.
      </Step>

      <Step title="Cấu hình ánh xạ thuộc tính">
        Thêm các ánh xạ thuộc tính sau:

        | Thuộc tính Google Directory | Thuộc tính ứng dụng |
        | --------------------------- | ------------------- |
        | Primary email               | `email`             |
        | First name                  | `firstName`         |
        | Last name                   | `lastName`          |

        Nhấp **Finish**.
      </Step>

      <Step title="Bật ứng dụng">
        Trong cài đặt ứng dụng, đặt quyền truy cập thành **On for everyone** (hoặc nhắm đến các đơn vị tổ chức cụ thể).
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Quay lại trình hướng dẫn SSO của CloudThinker, dán vào:

        * **Entity ID** từ Google
        * **SSO URL** từ Google
        * **Certificate** (dán nội dung chứng chỉ X.509)

        Nhấp **Create Connection** rồi **Test** để xác minh.
      </Step>
    </Steps>

    <Tip>
      Dùng trường **Import** trong CloudThinker để dán URL siêu dữ liệu IdP Google — tính năng này tự động điền Entity ID, SSO URL và Certificate chỉ trong một bước.
    </Tip>
  </Tab>

  <Tab title="Azure AD / Entra ID">
    ### Microsoft Azure AD (Entra ID) — Thiết lập SAML

    <Steps>
      <Step title="Tạo Enterprise Application">
        Trong [Azure Portal](https://portal.azure.com), vào **Microsoft Entra ID → Enterprise applications → New application → Create your own application**.

        Đặt tên là **CloudThinker**, chọn **Integrate any other application you don't find in the gallery** và nhấp **Create**.
      </Step>

      <Step title="Thiết lập Single Sign-On">
        Mở ứng dụng mới → **Single sign-on → SAML**.
      </Step>

      <Step title="Nhập cấu hình SAML cơ bản">
        Nhấp **Edit** trên **Basic SAML Configuration** và điền từ SP Metadata của CloudThinker:

        | Trường Azure               | Giá trị CloudThinker |
        | -------------------------- | -------------------- |
        | **Identifier (Entity ID)** | Dán **SP Entity ID** |
        | **Reply URL (ACS URL)**    | Dán **ACS URL**      |
        | **Sign on URL**            | Giống ACS URL        |

        Lưu.
      </Step>

      <Step title="Cấu hình thuộc tính & claim">
        Trong **Attributes & Claims**, xác nhận claim `emailaddress` ánh xạ tới `user.mail`. Tùy chọn thêm:

        * `firstName` → `user.givenname`
        * `lastName` → `user.surname`
      </Step>

      <Step title="Tải xuống Federation Metadata">
        Trong **SAML Signing Certificate**, tải xuống **Federation Metadata XML** hoặc sao chép:

        * **App Federation Metadata URL** (khuyến nghị — dùng để tự động nhập vào CloudThinker)
        * **Certificate (Base64)**
        * **Login URL** (SSO URL)
        * **Azure AD Identifier** (Entity ID)
      </Step>

      <Step title="Gán người dùng và nhóm">
        Vào **Users and groups → Add user/group** và gán những người nên có quyền truy cập CloudThinker.
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Trong bước Cấu hình IdP của CloudThinker, dùng trường **Import** để dán **App Federation Metadata URL** — tính năng này tự động điền tất cả trường. Hoặc nhập thủ công:

        * **Entity ID**: Azure AD Identifier
        * **SSO URL**: Login URL
        * **Certificate**: Certificate (Base64)

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="AWS IAM Identity Center">
    ### AWS IAM Identity Center (AWS SSO) — Thiết lập SAML

    <Steps>
      <Step title="Mở IAM Identity Center">
        Trong [AWS Console](https://console.aws.amazon.com), điều hướng đến **IAM Identity Center → Applications → Add application → Add custom SAML 2.0 application**.
      </Step>

      <Step title="Cấu hình ứng dụng">
        Đặt tên hiển thị là **CloudThinker** và tùy chọn thêm mô tả.
      </Step>

      <Step title="Tải xuống siêu dữ liệu IAM Identity Center">
        Trong phần **IAM Identity Center metadata**, sao chép hoặc tải xuống:

        * **IAM Identity Center SAML metadata file** (hoặc URL siêu dữ liệu)
        * **IAM Identity Center issuer URL**
        * **IAM Identity Center sign-in URL**
        * **Certificate**
      </Step>

      <Step title="Nhập siêu dữ liệu SAML của ứng dụng">
        Trong phần **Application metadata**, dán các giá trị từ SP Metadata của CloudThinker:

        | Trường IAM Identity Center    | Giá trị CloudThinker |
        | ----------------------------- | -------------------- |
        | **Application ACS URL**       | Dán **ACS URL**      |
        | **Application SAML audience** | Dán **SP Entity ID** |
      </Step>

      <Step title="Gán người dùng">
        Vào **Assigned users and groups** → **Assign users and groups** và chọn ai nên truy cập CloudThinker.
      </Step>

      <Step title="Cấu hình ánh xạ thuộc tính">
        Trong **Attribute mappings**, thêm:

        | Thuộc tính người dùng trong ứng dụng | Ánh xạ đến giá trị chuỗi hoặc thuộc tính người dùng trong IAM Identity Center |
        | ------------------------------------ | ----------------------------------------------------------------------------- |
        | `Subject`                            | `${user:email}` — Định dạng: `emailAddress`                                   |
        | `email`                              | `${user:email}`                                                               |
        | `firstName`                          | `${user:givenName}`                                                           |
        | `lastName`                           | `${user:familyName}`                                                          |
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Quay lại CloudThinker, dùng **Import** để dán URL siêu dữ liệu IAM Identity Center, hoặc nhập thủ công:

        * **Entity ID**: IAM Identity Center issuer URL
        * **SSO URL**: IAM Identity Center sign-in URL
        * **Certificate**: từ file siêu dữ liệu

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Okta">
    ### Okta — Thiết lập SAML

    <Steps>
      <Step title="Tạo tích hợp ứng dụng mới">
        Trong [Okta Admin Console](https://your-org.okta.com/admin), vào **Applications → Applications → Create App Integration → SAML 2.0**.
      </Step>

      <Step title="Cài đặt chung">
        Đặt tên ứng dụng là **CloudThinker** và nhấp **Next**.
      </Step>

      <Step title="Cấu hình cài đặt SAML">
        Điền từ SP Metadata của CloudThinker:

        | Trường Okta                     | Giá trị CloudThinker |
        | ------------------------------- | -------------------- |
        | **Single sign-on URL**          | Dán **ACS URL**      |
        | **Audience URI (SP Entity ID)** | Dán **SP Entity ID** |
        | **Name ID format**              | `EmailAddress`       |
        | **Application username**        | `Email`              |
      </Step>

      <Step title="Thêm câu lệnh thuộc tính">
        Trong **Attribute Statements**, thêm:

        | Tên         | Giá trị          |
        | ----------- | ---------------- |
        | `email`     | `user.email`     |
        | `firstName` | `user.firstName` |
        | `lastName`  | `user.lastName`  |
      </Step>

      <Step title="Lấy siêu dữ liệu IdP">
        Sau khi lưu, vào tab **Sign On** của ứng dụng → phần **SAML Signing Certificates** → nhấp **Actions → View IdP metadata** để lấy URL XML siêu dữ liệu.

        Hoặc sao chép trực tiếp:

        * **Identity Provider Single Sign-On URL**
        * **Identity Provider Issuer**
        * **X.509 Certificate**
      </Step>

      <Step title="Gán người dùng hoặc nhóm">
        Vào tab **Assignments** và gán người dùng hoặc nhóm nên có quyền truy cập.
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Trong bước Cấu hình IdP của CloudThinker, dán **URL siêu dữ liệu Okta** vào trường **Import**, hoặc nhập thủ công:

        * **Entity ID**: Identity Provider Issuer
        * **SSO URL**: Identity Provider Single Sign-On URL
        * **Certificate**: X.509 Certificate

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="OneLogin">
    ### OneLogin — Thiết lập SAML

    <Steps>
      <Step title="Tạo ứng dụng mới">
        Trong [OneLogin Admin Portal](https://app.onelogin.com/admin), vào **Applications → Applications → Add App → Search for "SAML Custom Connector (Advanced)"** và nhấp vào đó.
      </Step>

      <Step title="Đặt tên và lưu">
        Đặt tên hiển thị là **CloudThinker** và nhấp **Save**.
      </Step>

      <Step title="Cấu hình tab Configuration">
        Vào tab **Configuration** và dán từ SP Metadata của CloudThinker:

        | Trường OneLogin                  | Giá trị CloudThinker                          |
        | -------------------------------- | --------------------------------------------- |
        | **Audience (EntityID)**          | Dán **SP Entity ID**                          |
        | **ACS (Consumer) URL**           | Dán **ACS URL**                               |
        | **ACS (Consumer) URL Validator** | `.*` (hoặc ACS URL chính xác dưới dạng regex) |
        | **Login URL**                    | Giống ACS URL                                 |

        Lưu.
      </Step>

      <Step title="Thêm ánh xạ tham số">
        Vào tab **Parameters** và thêm:

        | Tên trường  | Giá trị    |
        | ----------- | ---------- |
        | `email`     | Email      |
        | `firstName` | First Name |
        | `lastName`  | Last Name  |
      </Step>

      <Step title="Lấy thông tin IdP">
        Vào tab **SSO** và sao chép:

        * **Issuer URL** (Entity ID)
        * **SAML 2.0 Endpoint (HTTP)**
        * **X.509 Certificate** (View Details → sao chép chứng chỉ)
      </Step>

      <Step title="Gán người dùng">
        Vào tab **Users** và thêm người dùng hoặc vai trò nên có quyền truy cập.
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Trong CloudThinker, nhập:

        * **Entity ID**: Issuer URL
        * **SSO URL**: SAML 2.0 Endpoint (HTTP)
        * **Certificate**: X.509 Certificate

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Generic SAML">
    ### SAML 2.0 chung

    Dùng cho bất kỳ nhà cung cấp danh tính tuân thủ SAML nào không có trong danh sách trên.

    #### Bước 1 — Lấy siêu dữ liệu SP của CloudThinker

    Điều hướng đến **Organization Settings → Security → SSO → Add Connection → SAML**. Trên màn hình **SP Metadata**, sao chép:

    | Trường              | Cách sử dụng                                                   |
    | ------------------- | -------------------------------------------------------------- |
    | **ACS URL**         | Dán vào trường "Reply URL" hoặc "ACS URL" của IdP              |
    | **SP Entity ID**    | Dán vào trường "Audience" hoặc "Entity ID" của IdP             |
    | **SP Metadata URL** | Một số IdP cho phép nhập URL này để tự động điền tất cả trường |

    #### Bước 2 — Tạo ứng dụng SAML trong IdP

    Tạo ứng dụng SAML mới trong nhà cung cấp danh tính và nhập các giá trị SP trên. Cấu hình ánh xạ thuộc tính người dùng:

    | Thuộc tính CloudThinker | Thuộc tính IdP             |
    | ----------------------- | -------------------------- |
    | `email` (NameID)        | Email chính của người dùng |
    | `firstName`             | Tên / tên đầu              |
    | `lastName`              | Họ                         |

    #### Bước 3 — Cấu hình thông tin IdP trong CloudThinker

    Sau khi tạo ứng dụng SAML trong IdP, quay lại CloudThinker và hoàn tất bước **Cấu hình IdP**:

    | Trường            | Tìm ở đâu                                                                                                                    |
    | ----------------- | ---------------------------------------------------------------------------------------------------------------------------- |
    | **Display Name**  | Chọn nhãn bất kỳ (ví dụ: "Okta SAML")                                                                                        |
    | **Entity ID**     | Định danh entity của IdP (đôi khi gọi là "Issuer")                                                                           |
    | **SSO URL**       | URL endpoint single sign-on của IdP                                                                                          |
    | **Certificate**   | Chứng chỉ ký X.509 từ IdP (mã hóa base64)                                                                                    |
    | **SLO URL**       | *(Tùy chọn)* Endpoint đăng xuất một lần — chỉ cần nếu bạn muốn người dùng đăng xuất khỏi IdP khi đăng xuất khỏi CloudThinker |
    | **NameID Format** | Để là "Email Address" trừ khi IdP yêu cầu định dạng khác                                                                     |

    <Tip>
      Nếu IdP cung cấp URL hoặc file XML siêu dữ liệu, dùng trường **Import** ở trên cùng để tự động điền Entity ID, SSO URL và Certificate — tiết kiệm thời gian và tránh lỗi sao chép.
    </Tip>

    Nhấp **Create Connection**.
  </Tab>
</Tabs>

***

## Thiết lập OIDC

<Tabs>
  <Tab title="Google Workspace">
    ### Google Workspace — Thiết lập OIDC

    <Steps>
      <Step title="Tạo OAuth Client">
        Vào [console.cloud.google.com](https://console.cloud.google.com) → **APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID**.

        Loại ứng dụng: **Web application**.
      </Step>

      <Step title="Thêm Authorized Redirect URI">
        Thêm **Redirect URI** từ OIDC SP Metadata của CloudThinker. Nhấp **Create**.
      </Step>

      <Step title="Sao chép thông tin xác thực">
        Sao chép **Client ID** và **Client Secret**.
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Trong cấu hình OIDC của CloudThinker:

        * **Discovery URL**: `https://accounts.google.com/.well-known/openid-configuration`
        * **Client ID**: dán từ Google
        * **Client Secret**: dán từ Google

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Azure AD / Entra ID">
    ### Azure AD (Entra ID) — Thiết lập OIDC

    <Steps>
      <Step title="Đăng ký ứng dụng">
        Trong [Azure Portal](https://portal.azure.com) → **Microsoft Entra ID → App registrations → New registration**.

        Đặt tên là **CloudThinker**. Trong **Redirect URI**, chọn **Web** và dán redirect URI từ OIDC SP Metadata của CloudThinker.
      </Step>

      <Step title="Tạo Client Secret">
        Vào **Certificates & secrets → New client secret**. Sao chép **Value** ngay lập tức — nó sẽ không hiển thị lại.
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Trong cấu hình OIDC của CloudThinker:

        * **Discovery URL**: `https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration`
        * **Client ID**: **Application (client) ID** từ tổng quan đăng ký ứng dụng
        * **Client Secret**: giá trị secret bạn đã sao chép

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Okta">
    ### Okta — Thiết lập OIDC

    <Steps>
      <Step title="Tạo ứng dụng OIDC">
        Trong Okta Admin → **Applications → Create App Integration → OIDC - OpenID Connect → Web Application**.
      </Step>

      <Step title="Cấu hình Redirect URI">
        Trong **Sign-in redirect URIs**, dán redirect URI từ OIDC SP Metadata của CloudThinker. Nhấp **Save**.
      </Step>

      <Step title="Hoàn tất thiết lập trong CloudThinker">
        Trong cấu hình OIDC của CloudThinker:

        * **Discovery URL**: `https://your-org.okta.com/.well-known/openid-configuration`
        * **Client ID**: từ tab **General** của ứng dụng Okta
        * **Client Secret**: từ tab **General** của ứng dụng Okta

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Generic OIDC">
    ### OIDC chung

    Dùng cho bất kỳ nhà cung cấp tuân thủ OpenID Connect nào.

    <Steps>
      <Step title="Đăng ký CloudThinker làm OAuth Client">
        Trong IdP, tạo ứng dụng OAuth 2.0 / OIDC mới. Thêm **Redirect URI** hiển thị trong màn hình OIDC SP Metadata của CloudThinker.
      </Step>

      <Step title="Cấu hình trong CloudThinker">
        Nhập các thông tin sau trong cấu hình OIDC của CloudThinker:

        | Trường            | Mô tả                                               |
        | ----------------- | --------------------------------------------------- |
        | **Discovery URL** | Endpoint `.well-known/openid-configuration` của IdP |
        | **Client ID**     | Client ID do IdP cấp                                |
        | **Client Secret** | Client secret do IdP cấp                            |

        Nhấp **Create Connection** và **Test**.
      </Step>
    </Steps>
  </Tab>
</Tabs>

***

## Sau khi thiết lập

### Kiểm tra kết nối

Luôn kiểm tra trước khi bắt buộc SSO:

1. Nhấp **Test** trong cài đặt kết nối SSO
2. Một tab trình duyệt mới mở ra và thử xác thực
3. Xác nhận bạn được chuyển hướng thành công về CloudThinker
4. Kiểm tra thuộc tính người dùng (tên, email) đã được nhận đúng

### Bắt buộc SSO (tùy chọn)

Sau khi xác minh, bạn có thể yêu cầu tất cả người dùng xác thực qua SSO:

1. Vào **Organization Settings → Security → SSO**
2. Bật **Enforce SSO**
3. Người dùng sẽ được chuyển hướng đến IdP khi đăng nhập tiếp theo — đăng nhập bằng email/mật khẩu bị tắt

<Warning>
  Đảm bảo ít nhất một tài khoản Owner hoạt động được với SSO trước khi bắt buộc. Nếu SSO bị lỗi sau khi bắt buộc, Owner có phương thức truy cập dự phòng có thể tắt nó.
</Warning>

### Cấp phép người dùng

CloudThinker tự động cấp phép người dùng khi đăng nhập SSO lần đầu bằng các thuộc tính `email`, `firstName` và `lastName` từ IdP. Người dùng mới được gán vai trò **Developer** theo mặc định — bạn có thể thay đổi điều này trong cài đặt SSO.

***

## Khắc phục sự cố

<AccordionGroup>
  <Accordion title="Lỗi 'Invalid ACS URL' từ IdP">
    Kiểm tra lại ACS URL bạn đã nhập trong IdP khớp chính xác với những gì CloudThinker hiển thị — bao gồm giao thức (`https://`) và không có dấu gạch chéo ở cuối.
  </Accordion>

  <Accordion title="Thuộc tính không ánh xạ (tên hiển thị là email)">
    Xác nhận IdP đang gửi thuộc tính `firstName` và `lastName`. Xem bảng ánh xạ thuộc tính cho nhà cung cấp của bạn ở trên.
  </Accordion>

  <Accordion title="Lỗi xác thực chứng chỉ">
    Đảm bảo bạn đã sao chép toàn bộ chứng chỉ X.509 bao gồm cả header `-----BEGIN CERTIFICATE-----` và `-----END CERTIFICATE-----`. Nếu IdP đã xoay vòng chứng chỉ, hãy cập nhật nó trong cài đặt SSO của CloudThinker.
  </Accordion>

  <Accordion title="Người dùng không thể đăng nhập sau khi bắt buộc SSO">
    Một Owner có thể tắt bắt buộc SSO tại **Organization Settings → Security → SSO** bằng thông tin xác thực dự phòng. Kiểm tra ứng dụng IdP đã được gán cho tất cả người dùng bị ảnh hưởng.
  </Accordion>

  <Accordion title="Lỗi 'Audience mismatch' hoặc 'Entity ID mismatch'">
    SP Entity ID trong IdP phải khớp chính xác với SP Entity ID hiển thị trong SP Metadata của CloudThinker — phân biệt chữ hoa/thường.
  </Accordion>
</AccordionGroup>

***

## Bước tiếp theo

<CardGroup cols={2}>
  <Card title="Thiết lập MFA" icon="mobile-screen" href="/vi/guide/security/overview">
    Thêm MFA dựa trên TOTP để có thêm một lớp xác thực
  </Card>

  <Card title="Kiểm soát truy cập dựa trên vai trò" icon="users-gear" href="/vi/guide/security/overview">
    Cấu hình quyền chi tiết cho các thành viên nhóm
  </Card>

  <Card title="Cài đặt tổ chức" icon="building-columns" href="/vi/guide/organization">
    Quản lý thành viên, workspace và cấu hình cấp tổ chức
  </Card>

  <Card title="BYOK" icon="key" href="/vi/guide/byok">
    Dùng thông tin xác thực AWS Bedrock của riêng bạn để kiểm soát lưu trú dữ liệu và chi phí
  </Card>
</CardGroup>
