Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.
SAML 2.0 là chuẩn đăng nhập một lần (single sign-on) dựa trên XML mà hầu hết identity provider (IdP) doanh nghiệp hỗ trợ. Bạn trao đổi hai bộ giá trị: thông tin service provider (SP) của CloudThinker đưa vào IdP, và thông tin của IdP đưa ngược lại vào CloudThinker.
Trình hướng dẫn tại Admin Settings → Identity and access → Setup SSO → SAML 2.0 có ba bước: Protocol, SP Metadata và IdP Config.
Chiều
Giá trị
Nơi tìm
CloudThinker → IdP của bạn
ACS URL (Assertion Consumer Service), kết thúc bằng /api/v1/sso/saml/acs, và SP Entity ID, kết thúc bằng /api/v1/sso/saml/metadata
Bước SP Metadata, mỗi giá trị có nút sao chép. Cả hai giống nhau cho mọi kết nối, nên bạn có thể sao chép trước khi nhập bất kỳ giá trị IdP nào và gửi cho admin IdP.
IdP của bạn → CloudThinker
IdP Entity ID, SSO URL, IdP Certificate
SAML app trong IdP, hoặc metadata URL của nó. Import chỉ nhận URL; không hỗ trợ tải file lên hay dán XML.
Thuộc tính IdP gửi
Email (bắt buộc), tên, họ
Ánh xạ thuộc tính trong IdP
Ở bước IdP Config, dán metadata URL của IdP vào trường phía trên và nhấn Import. CloudThinker điền IdP Entity ID, SSO URL và IdP Certificate, cùng SLO URL và Name ID Format nếu metadata có chúng.
CloudThinker đọc email người dùng từ claim email, mail, emailAddress hoặc emailaddress của Microsoft, và dùng NameID nếu NameID là email. Nếu NameID không phải email (ví dụ Persistent hoặc Transient), bạn phải gửi thuộc tính email, nếu không đăng nhập sẽ thất bại. Tên và họ lấy từ firstName/givenName và lastName/surname.
Bắt đầu trình hướng dẫn, chọn SAML 2.0, nhấn Next, và giữ bước SP Metadata mở trong lúc làm việc trên IdP. Mọi provider cũng cần Display Name ở bước IdP Config; nhãn nào cũng được, ví dụ Company SSO.
Okta
Microsoft Entra ID
Google Workspace
AWS IAM Identity Center
OneLogin
Provider SAML 2.0 khác
1
Tạo SAML app integration
Trong Okta Admin Console, vào Applications → Applications → Create App Integration → SAML 2.0. Đặt tên CloudThinker.
2
Cấu hình SAML
Trường Okta
Giá trị
Single sign-on URL
ACS URL của CloudThinker
Audience URI (SP Entity ID)
SP Entity ID của CloudThinker
Name ID format
EmailAddress
Application username
Email
Assertion Signature (trong Show Advanced Settings)
Signed
3
Thêm attribute statement
Name
Value
email
user.email
firstName
user.firstName
lastName
user.lastName
4
Sao chép IdP metadata
Lưu app. Trên tab Sign On, nhấn View SAML setup instructions. Sao chép metadata URL, hoặc sao chép Identity Provider Single Sign-On URL, Identity Provider Issuer và X.509 Certificate.
5
Gán người dùng trong Okta
Trên tab Assignments của app, gán các người dùng hoặc nhóm cần dùng CloudThinker.
6
Hoàn tất trong CloudThinker
Nhấn Next để đến IdP Config. Import metadata URL, hoặc nhập Identity Provider Issuer vào IdP Entity ID, Identity Provider Single Sign-On URL vào SSO URL, và X.509 Certificate vào IdP Certificate. Nhấn Create Connection.
1
Tạo enterprise application
Trong Azure portal, vào Microsoft Entra ID → Enterprise applications → New application → Create your own application. Đặt tên CloudThinker, chọn Integrate any other application you don’t find in the gallery, và nhấn Create.
2
Thiết lập single sign-on
Mở app, vào Single sign-on → SAML, và sửa Basic SAML Configuration:
Trường Entra
Giá trị
Identifier (Entity ID)
SP Entity ID của CloudThinker
Reply URL (Assertion Consumer Service URL)
ACS URL của CloudThinker
Lưu.
3
Kiểm tra attributes và claims
Các claim mặc định của Entra (emailaddress, givenname, surname) dùng được ngay. Xác nhận emailaddress ánh xạ tới user.mail và người dùng của bạn đã có thuộc tính mail.Nếu một số người dùng không có thuộc tính mail (thường gặp với tài khoản chỉ trên cloud), hãy ánh xạ emailaddress tới user.userprincipalname. Cách này chỉ hoạt động khi mọi UPN đều thuộc tên miền đã xác minh.
4
Kiểm tra tùy chọn ký
Trong SAML Certificates, nhấn Edit và đặt Signing Option là Sign SAML assertion hoặc Sign SAML response and assertion. Chỉ Sign SAML response sẽ thất bại.
5
Sao chép federation metadata
Trong SAML Certificates, sao chép App Federation Metadata Url. Hoặc tải Certificate (Base64) và sao chép Login URL cùng Microsoft Entra Identifier.
6
Gán người dùng và hoàn tất trong CloudThinker
Gán người dùng hoặc nhóm trong Users and groups. Ở bước IdP Config của CloudThinker, Import metadata URL, hoặc nhập Entra Identifier vào IdP Entity ID, Login URL vào SSO URL, và chứng chỉ Base64 vào IdP Certificate. Nhấn Create Connection.
1
Tạo custom SAML app
Trong Google Admin console, vào Apps → Web and mobile apps → Add app → Add custom SAML app. Đặt tên CloudThinker và nhấn Continue.
2
Sao chép thông tin IdP của Google
Trên Google Identity Provider details, sao chép SSO URL, Entity ID và Certificate, hoặc tải metadata. Nhấn Continue.
3
Nhập thông tin SP của CloudThinker
Trường Google
Giá trị
ACS URL
ACS URL của CloudThinker
Entity ID
SP Entity ID của CloudThinker
Name ID format
EMAIL
Name ID
Basic Information > Primary email
Signed response
Không chọn. Google ký assertion theo mặc định.
Nhấn Continue.
4
Ánh xạ thuộc tính
Thuộc tính Google Directory
Thuộc tính app
Primary email
email
First name
firstName
Last name
lastName
Nhấn Finish. Sau đó đặt User access thành ON for everyone, hoặc bật cho các đơn vị tổ chức cần dùng CloudThinker.
5
Hoàn tất trong CloudThinker
Google cung cấp file metadata, không phải URL, mà Import chỉ nhận URL, nên hãy nhập giá trị thủ công. Ở bước IdP Config, nhập Entity ID của Google vào IdP Entity ID, SSO URL của Google vào SSO URL, và chứng chỉ vào IdP Certificate. Nhấn Create Connection.
1
Thêm custom SAML application
Trong AWS console, vào IAM Identity Center → Applications → Add application → I have an application I want to set up → SAML 2.0. Đặt tên CloudThinker.
2
Sao chép metadata IAM Identity Center
Trong IAM Identity Center metadata, sao chép URL file SAML metadata, hoặc sign-in URL, issuer URL và chứng chỉ.
3
Nhập application metadata
Trường IAM Identity Center
Giá trị
Application ACS URL
ACS URL của CloudThinker
Application SAML audience
SP Entity ID của CloudThinker
Nhấn Submit để tạo application.
4
Ánh xạ thuộc tính
Mở Actions → Edit attribute mappings và thêm:
Thuộc tính trong application
Ánh xạ tới
Định dạng
Subject
${user:email}
emailAddress
email
${user:email}
unspecified
firstName
${user:givenName}
unspecified
lastName
${user:familyName}
unspecified
5
Gán người dùng và hoàn tất trong CloudThinker
Gán người dùng hoặc nhóm cho app. Trong CloudThinker, Import metadata URL, hoặc nhập issuer URL vào IdP Entity ID, sign-in URL vào SSO URL, và chứng chỉ vào IdP Certificate. Nhấn Create Connection.
1
Thêm SAML custom connector
Trong OneLogin admin portal, vào Applications → Applications → Add App, tìm SAML Custom Connector (Advanced), đặt tên CloudThinker và lưu.
2
Cấu hình connector
Trên tab Configuration:
Trường OneLogin
Giá trị
Audience (EntityID)
SP Entity ID của CloudThinker
Recipient
ACS URL của CloudThinker
ACS (Consumer) URL
ACS URL của CloudThinker
ACS (Consumer) URL Validator
ACS URL dưới dạng regex với dấu chấm được escape. Với ACS URL https://api.example.com/api/v1/sso/saml/acs, nhập ^https://api\.example\.com/api/v1/sso/saml/acs$, dùng host từ ACS URL bạn đã sao chép
SAML signature element
Assertion hoặc Both
3
Thêm parameter
Trên tab Parameters, thêm email (Email), firstName (First Name) và lastName (Last Name), mỗi parameter đều chọn Include in SAML assertion.
4
Sao chép thông tin IdP
Trên tab SSO, sao chép Issuer URL, SAML 2.0 Endpoint (HTTP) và chứng chỉ X.509.
5
Gán người dùng và hoàn tất trong CloudThinker
Thêm người dùng trên tab Users. Trong CloudThinker, nhập Issuer URL vào IdP Entity ID, SAML 2.0 Endpoint vào SSO URL, và chứng chỉ vào IdP Certificate. Nhấn Create Connection.
1
Tạo SAML app trong provider
Đặt ACS URL của CloudThinker vào trường “Reply URL”, “ACS URL” hoặc “Recipient” của provider, và SP Entity ID vào trường “Audience” hoặc “Entity ID”. Gửi email người dùng làm NameID và làm thuộc tính email, cùng firstName và lastName. Ký assertion.
2
Điền IdP Config
Trường
Nhập gì
Display Name
Nhãn bất kỳ, ví dụ Company SSO
IdP Entity ID
Entity ID của provider, đôi khi gọi là “Issuer”
SSO URL
Endpoint single sign-on của provider
IdP Certificate
Chứng chỉ ký X.509, gồm cả dòng -----BEGIN CERTIFICATE----- và -----END CERTIFICATE-----
SLO URL (Optional)
Endpoint single logout của provider
Name ID Format
Email Address (mặc định). Các lựa chọn khác: Persistent, Transient, Unspecified. Với các lựa chọn này, IdP cũng phải gửi thuộc tính email.
Nhấn Create Connection.
Trạng thái thành công: hộp thoại hiển thị SSO Connection Created và kết nối ở trạng thái Active. Tiếp theo, chạy kiểm tra kết nối và đăng nhập thử theo Thiết lập single sign-on.
Người dùng nhập email trên trang đăng nhập CloudThinker và nhấn Continue with SSO. Mở CloudThinker từ app dashboard của IdP (đăng nhập do IdP khởi tạo) không được chấp nhận.
Bắt buộc assertion được ký
IdP phải ký SAML assertion. Chỉ ký response bên ngoài là không đủ.
Dung sai đồng hồ 120 giây
Assertion bị từ chối nếu đồng hồ của IdP và CloudThinker lệch nhau hơn hai phút.
Không hỗ trợ assertion mã hóa
CloudThinker không có khóa giải mã SP. Tắt mã hóa assertion trong IdP, nếu không đăng nhập sẽ thất bại.
AuthnRequest không được ký
CloudThinker không ký các request gửi đi. Nếu IdP yêu cầu AuthnRequest có chữ ký, hãy tắt yêu cầu đó cho app này.
Không có single logout
Đăng xuất khỏi CloudThinker chỉ kết thúc phiên CloudThinker. CloudThinker lưu SLO URL nhưng không gửi logout request tới IdP hay nhận chúng từ IdP.
Một chứng chỉ ký
Trường IdP Certificate chứa một chứng chỉ. Không có chứng chỉ phụ, nên hãy lên kế hoạch xoay vòng dưới dạng chuyển đổi tức thời. Xem Xoay vòng chứng chỉ IdP.
SP Metadata URL sau khi tạo
Một số IdP có thể import SP metadata URL. URL này xuất hiện trong Manage → Configuration khi kết nối đã tồn tại.
CloudThinker tạo tài khoản ở lần đăng nhập SSO đầu tiên của người đó, với Auto-assigned organization role (mặc định Viewer) và Auto-assigned workspaces bạn đã đặt.
Người đó có lời mời đang chờ
Vai trò và workspace của lời mời được áp dụng thay thế. Nếu organization không còn seat trống, đăng nhập thất bại với thông báo “This organization has reached its seat limit.”
Người đó đã có tài khoản CloudThinker cùng email
CloudThinker liên kết tài khoản đó với IdP. Không tạo bản trùng lặp.
Chế độ cấp phép là Manual và người đó không có tài khoản hay lời mời
Đăng nhập bị từ chối. Hãy mời họ trước.
Bạn muốn nhóm IdP quyết định quyền truy cập
Đăng nhập SAML chỉ đọc email và tên, không đọc nhóm. Dùng SCIM để ánh xạ nhóm với workspace.
Owner của organization được miễn Require SSO và vẫn có thể đăng nhập bằng mã email. Xem Nếu IdP không khả dụng để biết các bước và hộp thư cần thiết lập trước.
CloudThinker không cảnh báo trước khi chứng chỉ đã lưu hết hạn và không hiển thị ngày hết hạn. Hãy kiểm tra ngày đó trong IdP và tự đặt nhắc nhở.CloudThinker kiểm tra chữ ký với một chứng chỉ duy nhất, nên đăng nhập sẽ thất bại trong khoảng từ lúc IdP bắt đầu ký bằng chứng chỉ mới đến lúc bạn lưu nó trong CloudThinker. Hãy giữ khoảng gián đoạn này trong vòng một đến hai phút.
1
Chuẩn bị chứng chỉ mới trong IdP
Tạo hoặc tải lên chứng chỉ ký mới, nhưng chưa kích hoạt. Sao chép chứng chỉ, gồm cả dòng BEGIN và END.
2
Chuyển IdP sang chứng chỉ mới
Kích hoạt chứng chỉ mới cho app CloudThinker.
3
Lưu ngay trong CloudThinker
Mở Manage → Configuration trên thẻ Single sign-on, dán chứng chỉ vào IdP Certificate, và nhấn Save Changes.
4
Kiểm tra
Chạy kiểm tra kết nối từ Manage → Overview, rồi đăng nhập qua SSO trong cửa sổ riêng tư.Trạng thái thành công: kiểm tra đạt Certificate Valid và lần đăng nhập đưa bạn vào CloudThinker.
Nếu có sự cố, Owner vẫn có thể đăng nhập bằng mã email và sửa chứng chỉ.
ACS URL trong IdP phải khớp chính xác với ACS URL của CloudThinker, gồm cả https:// và không có dấu gạch chéo ở cuối. Sao chép lại từ bước SP Metadata hoặc từ Manage → Configuration.
'Audience mismatch' hoặc 'Entity ID mismatch'
Audience hoặc entity ID trong IdP phải khớp chính xác với SP Entity ID của CloudThinker. Phép so sánh phân biệt chữ hoa chữ thường.
Kiểm tra kết nối thất bại ở Certificate Valid
Dán toàn bộ chứng chỉ, gồm cả dòng BEGIN và END, không có ký tự thừa. Nếu IdP đã xoay vòng chứng chỉ, dán chứng chỉ mới vào Manage → Configuration và nhấn Save Changes. Để tránh lặp lại, hãy làm theo Xoay vòng chứng chỉ IdP.
Đăng nhập được từ CloudThinker nhưng không được từ dashboard IdP
Đây là hành vi mong đợi. Đăng nhập do IdP khởi tạo đã bị tắt. Hãy yêu cầu người dùng bắt đầu từ trang đăng nhập CloudThinker.
'SSO authentication failed. Please try again or contact your administrator.'
CloudThinker hiển thị cùng một thông báo này cho mọi SAML response bị từ chối, nên hãy kiểm tra lần lượt:
Assertion không được ký: IdP chỉ ký response. Bật ký assertion (xem tab provider của bạn ở trên).
Assertion bị mã hóa: tắt mã hóa assertion cho app CloudThinker.
Sai chứng chỉ: dán chứng chỉ ký hiện tại của IdP vào Manage → Configuration.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CloudThinker","colors":{"primary":"#0c93c0","light":"#2897c1","dark":"#0c93c0"},"logo":{"light":"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/light.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=a56a571509d1cd246f5b0e68db015e5f","dark":"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/dark.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=4252f33496bbaa527e5408338963a31e"},"favicon":"https://mintcdn.com/cloudthinker/PoYnb4baZ54aMMQW/favicon.ico?fit=max\u0026auto=format\u0026n=PoYnb4baZ54aMMQW\u0026q=85\u0026s=6570e99ed2a763d9632c8f933fe9c164","background":{"color":{"light":"#eef0f3","dark":"#000000"}},"navbar":{"links":[{"href":"https://discord.com/invite/sRBWRWtaNR","label":"Community"},{"href":"https://cloudthinker.io/blogs","label":"Blog"},{"href":"https://cloudthinker.io/contact","label":"Contact us"}],"primary":{"type":"button","label":"Open app","href":"https://app.cloudthinker.io"}},"footer":{"socials":{"x":"https://x.com/cloudthinkerio?s=21","linkedin":"https://www.linkedin.com/company/cloud-thinker","github":"https://github.com/cloudthinker-ai","discord":"https://discord.com/invite/sRBWRWtaNR","youtube":"https://www.youtube.com/@cloudthinkerai"}},"seo":{"indexing":"navigable"},"fonts":{"family":"Poppins"},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"metadata":{"timestamp":false},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":""},{"language":"vi","href":"vi"},{"language":"ja","href":"ja"},{"language":"ko","href":"ko"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cloudthinker","hasAudioNarration":false,"actualSubdomain":"cloudthinker","customDomains":["docs.cloudthinker.io"],"gitSource":{"type":"github","owner":"nhat-tranvan","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae15a4fd86e510dddaf7235","collectionId":"4bee09ef-014a-46f1-a560-f2d4cfb62382","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae15a4fd86e510dddaf7235"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{},"buildId":"6ae15a4fd86e510dddaf7235","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"vi","tag":"Nền tảng","count":131},{"language":"vi","tag":"Kết nối","count":101},{"language":"default","tag":"Platform","count":67},{"language":"en","tag":"Platform","count":63},{"language":"ja","tag":"プラットフォーム","count":63},{"language":"ko","tag":"플랫폼","count":63},{"language":"vi","tag":"Sản phẩm","count":55},{"language":"default","tag":"Connections","count":52},{"language":"en","tag":"Connections","count":49},{"language":"ja","tag":"接続","count":48},{"language":"ko","tag":"연결","count":48},{"language":"vi","tag":"Tài nguyên","count":39},{"language":"vi","tag":"Học","count":30},{"language":"en","tag":"Products","count":29},{"language":"ja","tag":"プロダクト","count":29},{"language":"ko","tag":"제품","count":29},{"language":"default","tag":"Products","count":26},{"language":"default","tag":"Resources","count":26},{"language":"vi","tag":"Bắt đầu","count":26},{"language":"vi","tag":"Observability \u0026 Monitoring","count":24},{"language":"vi","tag":"Resolve","count":20},{"language":"default","tag":"Learn","count":18},{"language":"default","tag":"Agentic Infrastructure Operations - Engineer Edition","count":18},{"language":"vi","tag":"Agentic Infrastructure Operations - Engineer Edition","count":18},{"language":"vi","tag":"Databases","count":16},{"language":"en","tag":"Get started","count":15},{"language":"ja","tag":"はじめに","count":15},{"language":"ko","tag":"시작하기","count":15},{"language":"en","tag":"Resources","count":13},{"language":"ja","tag":"リソース","count":13},{"language":"ko","tag":"리소스","count":13},{"language":"en","tag":"Monitoring","count":12},{"language":"en","tag":"Learn","count":12},{"language":"en","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"ja","tag":"Observability \u0026 Monitoring","count":12},{"language":"ja","tag":"学ぶ","count":12},{"language":"ja","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"ko","tag":"Observability \u0026 Monitoring","count":12},{"language":"ko","tag":"배우기","count":12},{"language":"ko","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"default","tag":"Get started","count":11},{"language":"en","tag":"Resolve","count":11},{"language":"ja","tag":"Resolve","count":11},{"language":"ko","tag":"Resolve","count":11},{"language":"default","tag":"Resolve","count":9},{"language":"en","tag":"Enterprise","count":9},{"language":"ja","tag":"Databases","count":8},{"language":"ko","tag":"Databases","count":8},{"language":"default","tag":"Review","count":6},{"language":"default","tag":"Set up","count":6}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":".ct-landing a,a.ct-featured{text-decoration:none!important}a.ct-featured{display:block;margin:1.25rem 0 1rem;padding:1.75rem 1.75rem 1.5rem;border:1px solid rgba(12,147,192,.45)!important;border-radius:16px;background:radial-gradient(120% 160% at 0 0,rgba(12,147,192,.14),transparent 55%),#fff;box-shadow:0 12px 32px -16px rgba(12,147,192,.45);transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease}a.ct-featured:hover{border-color:#0c93c0!important;transform:translateY(-1px);box-shadow:0 16px 40px -16px rgba(12,147,192,.6)}.dark a.ct-featured{border-color:rgba(40,151,193,.45)!important;background:radial-gradient(120% 160% at 0 0,rgba(40,151,193,.16),transparent 55%),#05070a;box-shadow:0 12px 32px -16px rgba(40,151,193,.35)}.dark a.ct-featured:hover{border-color:#2897c1!important}.ct-featured-head{display:flex;align-items:center;gap:.75rem;margin-bottom:.875rem}.ct-featured-icon{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:999px;background:rgba(12,147,192,.12);color:#0a7aa0}.dark .ct-featured-icon{background:rgba(40,151,193,.14);color:#5bb8e0}.ct-eyebrow{font-size:.75rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#0a7aa0}.dark .ct-eyebrow{color:#5bb8e0}.ct-hero h1,.ct-title{font-weight:600;color:#0b1a2b}.ct-title{font-size:1.375rem;line-height:1.3}.dark .ct-card .ct-card-head span,.dark .ct-card h3,.dark .ct-hero h1,.dark .ct-section>h2,.dark .ct-step h3,.dark .ct-title{color:#f5f5f7}.ct-body{margin:.5rem 0 0!important;font-weight:400!important;font-size:1rem;max-width:46rem;color:#5b6577;line-height:1.6}.dark .ct-body,.dark .ct-hero .ct-promise,.dark .ct-hero p.ct-lead,.dark .ct-section>p.ct-section-lead{color:#a1a1a6}.ct-cta{display:inline-block;margin-top:1rem;font-weight:600;color:#0a7aa0}.dark .ct-cta{color:#5bb8e0}.ct-illustration{margin:1.5rem 0}.ct-illustration img{max-width:720px;margin:0 auto}.ct-iso-scene{margin:1.5rem 0 2rem;border:1px solid rgba(12,147,192,.18);border-radius:16px;background:#fff;overflow:hidden}.dark .ct-iso-scene{border-color:rgba(40,151,193,.22);background:#000}.ct-illustration img,.ct-iso-scene .ct-iso-svg{display:block;width:100%;height:auto}.ct-landing{max-width:1120px;margin:0 auto;padding:3rem 1.5rem 5rem}.ct-landing a{border-bottom-width:0}.ct-kicker{font-size:.8125rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#0c93c0}.dark .ct-card .ct-tagline,.dark .ct-hero .ct-promise strong,.dark .ct-kicker{color:#2897c1}.ct-hero{text-align:center;padding:1.5rem 0 1rem}.ct-hero h1{margin:.75rem 0 0;font-size:clamp(2.25rem,5vw,3.75rem);line-height:1.05;letter-spacing:-.03em;-webkit-text-fill-color:currentColor;background:0 0}.ct-hero .ct-promise{margin:1rem auto 0;font-size:clamp(1.125rem,2.2vw,1.5rem);color:#5b6577}.ct-hero .ct-promise strong,.ct-section>h2{color:#0c93c0;font-weight:600}.ct-hero p.ct-lead{max-width:44rem;margin:1rem auto 0;font-size:1.0625rem;line-height:1.65;color:#5b6577}.ct-actions{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center;margin-top:1.75rem}.ct-btn{display:inline-flex;align-items:center;gap:.5rem;padding:.7rem 1.25rem;border-radius:999px;font-weight:600;font-size:.95rem;transition:transform .15s ease,background .15s ease}.ct-btn:hover{transform:translateY(-1px)}.ct-btn-primary{background:#0c93c0;color:#fff!important}.ct-btn-primary:hover{background:#0a7aa0}.ct-btn-ghost{border:1px solid rgba(12,147,192,.35)!important;color:#0b1a2b!important}.dark .ct-btn-ghost{color:#f5f5f7!important;border-color:rgba(40,151,193,.4)!important}.ct-landing .ct-iso-scene{margin-top:2.5rem}.ct-section{margin-top:4.5rem}.ct-section>h2{margin:.4rem 0 0;font-size:1.75rem;letter-spacing:-.02em;color:#0b1a2b;-webkit-text-fill-color:currentColor;background:0 0}.ct-section>p.ct-section-lead{margin:.5rem 0 0;color:#5b6577;max-width:46rem}.ct-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-top:1.5rem}.ct-step{display:block;padding:1.25rem;border-radius:14px;border:1px solid rgba(12,147,192,.18)!important;background:#fff;transition:border-color .15s ease,transform .15s ease}.dark .ct-step{background:#05070a;border-color:rgba(40,151,193,.22)!important}.ct-step:hover{border-color:#0c93c0!important;transform:translateY(-1px)}.ct-step-num{display:inline-flex;width:1.75rem;height:1.75rem;border-radius:999px;align-items:center;justify-content:center;font-size:.85rem;font-weight:700;color:#fff;background:#0c93c0}.ct-card h3,.ct-step h3{margin:.75rem 0 .25rem;font-size:1.05rem}.ct-card p,.ct-step p{margin:0;font-size:.925rem;line-height:1.55;color:#5b6577}.dark .ct-card p,.dark .ct-landing td,.dark .ct-step p{color:#a1a1a6}.ct-grid{display:grid;gap:1rem;margin-top:1.5rem}.ct-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ct-grid-5{grid-template-columns:repeat(5,minmax(0,1fr))}.ct-card{display:flex;flex-direction:column;padding:1.25rem;border-radius:14px;border:1px solid rgba(12,147,192,.18);background:#fff}.dark .ct-card{background:#05070a;border-color:rgba(40,151,193,.22)}.ct-card .ct-card-head{display:flex;align-items:center;gap:.6rem}.ct-card .ct-card-head span,.ct-card h3,.ct-step h3{font-weight:600;color:#0b1a2b}.ct-card .ct-tagline{margin-top:.75rem;font-size:1.05rem;font-weight:600;line-height:1.35;color:#0c93c0}.ct-card .ct-links{margin-top:auto;padding-top:1rem;display:flex;gap:1rem;font-size:.9rem;font-weight:600}.ct-card .ct-links a{color:#0c93c0!important}.dark .ct-card .ct-links a,.dark .ct-card-head .ct-arrow,.dark .ct-landing td a{color:#2897c1!important}a.ct-card{transition:border-color .15s ease,transform .15s ease}a.ct-card:hover{border-color:#0c93c0!important;transform:translateY(-1px)}.ct-strip{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.25rem}.ct-strip a{display:inline-flex;align-items:center;gap:.45rem;padding:.55rem .95rem;border-radius:999px;border:1px solid rgba(12,147,192,.25)!important;font-size:.9rem;font-weight:500;color:#0b1a2b!important}.dark .ct-strip a{color:#f5f5f7!important;border-color:rgba(40,151,193,.3)!important}.ct-strip a:hover{border-color:#0c93c0!important}@media (max-width:900px){.ct-grid-3,.ct-grid-5,.ct-steps{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.ct-landing{padding:2rem 1rem 4rem}.ct-grid-3,.ct-grid-5,.ct-steps{grid-template-columns:minmax(0,1fr)}}.ct-landing table{width:100%;margin-top:1.25rem;border-collapse:collapse;font-size:.925rem}.ct-landing th{text-align:left;font-weight:600;padding:.7rem .9rem;border-bottom:1px solid rgba(12,147,192,.3)}.ct-landing td{vertical-align:top;padding:.8rem .9rem;border-bottom:1px solid rgba(12,147,192,.12);color:#5b6577;line-height:1.55}.ct-landing td:first-child{font-weight:600;color:#0b1a2b;width:22%}.dark .ct-landing td:first-child{color:#f5f5f7}.ct-landing td a{color:#0c93c0!important;font-weight:600}.ct-product{padding:1.1rem 1.2rem}.ct-product .ct-tagline{margin-top:.55rem;font-size:1rem}.ct-product p{margin-top:.3rem}.ct-card-head .ct-arrow{margin-left:auto;font-weight:500!important;color:#0c93c0!important;transition:transform .15s ease}a.ct-product:hover .ct-arrow{transform:translateX(3px)}html:not(.dark) .ct-card,html:not(.dark) .ct-iso-scene,html:not(.dark) .ct-step{background:#f6f7f9}html:not(.dark) .ct-iso-scene{border-color:rgba(12,147,192,.12)}html:not(.dark) #content-area,html:not(.dark) .prose,html:not(.dark) body{color:#2b3240}html:not(.dark) .prose :where(h1, h2, h3, h4, strong){color:#1c2230}html:not(.dark) .ct-card .ct-card-head span,html:not(.dark) .ct-card h3,html:not(.dark) .ct-hero h1,html:not(.dark) .ct-section>h2,html:not(.dark) .ct-step h3{color:#1c2230}"}],"page":{"pagePath":"vi/guide/security/sso-saml","slug":"/vi/guide/security/sso-saml","pageMetadata":{"title":"Thiết lập SAML SSO","description":"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.","icon":"shield","href":"/vi/guide/security/sso-saml"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Step,Steps,Tab,Table,Tabs,Tip}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`SAML 2.0 là chuẩn đăng nhập một lần (single sign-on) dựa trên XML mà hầu hết identity provider (IdP) doanh nghiệp hỗ trợ. Bạn trao đổi hai bộ giá trị: thông tin service provider (SP) của CloudThinker đưa vào IdP, và thông tin của IdP đưa ngược lại vào CloudThinker.`}),`\n`,_jsx(Heading,{level:`2`,id:`điều-kiện-tiên-quyết`,children:`Điều kiện tiên quyết`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Organization dùng gói `,_jsx(_components.strong,{children:`Scale`}),`, `,_jsx(_components.strong,{children:`Scale Plus`}),` hoặc `,_jsx(_components.strong,{children:`Enterprise`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Vai trò `,_jsx(_components.strong,{children:`Owner`}),` của organization và một tên miền email đã xác minh. Xem `,_jsx(_components.a,{href:`/vi/guide/security/sso`,children:`Thiết lập single sign-on`}),`.`]}),`\n`,_jsx(_components.li,{children:`Quyền admin trên identity provider của bạn.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`những-gì-cần-trao-đổi`,children:`Những gì cần trao đổi`}),`\n`,_jsxs(_components.p,{children:[`Trình hướng dẫn tại `,_jsx(_components.strong,{children:`Admin Settings → Identity and access → Setup SSO → SAML 2.0`}),` có ba bước: `,_jsx(_components.strong,{children:`Protocol`}),`, `,_jsx(_components.strong,{children:`SP Metadata`}),` và `,_jsx(_components.strong,{children:`IdP Config`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Chiều`}),_jsx(_components.th,{children:`Giá trị`}),_jsx(_components.th,{children:`Nơi tìm`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`CloudThinker → IdP của bạn`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL (Assertion Consumer Service)`}),`, kết thúc bằng `,_jsx(_components.code,{children:`/api/v1/sso/saml/acs`}),`, và `,_jsx(_components.strong,{children:`SP Entity ID`}),`, kết thúc bằng `,_jsx(_components.code,{children:`/api/v1/sso/saml/metadata`})]}),_jsxs(_components.td,{children:[`Bước `,_jsx(_components.strong,{children:`SP Metadata`}),`, mỗi giá trị có nút sao chép. Cả hai giống nhau cho mọi kết nối, nên bạn có thể sao chép trước khi nhập bất kỳ giá trị IdP nào và gửi cho admin IdP.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`IdP của bạn → CloudThinker`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`IdP Entity ID`}),`, `,_jsx(_components.strong,{children:`SSO URL`}),`, `,_jsx(_components.strong,{children:`IdP Certificate`})]}),_jsxs(_components.td,{children:[`SAML app trong IdP, hoặc metadata URL của nó. `,_jsx(_components.strong,{children:`Import`}),` chỉ nhận URL; không hỗ trợ tải file lên hay dán XML.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Thuộc tính IdP gửi`}),_jsx(_components.td,{children:`Email (bắt buộc), tên, họ`}),_jsx(_components.td,{children:`Ánh xạ thuộc tính trong IdP`})]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Ở bước `,_jsx(_components.strong,{children:`IdP Config`}),`, dán metadata URL của IdP vào trường phía trên và nhấn `,_jsx(_components.strong,{children:`Import`}),`. CloudThinker điền `,_jsx(_components.strong,{children:`IdP Entity ID`}),`, `,_jsx(_components.strong,{children:`SSO URL`}),` và `,_jsx(_components.strong,{children:`IdP Certificate`}),`, cùng `,_jsx(_components.strong,{children:`SLO URL`}),` và `,_jsx(_components.strong,{children:`Name ID Format`}),` nếu metadata có chúng.`]})}),`\n`,_jsxs(_components.p,{children:[`CloudThinker đọc email người dùng từ claim `,_jsx(_components.code,{children:`email`}),`, `,_jsx(_components.code,{children:`mail`}),`, `,_jsx(_components.code,{children:`emailAddress`}),` hoặc `,_jsx(_components.code,{children:`emailaddress`}),` của Microsoft, và dùng NameID nếu NameID là email. Nếu NameID không phải email (ví dụ `,_jsx(_components.strong,{children:`Persistent`}),` hoặc `,_jsx(_components.strong,{children:`Transient`}),`), bạn phải gửi thuộc tính email, nếu không đăng nhập sẽ thất bại. Tên và họ lấy từ `,_jsx(_components.code,{children:`firstName`}),`/`,_jsx(_components.code,{children:`givenName`}),` và `,_jsx(_components.code,{children:`lastName`}),`/`,_jsx(_components.code,{children:`surname`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`cấu-hình-provider`,children:`Cấu hình provider`}),`\n`,_jsxs(_components.p,{children:[`Bắt đầu trình hướng dẫn, chọn `,_jsx(_components.strong,{children:`SAML 2.0`}),`, nhấn `,_jsx(_components.strong,{children:`Next`}),`, và giữ bước `,_jsx(_components.strong,{children:`SP Metadata`}),` mở trong lúc làm việc trên IdP. Mọi provider cũng cần `,_jsx(_components.strong,{children:`Display Name`}),` ở bước `,_jsx(_components.strong,{children:`IdP Config`}),`; nhãn nào cũng được, ví dụ `,_jsx(_components.code,{children:`Company SSO`}),`.`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Okta`,id:`okta`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Tạo SAML app integration`,children:_jsxs(_components.p,{children:[`Trong Okta Admin Console, vào `,_jsx(_components.strong,{children:`Applications → Applications → Create App Integration → SAML 2.0`}),`. Đặt tên `,_jsx(_components.strong,{children:`CloudThinker`}),`.`]})}),_jsx(Step,{title:`Cấu hình SAML`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trường Okta`}),_jsx(_components.th,{children:`Giá trị`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Single sign-on URL`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Audience URI (SP Entity ID)`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`SP Entity ID`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Name ID format`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`EmailAddress`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Application username`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Email`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Assertion Signature`}),` (trong `,_jsx(_components.strong,{children:`Show Advanced Settings`}),`)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Signed`})})]})]})]})}),_jsx(Step,{title:`Thêm attribute statement`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`email`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user.email`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`firstName`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user.firstName`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lastName`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user.lastName`})})]})]})]})}),_jsx(Step,{title:`Sao chép IdP metadata`,children:_jsxs(_components.p,{children:[`Lưu app. Trên tab `,_jsx(_components.strong,{children:`Sign On`}),`, nhấn `,_jsx(_components.strong,{children:`View SAML setup instructions`}),`. Sao chép metadata URL, hoặc sao chép `,_jsx(_components.strong,{children:`Identity Provider Single Sign-On URL`}),`, `,_jsx(_components.strong,{children:`Identity Provider Issuer`}),` và `,_jsx(_components.strong,{children:`X.509 Certificate`}),`.`]})}),_jsx(Step,{title:`Gán người dùng trong Okta`,children:_jsxs(_components.p,{children:[`Trên tab `,_jsx(_components.strong,{children:`Assignments`}),` của app, gán các người dùng hoặc nhóm cần dùng CloudThinker.`]})}),_jsx(Step,{title:`Hoàn tất trong CloudThinker`,children:_jsxs(_components.p,{children:[`Nhấn `,_jsx(_components.strong,{children:`Next`}),` để đến `,_jsx(_components.strong,{children:`IdP Config`}),`. `,_jsx(_components.strong,{children:`Import`}),` metadata URL, hoặc nhập `,_jsx(_components.strong,{children:`Identity Provider Issuer`}),` vào `,_jsx(_components.strong,{children:`IdP Entity ID`}),`, `,_jsx(_components.strong,{children:`Identity Provider Single Sign-On URL`}),` vào `,_jsx(_components.strong,{children:`SSO URL`}),`, và `,_jsx(_components.strong,{children:`X.509 Certificate`}),` vào `,_jsx(_components.strong,{children:`IdP Certificate`}),`. Nhấn `,_jsx(_components.strong,{children:`Create Connection`}),`.`]})})]})}),_jsx(Tab,{title:`Microsoft Entra ID`,id:`microsoft-entra-id`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Tạo enterprise application`,children:_jsxs(_components.p,{children:[`Trong `,_jsx(_components.a,{href:`https://portal.azure.com`,children:`Azure portal`}),`, vào `,_jsx(_components.strong,{children:`Microsoft Entra ID → Enterprise applications → New application → Create your own application`}),`. Đặt tên `,_jsx(_components.strong,{children:`CloudThinker`}),`, chọn `,_jsx(_components.strong,{children:`Integrate any other application you don’t find in the gallery`}),`, và nhấn `,_jsx(_components.strong,{children:`Create`}),`.`]})}),_jsxs(Step,{title:`Thiết lập single sign-on`,children:[_jsxs(_components.p,{children:[`Mở app, vào `,_jsx(_components.strong,{children:`Single sign-on → SAML`}),`, và sửa `,_jsx(_components.strong,{children:`Basic SAML Configuration`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trường Entra`}),_jsx(_components.th,{children:`Giá trị`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Identifier (Entity ID)`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`SP Entity ID`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Reply URL (Assertion Consumer Service URL)`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker`]})]})]})]}),_jsx(_components.p,{children:`Lưu.`})]}),_jsxs(Step,{title:`Kiểm tra attributes và claims`,children:[_jsxs(_components.p,{children:[`Các claim mặc định của Entra (`,_jsx(_components.code,{children:`emailaddress`}),`, `,_jsx(_components.code,{children:`givenname`}),`, `,_jsx(_components.code,{children:`surname`}),`) dùng được ngay. Xác nhận `,_jsx(_components.code,{children:`emailaddress`}),` ánh xạ tới `,_jsx(_components.code,{children:`user.mail`}),` và người dùng của bạn đã có thuộc tính mail.`]}),_jsxs(_components.p,{children:[`Nếu một số người dùng không có thuộc tính mail (thường gặp với tài khoản chỉ trên cloud), hãy ánh xạ `,_jsx(_components.code,{children:`emailaddress`}),` tới `,_jsx(_components.code,{children:`user.userprincipalname`}),`. Cách này chỉ hoạt động khi mọi UPN đều thuộc tên miền đã xác minh.`]})]}),_jsx(Step,{title:`Kiểm tra tùy chọn ký`,children:_jsxs(_components.p,{children:[`Trong `,_jsx(_components.strong,{children:`SAML Certificates`}),`, nhấn `,_jsx(_components.strong,{children:`Edit`}),` và đặt `,_jsx(_components.strong,{children:`Signing Option`}),` là `,_jsx(_components.strong,{children:`Sign SAML assertion`}),` hoặc `,_jsx(_components.strong,{children:`Sign SAML response and assertion`}),`. Chỉ `,_jsx(_components.strong,{children:`Sign SAML response`}),` sẽ thất bại.`]})}),_jsx(Step,{title:`Sao chép federation metadata`,children:_jsxs(_components.p,{children:[`Trong `,_jsx(_components.strong,{children:`SAML Certificates`}),`, sao chép `,_jsx(_components.strong,{children:`App Federation Metadata Url`}),`. Hoặc tải `,_jsx(_components.strong,{children:`Certificate (Base64)`}),` và sao chép `,_jsx(_components.strong,{children:`Login URL`}),` cùng `,_jsx(_components.strong,{children:`Microsoft Entra Identifier`}),`.`]})}),_jsx(Step,{title:`Gán người dùng và hoàn tất trong CloudThinker`,children:_jsxs(_components.p,{children:[`Gán người dùng hoặc nhóm trong `,_jsx(_components.strong,{children:`Users and groups`}),`. Ở bước `,_jsx(_components.strong,{children:`IdP Config`}),` của CloudThinker, `,_jsx(_components.strong,{children:`Import`}),` metadata URL, hoặc nhập Entra Identifier vào `,_jsx(_components.strong,{children:`IdP Entity ID`}),`, Login URL vào `,_jsx(_components.strong,{children:`SSO URL`}),`, và chứng chỉ Base64 vào `,_jsx(_components.strong,{children:`IdP Certificate`}),`. Nhấn `,_jsx(_components.strong,{children:`Create Connection`}),`.`]})})]})}),_jsx(Tab,{title:`Google Workspace`,id:`google-workspace`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Tạo custom SAML app`,children:_jsxs(_components.p,{children:[`Trong `,_jsx(_components.a,{href:`https://admin.google.com`,children:`Google Admin console`}),`, vào `,_jsx(_components.strong,{children:`Apps → Web and mobile apps → Add app → Add custom SAML app`}),`. Đặt tên `,_jsx(_components.strong,{children:`CloudThinker`}),` và nhấn `,_jsx(_components.strong,{children:`Continue`}),`.`]})}),_jsx(Step,{title:`Sao chép thông tin IdP của Google`,children:_jsxs(_components.p,{children:[`Trên `,_jsx(_components.strong,{children:`Google Identity Provider details`}),`, sao chép `,_jsx(_components.strong,{children:`SSO URL`}),`, `,_jsx(_components.strong,{children:`Entity ID`}),` và `,_jsx(_components.strong,{children:`Certificate`}),`, hoặc tải metadata. Nhấn `,_jsx(_components.strong,{children:`Continue`}),`.`]})}),_jsxs(Step,{title:`Nhập thông tin SP của CloudThinker`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trường Google`}),_jsx(_components.th,{children:`Giá trị`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`ACS URL`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Entity ID`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`SP Entity ID`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Name ID format`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`EMAIL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Name ID`})}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Basic Information > Primary email`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Signed response`})}),_jsx(_components.td,{children:`Không chọn. Google ký assertion theo mặc định.`})]})]})]}),_jsxs(_components.p,{children:[`Nhấn `,_jsx(_components.strong,{children:`Continue`}),`.`]})]}),_jsxs(Step,{title:`Ánh xạ thuộc tính`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Thuộc tính Google Directory`}),_jsx(_components.th,{children:`Thuộc tính app`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Primary email`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`email`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`First name`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`firstName`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Last name`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`lastName`})})]})]})]}),_jsxs(_components.p,{children:[`Nhấn `,_jsx(_components.strong,{children:`Finish`}),`. Sau đó đặt `,_jsx(_components.strong,{children:`User access`}),` thành `,_jsx(_components.strong,{children:`ON for everyone`}),`, hoặc bật cho các đơn vị tổ chức cần dùng CloudThinker.`]})]}),_jsx(Step,{title:`Hoàn tất trong CloudThinker`,children:_jsxs(_components.p,{children:[`Google cung cấp file metadata, không phải URL, mà `,_jsx(_components.strong,{children:`Import`}),` chỉ nhận URL, nên hãy nhập giá trị thủ công. Ở bước `,_jsx(_components.strong,{children:`IdP Config`}),`, nhập `,_jsx(_components.strong,{children:`Entity ID`}),` của Google vào `,_jsx(_components.strong,{children:`IdP Entity ID`}),`, `,_jsx(_components.strong,{children:`SSO URL`}),` của Google vào `,_jsx(_components.strong,{children:`SSO URL`}),`, và chứng chỉ vào `,_jsx(_components.strong,{children:`IdP Certificate`}),`. Nhấn `,_jsx(_components.strong,{children:`Create Connection`}),`.`]})})]})}),_jsx(Tab,{title:`AWS IAM Identity Center`,id:`aws-iam-identity-center`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Thêm custom SAML application`,children:_jsxs(_components.p,{children:[`Trong AWS console, vào `,_jsx(_components.strong,{children:`IAM Identity Center → Applications → Add application → I have an application I want to set up → SAML 2.0`}),`. Đặt tên `,_jsx(_components.strong,{children:`CloudThinker`}),`.`]})}),_jsx(Step,{title:`Sao chép metadata IAM Identity Center`,children:_jsxs(_components.p,{children:[`Trong `,_jsx(_components.strong,{children:`IAM Identity Center metadata`}),`, sao chép URL file SAML metadata, hoặc sign-in URL, issuer URL và chứng chỉ.`]})}),_jsxs(Step,{title:`Nhập application metadata`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trường IAM Identity Center`}),_jsx(_components.th,{children:`Giá trị`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Application ACS URL`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Application SAML audience`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`SP Entity ID`}),` của CloudThinker`]})]})]})]}),_jsx(_components.p,{children:`Nhấn Submit để tạo application.`})]}),_jsxs(Step,{title:`Ánh xạ thuộc tính`,children:[_jsxs(_components.p,{children:[`Mở `,_jsx(_components.strong,{children:`Actions → Edit attribute mappings`}),` và thêm:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Thuộc tính trong application`}),_jsx(_components.th,{children:`Ánh xạ tới`}),_jsx(_components.th,{children:`Định dạng`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Subject`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:\"${user:email}\"})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`emailAddress`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`email`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:\"${user:email}\"})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unspecified`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`firstName`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:\"${user:givenName}\"})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unspecified`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lastName`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:\"${user:familyName}\"})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`unspecified`})})]})]})]})]}),_jsx(Step,{title:`Gán người dùng và hoàn tất trong CloudThinker`,children:_jsxs(_components.p,{children:[`Gán người dùng hoặc nhóm cho app. Trong CloudThinker, `,_jsx(_components.strong,{children:`Import`}),` metadata URL, hoặc nhập issuer URL vào `,_jsx(_components.strong,{children:`IdP Entity ID`}),`, sign-in URL vào `,_jsx(_components.strong,{children:`SSO URL`}),`, và chứng chỉ vào `,_jsx(_components.strong,{children:`IdP Certificate`}),`. Nhấn `,_jsx(_components.strong,{children:`Create Connection`}),`.`]})})]})}),_jsx(Tab,{title:`OneLogin`,id:`onelogin`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Thêm SAML custom connector`,children:_jsxs(_components.p,{children:[`Trong OneLogin admin portal, vào `,_jsx(_components.strong,{children:`Applications → Applications → Add App`}),`, tìm `,_jsx(_components.strong,{children:`SAML Custom Connector (Advanced)`}),`, đặt tên `,_jsx(_components.strong,{children:`CloudThinker`}),` và lưu.`]})}),_jsxs(Step,{title:`Cấu hình connector`,children:[_jsxs(_components.p,{children:[`Trên tab `,_jsx(_components.strong,{children:`Configuration`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trường OneLogin`}),_jsx(_components.th,{children:`Giá trị`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Audience (EntityID)`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`SP Entity ID`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Recipient`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`ACS (Consumer) URL`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`ACS (Consumer) URL Validator`})}),_jsxs(_components.td,{children:[`ACS URL dưới dạng regex với dấu chấm được escape. Với ACS URL `,_jsx(_components.code,{children:`https://api.example.com/api/v1/sso/saml/acs`}),`, nhập `,_jsx(_components.code,{children:`^https://api\\\\.example\\\\.com/api/v1/sso/saml/acs$`}),`, dùng host từ ACS URL bạn đã sao chép`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`SAML signature element`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`Assertion`}),` hoặc `,_jsx(_components.code,{children:`Both`})]})]})]})]})]}),_jsx(Step,{title:`Thêm parameter`,children:_jsxs(_components.p,{children:[`Trên tab `,_jsx(_components.strong,{children:`Parameters`}),`, thêm `,_jsx(_components.code,{children:`email`}),` (Email), `,_jsx(_components.code,{children:`firstName`}),` (First Name) và `,_jsx(_components.code,{children:`lastName`}),` (Last Name), mỗi parameter đều chọn `,_jsx(_components.strong,{children:`Include in SAML assertion`}),`.`]})}),_jsx(Step,{title:`Sao chép thông tin IdP`,children:_jsxs(_components.p,{children:[`Trên tab `,_jsx(_components.strong,{children:`SSO`}),`, sao chép `,_jsx(_components.strong,{children:`Issuer URL`}),`, `,_jsx(_components.strong,{children:`SAML 2.0 Endpoint (HTTP)`}),` và chứng chỉ X.509.`]})}),_jsx(Step,{title:`Gán người dùng và hoàn tất trong CloudThinker`,children:_jsxs(_components.p,{children:[`Thêm người dùng trên tab `,_jsx(_components.strong,{children:`Users`}),`. Trong CloudThinker, nhập Issuer URL vào `,_jsx(_components.strong,{children:`IdP Entity ID`}),`, SAML 2.0 Endpoint vào `,_jsx(_components.strong,{children:`SSO URL`}),`, và chứng chỉ vào `,_jsx(_components.strong,{children:`IdP Certificate`}),`. Nhấn `,_jsx(_components.strong,{children:`Create Connection`}),`.`]})})]})}),_jsx(Tab,{title:`Provider SAML 2.0 khác`,id:`provider-saml-2-0-kh%C3%A1c`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Tạo SAML app trong provider`,children:_jsxs(_components.p,{children:[`Đặt `,_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker vào trường “Reply URL”, “ACS URL” hoặc “Recipient” của provider, và `,_jsx(_components.strong,{children:`SP Entity ID`}),` vào trường “Audience” hoặc “Entity ID”. Gửi email người dùng làm NameID và làm thuộc tính `,_jsx(_components.code,{children:`email`}),`, cùng `,_jsx(_components.code,{children:`firstName`}),` và `,_jsx(_components.code,{children:`lastName`}),`. Ký assertion.`]})}),_jsxs(Step,{title:`Điền IdP Config`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Trường`}),_jsx(_components.th,{children:`Nhập gì`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Display Name`})}),_jsxs(_components.td,{children:[`Nhãn bất kỳ, ví dụ `,_jsx(_components.code,{children:`Company SSO`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`IdP Entity ID`})}),_jsx(_components.td,{children:`Entity ID của provider, đôi khi gọi là “Issuer”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`SSO URL`})}),_jsx(_components.td,{children:`Endpoint single sign-on của provider`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`IdP Certificate`})}),_jsxs(_components.td,{children:[`Chứng chỉ ký X.509, gồm cả dòng `,_jsx(_components.code,{children:`-----BEGIN CERTIFICATE-----`}),` và `,_jsx(_components.code,{children:`-----END CERTIFICATE-----`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`SLO URL (Optional)`})}),_jsx(_components.td,{children:`Endpoint single logout của provider`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Name ID Format`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Email Address`}),` (mặc định). Các lựa chọn khác: `,_jsx(_components.strong,{children:`Persistent`}),`, `,_jsx(_components.strong,{children:`Transient`}),`, `,_jsx(_components.strong,{children:`Unspecified`}),`. Với các lựa chọn này, IdP cũng phải gửi thuộc tính `,_jsx(_components.code,{children:`email`}),`.`]})]})]})]}),_jsxs(_components.p,{children:[`Nhấn `,_jsx(_components.strong,{children:`Create Connection`}),`.`]})]})]})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trạng thái thành công:`}),` hộp thoại hiển thị `,_jsx(_components.strong,{children:`SSO Connection Created`}),` và kết nối ở trạng thái `,_jsx(_components.strong,{children:`Active`}),`. Tiếp theo, chạy kiểm tra kết nối và đăng nhập thử theo `,_jsx(_components.a,{href:`/vi/guide/security/sso#t%E1%BA%A1o-k%E1%BA%BFt-n%E1%BB%91i`,children:`Thiết lập single sign-on`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`cách-cloudthinker-xử-lý-đăng-nhập-saml`,children:`Cách CloudThinker xử lý đăng nhập SAML`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Hành vi`}),_jsx(_components.th,{children:`Ý nghĩa với bạn`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Đăng nhập bắt đầu tại CloudThinker`}),_jsxs(_components.td,{children:[`Người dùng nhập email trên trang đăng nhập CloudThinker và nhấn `,_jsx(_components.strong,{children:`Continue with SSO`}),`. Mở CloudThinker từ app dashboard của IdP (đăng nhập do IdP khởi tạo) không được chấp nhận.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bắt buộc assertion được ký`}),_jsx(_components.td,{children:`IdP phải ký SAML assertion. Chỉ ký response bên ngoài là không đủ.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Dung sai đồng hồ 120 giây`}),_jsx(_components.td,{children:`Assertion bị từ chối nếu đồng hồ của IdP và CloudThinker lệch nhau hơn hai phút.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Không hỗ trợ assertion mã hóa`}),_jsx(_components.td,{children:`CloudThinker không có khóa giải mã SP. Tắt mã hóa assertion trong IdP, nếu không đăng nhập sẽ thất bại.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`AuthnRequest không được ký`}),_jsx(_components.td,{children:`CloudThinker không ký các request gửi đi. Nếu IdP yêu cầu AuthnRequest có chữ ký, hãy tắt yêu cầu đó cho app này.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Không có single logout`}),_jsxs(_components.td,{children:[`Đăng xuất khỏi CloudThinker chỉ kết thúc phiên CloudThinker. CloudThinker lưu `,_jsx(_components.strong,{children:`SLO URL`}),` nhưng không gửi logout request tới IdP hay nhận chúng từ IdP.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Một chứng chỉ ký`}),_jsxs(_components.td,{children:[`Trường `,_jsx(_components.strong,{children:`IdP Certificate`}),` chứa một chứng chỉ. Không có chứng chỉ phụ, nên hãy lên kế hoạch xoay vòng dưới dạng chuyển đổi tức thời. Xem `,_jsx(_components.a,{href:`#xoay-v%C3%B2ng-ch%E1%BB%A9ng-ch%E1%BB%89-idp`,children:`Xoay vòng chứng chỉ IdP`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`SP Metadata URL sau khi tạo`}),_jsxs(_components.td,{children:[`Một số IdP có thể import SP metadata URL. URL này xuất hiện trong `,_jsx(_components.strong,{children:`Manage → Configuration`}),` khi kết nối đã tồn tại.`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`điều-gì-xảy-ra-ở-lần-đăng-nhập-đầu-tiên`,children:`Điều gì xảy ra ở lần đăng nhập đầu tiên`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Nếu`}),_jsx(_components.th,{children:`Thì`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Chế độ cấp phép là `,_jsx(_components.strong,{children:`Just-in-time`})]}),_jsxs(_components.td,{children:[`CloudThinker tạo tài khoản ở lần đăng nhập SSO đầu tiên của người đó, với `,_jsx(_components.strong,{children:`Auto-assigned organization role`}),` (mặc định `,_jsx(_components.strong,{children:`Viewer`}),`) và `,_jsx(_components.strong,{children:`Auto-assigned workspaces`}),` bạn đã đặt.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Người đó có lời mời đang chờ`}),_jsx(_components.td,{children:`Vai trò và workspace của lời mời được áp dụng thay thế. Nếu organization không còn seat trống, đăng nhập thất bại với thông báo “This organization has reached its seat limit.”`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Người đó đã có tài khoản CloudThinker cùng email`}),_jsx(_components.td,{children:`CloudThinker liên kết tài khoản đó với IdP. Không tạo bản trùng lặp.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Chế độ cấp phép là `,_jsx(_components.strong,{children:`Manual`}),` và người đó không có tài khoản hay lời mời`]}),_jsx(_components.td,{children:`Đăng nhập bị từ chối. Hãy mời họ trước.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bạn muốn nhóm IdP quyết định quyền truy cập`}),_jsxs(_components.td,{children:[`Đăng nhập SAML chỉ đọc email và tên, không đọc nhóm. Dùng `,_jsx(_components.a,{href:`/vi/guide/security/scim#%C3%A1nh-x%E1%BA%A1-nh%C3%B3m-t%E1%BB%9Bi-workspace`,children:`SCIM`}),` để ánh xạ nhóm với workspace.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Đặt chế độ cấp phép và vai trò mặc định trong `,_jsx(_components.a,{href:`/vi/guide/security/sso`,children:`Thiết lập single sign-on`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`nếu-idp-không-khả-dụng`,children:`Nếu IdP không khả dụng`}),`\n`,_jsxs(_components.p,{children:[`Owner của organization được miễn `,_jsx(_components.strong,{children:`Require SSO`}),` và vẫn có thể đăng nhập bằng mã email. Xem `,_jsx(_components.a,{href:`/vi/guide/security/sso#n%E1%BA%BFu-idp-kh%C3%B4ng-kh%E1%BA%A3-d%E1%BB%A5ng`,children:`Nếu IdP không khả dụng`}),` để biết các bước và hộp thư cần thiết lập trước.`]}),`\n`,_jsx(Heading,{level:`2`,id:`xoay-vòng-chứng-chỉ-idp`,children:`Xoay vòng chứng chỉ IdP`}),`\n`,_jsx(_components.p,{children:`CloudThinker không cảnh báo trước khi chứng chỉ đã lưu hết hạn và không hiển thị ngày hết hạn. Hãy kiểm tra ngày đó trong IdP và tự đặt nhắc nhở.`}),`\n`,_jsx(_components.p,{children:`CloudThinker kiểm tra chữ ký với một chứng chỉ duy nhất, nên đăng nhập sẽ thất bại trong khoảng từ lúc IdP bắt đầu ký bằng chứng chỉ mới đến lúc bạn lưu nó trong CloudThinker. Hãy giữ khoảng gián đoạn này trong vòng một đến hai phút.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Chuẩn bị chứng chỉ mới trong IdP`,children:_jsxs(_components.p,{children:[`Tạo hoặc tải lên chứng chỉ ký mới, nhưng chưa kích hoạt. Sao chép chứng chỉ, gồm cả dòng `,_jsx(_components.code,{children:`BEGIN`}),` và `,_jsx(_components.code,{children:`END`}),`.`]})}),_jsx(Step,{title:`Chuyển IdP sang chứng chỉ mới`,children:_jsx(_components.p,{children:`Kích hoạt chứng chỉ mới cho app CloudThinker.`})}),_jsx(Step,{title:`Lưu ngay trong CloudThinker`,children:_jsxs(_components.p,{children:[`Mở `,_jsx(_components.strong,{children:`Manage → Configuration`}),` trên thẻ `,_jsx(_components.strong,{children:`Single sign-on`}),`, dán chứng chỉ vào `,_jsx(_components.strong,{children:`IdP Certificate`}),`, và nhấn `,_jsx(_components.strong,{children:`Save Changes`}),`.`]})}),_jsxs(Step,{title:`Kiểm tra`,children:[_jsxs(_components.p,{children:[`Chạy kiểm tra kết nối từ `,_jsx(_components.strong,{children:`Manage → Overview`}),`, rồi đăng nhập qua SSO trong cửa sổ riêng tư.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trạng thái thành công:`}),` kiểm tra đạt `,_jsx(_components.strong,{children:`Certificate Valid`}),` và lần đăng nhập đưa bạn vào CloudThinker.`]})]})]}),`\n`,_jsx(_components.p,{children:`Nếu có sự cố, Owner vẫn có thể đăng nhập bằng mã email và sửa chứng chỉ.`}),`\n`,_jsx(Heading,{level:`2`,id:`khắc-phục-sự-cố`,children:`Khắc phục sự cố`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`IdP báo ACS hoặc reply URL không hợp lệ`,id:`idp-bao-acs-hoac-reply-url-khong-hop-le`,children:_jsxs(_components.p,{children:[`ACS URL trong IdP phải khớp chính xác với `,_jsx(_components.strong,{children:`ACS URL`}),` của CloudThinker, gồm cả `,_jsx(_components.code,{children:`https://`}),` và không có dấu gạch chéo ở cuối. Sao chép lại từ bước `,_jsx(_components.strong,{children:`SP Metadata`}),` hoặc từ `,_jsx(_components.strong,{children:`Manage → Configuration`}),`.`]})}),_jsx(Accordion,{title:`'Audience mismatch' hoặc 'Entity ID mismatch'`,id:`audience-mismatch-hoac-entity-id-mismatch`,children:_jsxs(_components.p,{children:[`Audience hoặc entity ID trong IdP phải khớp chính xác với `,_jsx(_components.strong,{children:`SP Entity ID`}),` của CloudThinker. Phép so sánh phân biệt chữ hoa chữ thường.`]})}),_jsx(Accordion,{title:`Kiểm tra kết nối thất bại ở Certificate Valid`,id:`kiem-tra-ket-noi-that-bai-o-certificate-valid`,children:_jsxs(_components.p,{children:[`Dán toàn bộ chứng chỉ, gồm cả dòng `,_jsx(_components.code,{children:`BEGIN`}),` và `,_jsx(_components.code,{children:`END`}),`, không có ký tự thừa. Nếu IdP đã xoay vòng chứng chỉ, dán chứng chỉ mới vào `,_jsx(_components.strong,{children:`Manage → Configuration`}),` và nhấn `,_jsx(_components.strong,{children:`Save Changes`}),`. Để tránh lặp lại, hãy làm theo `,_jsx(_components.a,{href:`#xoay-v%C3%B2ng-ch%E1%BB%A9ng-ch%E1%BB%89-idp`,children:`Xoay vòng chứng chỉ IdP`}),`.`]})}),_jsx(Accordion,{title:`Đăng nhập được từ CloudThinker nhưng không được từ dashboard IdP`,id:`dang-nhap-duoc-tu-cloudthinker-nhung-khong-duoc-tu-dashboard-idp`,children:_jsx(_components.p,{children:`Đây là hành vi mong đợi. Đăng nhập do IdP khởi tạo đã bị tắt. Hãy yêu cầu người dùng bắt đầu từ trang đăng nhập CloudThinker.`})}),_jsxs(Accordion,{title:`'SSO authentication failed. Please try again or contact your administrator.'`,id:`sso-authentication-failed-please-try-again-or-contact-your-administrator`,children:[_jsx(_components.p,{children:`CloudThinker hiển thị cùng một thông báo này cho mọi SAML response bị từ chối, nên hãy kiểm tra lần lượt:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Assertion không được ký`}),`: IdP chỉ ký response. Bật ký assertion (xem tab provider của bạn ở trên).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Assertion bị mã hóa`}),`: tắt mã hóa assertion cho app CloudThinker.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sai chứng chỉ`}),`: dán chứng chỉ ký hiện tại của IdP vào `,_jsx(_components.strong,{children:`Manage → Configuration`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Lệch đồng hồ`}),`: đồng hồ của IdP lệch hơn hai phút.`]}),`\n`]})]}),_jsx(Accordion,{title:`Đăng nhập thất bại dù cấu hình hợp lệ`,id:`dang-nhap-that-bai-du-cau-hinh-hop-le`,children:_jsxs(_components.p,{children:[`Kiểm tra người dùng đã được gán vào app CloudThinker trong IdP, rồi đối chiếu thông báo họ thấy với `,_jsx(_components.a,{href:`/vi/guide/security/sso#kh%E1%BA%AFc-ph%E1%BB%A5c-s%E1%BB%B1-c%E1%BB%91`,children:`Tìm nguyên nhân đăng nhập SSO thất bại`}),`.`]})}),_jsx(Accordion,{title:`Tên hiển thị dưới dạng địa chỉ email`,id:`ten-hien-thi-duoi-dang-dia-chi-email`,children:_jsxs(_components.p,{children:[`IdP không gửi tên và họ. Thêm `,_jsx(_components.code,{children:`firstName`}),` và `,_jsx(_components.code,{children:`lastName`}),` (hoặc `,_jsx(_components.code,{children:`givenName`}),` và `,_jsx(_components.code,{children:`surname`}),`) trong ánh xạ thuộc tính của provider.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`bước-tiếp-theo`,children:`Bước tiếp theo`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Kiểm tra và bắt buộc SSO`,icon:`key`,href:`/vi/guide/security/sso`,children:_jsx(_components.p,{children:`Chạy kiểm tra kết nối, chọn cách cấp phép và bật Require SSO`})}),_jsx(Card,{title:`Cấp phép SCIM`,icon:`users-gear`,href:`/vi/guide/security/scim`,children:_jsx(_components.p,{children:`Tự động đồng bộ người dùng và nhóm từ IdP`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Thiết lập SAML SSO","description":"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.","icon":"shield","href":"/vi/guide/security/sso-saml"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Điều kiện tiên quyết","slug":"điều-kiện-tiên-quyết","depth":2,"children":[]},{"title":"Những gì cần trao đổi","slug":"những-gì-cần-trao-đổi","depth":2,"children":[]},{"title":"Cấu hình provider","slug":"cấu-hình-provider","depth":2,"children":[]},{"title":"Cách CloudThinker xử lý đăng nhập SAML","slug":"cách-cloudthinker-xử-lý-đăng-nhập-saml","depth":2,"children":[]},{"title":"Điều gì xảy ra ở lần đăng nhập đầu tiên","slug":"điều-gì-xảy-ra-ở-lần-đăng-nhập-đầu-tiên","depth":2,"children":[]},{"title":"Nếu IdP không khả dụng","slug":"nếu-idp-không-khả-dụng","depth":2,"children":[]},{"title":"Xoay vòng chứng chỉ IdP","slug":"xoay-vòng-chứng-chỉ-idp","depth":2,"children":[]},{"title":"Khắc phục sự cố","slug":"khắc-phục-sự-cố","depth":2,"children":[]},{"title":"Bước tiếp theo","slug":"bước-tiếp-theo","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cloudthinker","siteName":"CloudThinker","title":"Thiết lập SAML SSO - CloudThinker","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/guide/security/sso-saml","matchLevel":1},"vi":{"href":"/vi/guide/security/sso-saml","matchLevel":0},"ja":{"href":"/guide/security/sso-saml","matchLevel":1},"ko":{"href":"/guide/security/sso-saml","matchLevel":1}}},"lastModified":"2026-10-28T02:14:40.376Z","originalFileLocation":"vi/guide/security/sso-saml.mdx","locale":"vi"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CloudThinker\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Thiết lập SAML SSO - CloudThinker\">\u003cmeta data-mint-head property=\"og:description\" content=\"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CloudThinker\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cloudthinker.io/vi/guide/security/sso-saml\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cloudthinker.mintlify.app/_mintlify/api/og/v2?division=Danh+t%C3%ADnh+v%C3%A0+truy+c%E1%BA%ADp\u0026amp;title=Thi%E1%BA%BFt+l%E1%BA%ADp+SAML+SSO\u0026amp;description=K%E1%BA%BFt+n%E1%BB%91i+Okta%2C+Microsoft+Entra+ID%2C+Google+Workspace%2C+AWS+IAM+Identity+Center%2C+OneLogin+ho%E1%BA%B7c+b%E1%BA%A5t+k%E1%BB%B3+identity+provider+SAML+2.0+n%C3%A0o.\u0026amp;theme=a662466b4ca99701c5f8fbf0\u0026amp;signature=e1934b62918b97e911894934562bd1e17c300c9d014ea08647b297a98721066b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Thiết lập SAML SSO - CloudThinker\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cloudthinker.mintlify.app/_mintlify/api/og/v2?division=Danh+t%C3%ADnh+v%C3%A0+truy+c%E1%BA%ADp\u0026amp;title=Thi%E1%BA%BFt+l%E1%BA%ADp+SAML+SSO\u0026amp;description=K%E1%BA%BFt+n%E1%BB%91i+Okta%2C+Microsoft+Entra+ID%2C+Google+Workspace%2C+AWS+IAM+Identity+Center%2C+OneLogin+ho%E1%BA%B7c+b%E1%BA%A5t+k%E1%BB%B3+identity+provider+SAML+2.0+n%C3%A0o.\u0026amp;theme=a662466b4ca99701c5f8fbf0\u0026amp;signature=e1934b62918b97e911894934562bd1e17c300c9d014ea08647b297a98721066b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CloudThinker\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0c93c0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cloudthinker.io/vi/guide/security/sso-saml\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/vi/guide/security/sso-saml.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.cloudthinker.io/vi/guide/security/sso-saml\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.cloudthinker.io/guide/security/sso-saml\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.cloudthinker.io/guide/security/sso-saml\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.cloudthinker.io/guide/security/sso-saml\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.cloudthinker.io/guide/security/sso-saml\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cloudthinker.io/#organization\",\"name\":\"CloudThinker\",\"url\":\"https://docs.cloudthinker.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/light.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=a56a571509d1cd246f5b0e68db015e5f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cloudthinker.io#website\",\"name\":\"CloudThinker\",\"url\":\"https://docs.cloudthinker.io\",\"publisher\":{\"@id\":\"https://docs.cloudthinker.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml#webpage\",\"url\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml\",\"name\":\"Thiết lập SAML SSO\",\"description\":\"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.\",\"dateModified\":\"2026-10-28T02:14:40.376Z\",\"isPartOf\":{\"@id\":\"https://docs.cloudthinker.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Danh tính và truy cập\",\"item\":\"https://docs.cloudthinker.io/vi/guide/security/sso\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Thiết lập SAML SSO\",\"item\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml#article\",\"headline\":\"Thiết lập SAML SSO\",\"name\":\"Thiết lập SAML SSO\",\"description\":\"Kết nối Okta, Microsoft Entra ID, Google Workspace, AWS IAM Identity Center, OneLogin hoặc bất kỳ identity provider SAML 2.0 nào.\",\"url\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cloudthinker.io/vi/guide/security/sso-saml#webpage\"},\"dateModified\":\"2026-10-28T02:14:40.376Z\",\"publisher\":{\"@id\":\"https://docs.cloudthinker.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cloudthinker.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CloudThinker\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CloudThinker","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/guide/security/sso-saml"}]},{"language":"vi","tabs":[{"tab":"Bắt đầu","pages":[{"title":"Bắt đầu","href":"/vi"}]},{"tab":"Sản phẩm","pages":[{"title":"Sản phẩm","href":"/vi/guide/incident/overview"}]},{"tab":"Nền tảng","pages":[{"title":"Nền tảng","href":"/vi/guide/connections/overview"}]},{"tab":"Doanh nghiệp","groups":[{"group":"Bảo mật","pages":[{"title":"Bảo mật và tin cậy","icon":"shield-halved","href":"/vi/guide/security/overview"},{"title":"Bảo vệ dữ liệu","icon":"user-shield","href":"/vi/guide/security/data-protection"},{"title":"Guardrails tùy chỉnh","icon":"eye-slash","href":"/vi/guide/security/custom-guardrails"},{"title":"Tự Cung Cấp Khóa (BYOK)","icon":"key","href":"/vi/guide/byok"}]},{"group":"Danh tính và truy cập","pages":[{"title":"Thiết lập đăng nhập một lần","description":"Xác minh domain email, kết nối identity provider SAML hoặc OIDC, chọn cách cấp tài khoản, và bắt buộc SSO cho tổ chức.","icon":"key","href":"/vi/guide/security/sso"},{"title":"Thiết lập SAML SSO","icon":"shield","href":"/vi/guide/security/sso-saml"},{"title":"Thiết lập OIDC SSO","description":"Kết nối Google, Microsoft Entra ID, Okta hoặc bất kỳ nhà cung cấp danh tính OpenID Connect nào với CloudThinker bằng issuer URL và client ID.","icon":"id-badge","href":"/vi/guide/security/sso-oidc"},{"title":"Cấp phát người dùng qua SCIM","icon":"users-gear","href":"/vi/guide/security/scim"},{"title":"Vai trò và quyền hạn","icon":"user-shield","href":"/vi/guide/security/roles"}]},{"group":"Quản trị","pages":[{"title":"Audit Logs","icon":"clipboard-list","href":"/vi/guide/security/audit-logs"}]}]},{"tab":"Nhà phát triển","pages":[{"title":"Nhà phát triển","href":"/vi/guide/api/overview"}]},{"tab":"Tài nguyên","pages":[{"title":"Tài nguyên","href":"/vi/learn/aio/introduction"}]},{"tab":"Nhật ký thay đổi","pages":[{"title":"Nhật ký thay đổi","href":"/changelog"}]},{"tab":"Bảng giá","href":"https://cloudthinker.io/pricing"}]},{"language":"ja","pages":[{"title":"ja","href":"/guide/security/sso-saml"}]},{"language":"ko","pages":[{"title":"ko","href":"/guide/security/sso-saml"}]}]},"title":"Thiết lập SAML SSO - CloudThinker","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}