ตั้งค่า Single Sign-On (SSO) ระดับองค์กรสำหรับ Amazon Quick บนเดสก์ท็อป โดยใช้ OpenID Connect (OIDC) ร่วมกับ AWS IAM Identity Center เพื่อให้ผู้ใช้ในองค์กรเข้าสู่ระบบด้วยบัญชีของบริษัท
ข้อมูลตรวจกับเอกสารทางการของ AWS เมื่อ 17 ต.ค. 2026 แอปเดสก์ท็อปเปิดให้ใช้งานทั่วไป (GA) บน macOS และ Windows ตั้งแต่ 9 ก.ย. 2026
การเข้าสู่ระบบระดับองค์กรของ Amazon Quick Desktop ต้องมี OIDC provider เส้นทางที่ AWS ระบุไว้ในเอกสารคือใช้ IdP เดิมขององค์กร (Microsoft Entra ID, Google Workspace, Okta หรือ Ping Identity) ส่วนเส้นทาง Amazon Cognito เป็นวิธีแก้ชั่วคราวจากการใช้งานจริง
องค์กรของคุณมี OIDC identity provider อยู่แล้ว AWS มีคู่มือการตั้งค่าสำหรับ Microsoft Entra ID, Google Workspace, Okta และ Ping Identity (PingFederate และ PingOne) นี่คือเส้นทางที่มีในเอกสาร — เลือก identity provider ของคุณเพื่อไปยังขั้นตอนการตั้งค่า:
Google Workspace: ดูหมายเหตุ Google Workspace ในขั้นที่ 1
หรือดูภาพรวมก่อน (คู่มือ AWS มี 4 ขั้น: สร้างแอปใน IdP, เพิ่ม extension access, สร้าง extension, แจกจ่าย):
ลงทะเบียน public OIDC client (authorization code + PKCE)
ไม่อยู่ใน 4 ขั้นของคู่มือเดสก์ท็อปของ AWS ใช้เฉพาะเมื่อการออกแบบต้องการ (วิธี Cognito จะสร้างให้)
ลงทะเบียน OIDC endpoint ในคอนโซลผู้ดูแล Amazon Quick แล้วสร้าง extension
ทดสอบ Continue with SSO แล้วแจกจ่ายให้ผู้ใช้
offline_access มาด้วย ซึ่งเส้นทาง Cognito + IAM Identity Center ไม่รับ จึงต้องมี proxy ตัด scope นี้ออกก่อนคำขอจะถึง identity provider ควรทดสอบในบัญชีของคุณเองก่อนใช้งานจริงใช้เส้นทางนี้เมื่อยังไม่มี IdP เดิม: Amazon Quick แบบ local users (ไม่มี IAM Identity Center) หรือมี IAM Identity Center ที่จัดการผู้ใช้เองโดยไม่มี OIDC provider ภายนอก โดยจะ deploy Amazon Cognito เป็น OIDC provider ผ่าน CDK stack ตัวอย่าง
offline_access ออกจากคำขอ /authorize — ดังนั้น Authorization Endpoint ต้องชี้ไปที่ proxy ไม่ใช่ Cognito hosted UI ทั้งนี้ Cognito ไม่ได้ใช้ scope offline_access ในการควบคุม refresh token แต่จะคืน refresh token ให้เมื่อใช้ authorization code grant (Cognito token endpoint)proxy มีหน้าที่เดียว: ดักคำขอ /authorize ตัด scope offline_access ที่ไม่รองรับ (และถ้าต้องการ บังคับ identity_provider=IdentityCenter) แล้วส่งผู้ใช้ต่อไป Cognito ทำได้ 2 วิธี — เลือกตามว่าต้องการ logic มากแค่ไหน และจะป้องกันด้วยอะไร
Authorization Endpoint ชี้ไปที่ path บน CloudFront โดย CloudFront Function บน viewer-request เขียน query string ใหม่แล้ว return 302 ที่ edge — /authorize ไม่แตะ origin (Cognito) เลย
AuthEndpoint = CloudFront URL · edge · ไม่มี cold start
Authorization Endpoint ชี้ไปที่ API Gateway HTTP API ทุกคำขอจะเรียก Lambda ที่เขียน query string ใหม่แล้ว return 302 ไปยัง Cognito hosted UI เป็นสิ่งที่ CDK stack สำเร็จรูป deploy ให้
AuthEndpoint = API Gateway URL · runtime เต็ม · regional
| มิติ | Option 1 — API Gateway + Lambda | Option 2 — CloudFront Function |
|---|---|---|
| ที่รันโค้ด | Regional (1 Region) | Edge (PoP ทั่วโลก) |
| Latency | Lambda cold start + round trip เข้า region | Sub-millisecond ไม่มี cold start |
แตะ origin ที่ /authorize ไหม | แตะ — คำขอเข้า endpoint จริง | ไม่แตะ — return 302 ที่ edge |
| Host-header / origin-request-policy | ต้องจัดการ | ไม่มีปัญหา (ไม่ใช้ origin) |
| ชิ้นส่วนที่ต้องดูแล | API Gateway + Lambda + IAM role | CloudFront distribution 1 ตัว + ฟังก์ชัน JS 1 ตัว |
| ขีดจำกัด compute | runtime เต็ม — เรียก AWS API, crypto, async ได้ | จำกัดมาก: โค้ด ≤10 KB, ~1 ms CPU, เรียก network ไม่ได้, JS subset (cloudfront-js-2.0) |
| Logging | CloudWatch Logs เต็มรูปแบบ | จำกัด |
| ต้นทุนต่อคำขอ | Lambda + API Gateway requests | ถูกกว่า — CloudFront Function ~$0.10 / ล้าน |
| เหมาะกับ | logic ที่เกินกว่าการ rewrite ธรรมดา (lookup, เรียก API อื่น) | การ rewrite query string + 302 ล้วน ๆ (เคสนี้พอดี) |
/authorize เท่านั้น — Token, JWKS และ Issuer endpoint ชี้ไป Cognito ตรง ๆ (token exchange เป็น POST ต้องถึง Cognito)offline_access — Cognito ออกให้ตาม refresh-token expiration ของ app client ไม่ผูกกับ scopeidentity_provider=IdentityCenter ในคำขอ authorization ของ Cognito หากดีไซน์นี้ใช้ Trusted Token Issuer บทบาทของ TTI คือ trusted identity propagation และ token exchange ไม่ใช่การกำหนดเส้นทาง sign-in| Option 1 (API Gateway HTTP API) | Option 2 (CloudFront) | |
|---|---|---|
| แนบ WAF ตรง ๆ ได้ไหม | ไม่ได้ — HTTP API ไม่รองรับ | ได้ — แนบที่ distribution |
| Web ACL scope / Region | ต้องใช้ REST API (REGIONAL) หรือเอา CloudFront มาคั่นหน้า | CLOUDFRONT scope — สร้างใน us-east-1 |
| ลำดับการทำงาน | WAF → API Gateway → Lambda | WAF ทำงาน ก่อน CloudFront Function |
ทางเลือกของฝั่ง HTTP API: เอา CloudFront มาคั่นหน้าแล้วแนบ WAF ที่ CloudFront, เปลี่ยนไปใช้ REST API เพื่อใช้ WAF และ resource policy, หรือคง HTTP API แล้วใช้ IAM authorization, JWT/Lambda authorizer และ throttling (HTTP API ไม่รองรับ resource policy)
AWSManagedRulesCommonRuleSet, AWSManagedRulesAmazonIpReputationList และ rate-based ruleoffline_access ที่ไม่รองรับบัญชี AWS ที่มี Amazon Quick subscription (บัญชี Enterprise; home Region ต้องเป็น Region ที่มีแอปเดสก์ท็อป); Node.js 18+, AWS CDK CLI, Python 3.12+ พร้อม boto3 และ AWS credentials ที่ตั้งค่าแล้ว; ติดตั้งแอปเดสก์ท็อปไว้แล้ว
API Gateway HTTP API ไม่รองรับ resource policy หากต้องการจำกัด authorize endpoint ตาม source IP ให้เอา CloudFront และ AWS WAF มาคั่นหน้า HTTP API หรือเปลี่ยนเป็น REST API แล้วใช้ AWS WAF หรือ resource policy
ดึงค่า stack outputs:
คัดลอกผู้ใช้เข้า Cognito User Pool (สคริปต์อ่าน pool ID และ temporary password จาก stack และถามยืนยันก่อนสร้างผู้ใช้แต่ละราย)
ในคอนโซลผู้ดูแล Amazon Quick เลือก Manage account → Permissions → Extension access แล้วกรอกค่าจาก stack outputs จากนั้นในเมนูซ้ายของคอนโซล Amazon Quick เลือก Extensions (อยู่ใต้ More ถ้าไม่เห็น) แล้วสร้าง extension
| Field | Stack output |
|---|---|
| Trusted Token Issuer ARN (เฉพาะ IDC) | TtiArn |
| Aud claim | ClientId |
| Issuer URL | IssuerUrl |
| Authorization Endpoint | AuthEndpoint (API Gateway) |
| Token Endpoint | TokenEndpoint |
| JWKS URI | JwksUri |
| Client ID | ClientId |
เปิดแอปเดสก์ท็อปแล้วเลือก Continue with SSO เข้าสู่ระบบด้วย username หรือ email และ temporary password — ระบบจะให้ตั้งรหัสผ่านใหม่ในครั้งแรก
sync_users.py เป็น stop-gap แบบทำมือ สำหรับ production ให้ใช้กระบวนการ provisioning ที่องค์กรอนุมัติและทดสอบ lifecycle ของผู้ใช้แบบ end-to-end| ปัญหา | สาเหตุ / วิธีแก้ |
|---|---|
redirect_mismatch | Callback URL ต้องเป็น http://localhost:18080 (stack ตั้งให้อัตโนมัติ) |
invalid_scope | Authorization Endpoint ต้องชี้ไป API Gateway (AuthEndpoint) ไม่ใช่ Cognito hosted UI |
| หาผู้ใช้ไม่พบ | อีเมลใน Cognito ต้องตรงกับอีเมลผู้ใช้ใน Amazon Quick ทุกตัวอักษร |
| ค่าตั้งค่าเก่าค้างหลังแก้ไข | เคลียร์ cached profiles ใน ~/.quickwork/ (ดูด้านล่าง) |
~/.quickwork (สิ่งที่ทีมพบ): AWS ระบุว่า ~/.quickwork/ (macOS) และ %USERPROFILE%\.quickwork\ (Windows) คือโฟลเดอร์เก็บการตั้งค่าในเครื่อง ทีมพบว่าแอปแคช OIDC config ไว้ที่ ~/.quickwork/profiles.json และค้างอยู่แม้ติดตั้งใหม่ หลังตั้งค่า extension access ใหม่ ให้ลบ entry ของ profile enterprise ออก เพื่อให้แอปใช้ค่าใหม่วิธี Cognito นี้เป็นวิธีแก้ชั่วคราวสำหรับสภาพแวดล้อมที่ไม่มี IdP และไม่ใช่วิธีที่ AWS ระบุไว้ในเอกสาร หากมี IdP เดิมอยู่แล้ว ให้ใช้แท็บ มี IdP อยู่แล้ว ดูตัวอย่าง deployment จริงด้วย CloudFront ได้ที่หัวข้อ เคสตัวอย่างจริง — Cognito + Identity Center ผ่าน CloudFront ด้านล่าง ดูเพิ่มเติมที่ public enterprise setup guide
ใช้กับ: Enterprise Edition (ถ้าใช้บัญชี Free หรือ Plus ขั้นตอนนี้ไม่เกี่ยวกับคุณ) · กลุ่มเป้าหมาย: ผู้ดูแลระบบ. ที่มา: เอกสาร AWS
แอป Amazon Quick บนเดสก์ท็อปใช้โปรโตคอล OIDC ในการยืนยันตัวตนผู้ใช้ เมื่อผู้ใช้เลือก Continue with SSO เบราว์เซอร์จะเปิดไปที่ Amazon Quick ซึ่งจะหา identity provider ที่ตั้งค่าไว้แล้ว redirect ไปยัง authorization endpoint ของ IdP โดยเบราว์เซอร์ต้องมี web session ของ Amazon Quick อยู่ ถ้ายังไม่มีจะให้เข้าสู่ระบบ Amazon Quick ก่อน จากนั้นแอปแลก authorization code เป็น token ด้วย Proof Key for Code Exchange (PKCE) แล้ว Amazon Quick จะตรวจสอบ token และจับคู่ผู้ใช้กับตัวตนในบัญชีของคุณ โดยอีเมลใน IdP ต้องตรงกันทุกตัวอักษรกับอีเมลของผู้ใช้ใน Amazon Quick
ผู้ใช้เลือก Continue with SSO ในแอปเดสก์ท็อป
เบราว์เซอร์เปิด authorization endpoint ของ IdP
แลก code เป็น token (ไม่ใช้ client secret)
Quick ตรวจ token และจับคู่ด้วยอีเมล
RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512) ระบบไม่รับ token ที่ sign ด้วย HMAC (HS256/HS384/HS512) หรือไม่ได้ sign
ตรวจสอบรายการต่อไปนี้ก่อนเริ่ม
| รายการ | รายละเอียด |
|---|---|
| บัญชี AWS & subscription | บัญชี AWS ที่มี Amazon Quick subscription ที่ใช้งานได้ (บัญชี Enterprise) โดย home region (identity region) ต้องเป็น Region ที่มีแอปเดสก์ท็อป (ดูหมายเหตุ Region ด้านบน) |
| สิทธิ์ผู้ดูแลระบบ | สิทธิ์ระดับ administrator ในบัญชี Amazon Quick ของคุณ |
| สิทธิ์บน IdP | เข้าถึง IdP ขององค์กรได้ พร้อมสิทธิ์สร้าง OIDC application registration |
| การเข้าถึงเครือข่าย | ในเครือข่ายที่จำกัด ต้องเปิด allow list โดเมนของ Amazon Quick และ IdP ดู Network access and required domains |
| IAM Identity Center (ถ้ามี) | คู่มือเดสก์ท็อปของ AWS ไม่มีขั้นสร้าง Trusted Token Issuer (TTI) ส่วนวิธี Cognito ในหน้านี้จะสร้าง TTI ให้ ดูหัวข้อ Identity Center ด้านล่าง |
ลงทะเบียน public OIDC client (authorization code flow พร้อม PKCE ไม่ใช้ client secret — ยกเว้น Google Workspace ดูด้านล่าง) ให้สิทธิ์ offline_access (Entra ID, Okta, Ping) เพื่อให้ IdP ออก refresh token ถ้าไม่มี ผู้ใช้ต้องยืนยันตัวตนใหม่บ่อย
Redirect URI: http://localhost:18080
Client type: Public / Native (ไม่มี secret)
Grant types: Authorization Code + Refresh Token
PKCE: จำเป็น (S256)
Scopes: openid email profile offline_access
Entra ID: ให้สิทธิ์ offline_access
Okta: เปิด Refresh Token grant + offline_access
Ping: เปิด Refresh Token grant + offline_access สำหรับ PingFederate ต้องเปิด Return ID Token On Refresh Grant ด้วย
Google Workspace: ไม่ต้องเพิ่ม scope Quick ใส่ access_type=offline ให้อัตโนมัติ
openid, email, profile Endpoint: Issuer https://accounts.google.com; Authorization https://accounts.google.com/o/oauth2/v2/auth; Token https://oauth2.googleapis.com/token?client_secret=<CLIENT_SECRET> (ต่อ client secret เป็น query parameter); JWKS https://www.googleapis.com/oauth2/v3/certs ขั้นตอนเต็ม: คู่มือ Google Workspace
Azure portal → Microsoft Entra ID → App registrations → New registration ตั้งชื่อ Amazon Quick Desktop; Supported account types: Single tenant; Redirect URI platform: Public client/native (mobile & desktop); Redirect URI: http://localhost:18080 แล้วเลือก Register
ที่หน้า Overview จด Application (client) ID และ Directory (tenant) ID
เพิ่ม Microsoft Graph → Delegated permissions: openid, email, profile, offline_access และ Grant admin consent หากองค์กรกำหนด
ใน Advanced settings ให้คง Allow public client flows เป็น No ตรวจว่ามี http://localhost:18080 อยู่ใต้ Mobile and desktop applications แล้ว Save (Entra ID บังคับ PKCE ให้ public client อัตโนมัติ)
Token configuration → Add optional claim → token type ID → email และผู้ใช้ทุกคนต้องมีค่า Mail ในโปรไฟล์ Entra ID ใช้แค่ UPN ไม่พอ
Issuer URL ต้องมี /v2.0 ต่อท้าย (อย่าใช้ Authority URL จากหน้า Endpoints) ถ้าแอปมี custom signing key จาก claims mapping ให้ต่อ ?appid=<CLIENT_ID> ท้าย JWKS URI
| Field | ค่า (แทน <TENANT_ID>) |
|---|---|
| Issuer URL | https://login.microsoftonline.com/<TENANT_ID>/v2.0 |
| Authorization endpoint | https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/authorize |
| Token endpoint | https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token |
| JWKS URI | https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys |
Okta Admin Console → Applications → Applications → Create App Integration; Sign-in method: OIDC - OpenID Connect; Application type: Native Application
ชื่อ Amazon Quick Desktop; Grant type: Authorization Code + Refresh Token; Sign-in redirect URI: http://localhost:18080; assign ให้ผู้ใช้/กลุ่มที่เหมาะสม แล้ว Save และจด Client ID
ที่แท็บ General ตรวจว่า application type เป็น Native, client authentication เป็น None (public client), PKCE เป็น Required และมี http://localhost:18080 ใต้ LOGIN โดย Quick จะขอ scope openid, profile, email, offline_access ตอน sign-in
| Field | ค่า (แทน <OKTA_DOMAIN> เช่น your-org.okta.com — ไม่ใช่ subdomain -admin) |
|---|---|
| Issuer URL | https://<OKTA_DOMAIN> |
| Authorization endpoint | https://<OKTA_DOMAIN>/oauth2/v1/authorize |
| Token endpoint | https://<OKTA_DOMAIN>/oauth2/v1/token |
| JWKS URI | https://<OKTA_DOMAIN>/oauth2/v1/keys |
Applications → OAuth → Clients → Add Client ใส่ Client ID ที่ไม่ซ้ำ; Name: Amazon Quick Desktop; Client Authentication: None; Redirection URI: http://localhost:18080
Allowed Grant Types: Authorization Code + Refresh Token; เลือก Require PKCE; ให้ scope openid, email, profile, offline_access แล้ว Save และจด Client ID
Applications → OAuth → OpenID Connect Policy Management เลือก Return ID Token On Refresh Grant และตรวจว่า claim email อยู่ใน Attribute Contract และถูก map ทั้งตอน initial auth และ refresh grant
| Field | ค่า (แทน <PINGFEDERATE_HOST>) |
|---|---|
| Issuer URL | https://<PINGFEDERATE_HOST> |
| Authorization endpoint | https://<PINGFEDERATE_HOST>/as/authorization.oauth2 |
| Token endpoint | https://<PINGFEDERATE_HOST>/as/token.oauth2 |
| JWKS URI | https://<PINGFEDERATE_HOST>/pf/JWKS |
PingOne admin console → Applications → +; ชื่อ Amazon Quick Desktop; Application Type: Native แล้ว Save
Response Type: Code; Grant Type: Authorization Code + Refresh Token; PKCE Enforcement: S256; Redirect URIs: http://localhost:18080; Token Endpoint Authentication Method: None แล้ว Save
แท็บ Resources (แยกจากแท็บ Configuration): เพิ่ม openid, email, profile, offline_access — PingOne ให้แค่ openid เป็นค่าเริ่มต้น ถ้าข้ามขั้นนี้จะเจอ "User info request failed (HTTP 401)"; แท็บ Attribute Mappings: map email ให้ตรงกับอีเมลผู้ใช้; เปิดแอปเป็น Enabled และจด Client ID กับ Environment ID สำหรับ JWKS ใช้ /as/jwks ไม่ใช่ /.well-known/jwks.json
| Field | ค่า (แทน <ENV_ID>; โดเมนต่างกันตาม region) |
|---|---|
| Issuer URL | https://auth.pingone.com/<ENV_ID>/as |
| Authorization endpoint | https://auth.pingone.com/<ENV_ID>/as/authorize |
| Token endpoint | https://auth.pingone.com/<ENV_ID>/as/token |
| JWKS URI | https://auth.pingone.com/<ENV_ID>/as/jwks |
ไม่ได้อยู่ในคู่มือการตั้งค่าเดสก์ท็อปของ AWS ซึ่งมี 4 ขั้น (แอปใน IdP, extension access, extension, แจกจ่าย) สำหรับทุกประเภทตัวตนรวมถึง IAM Identity Center วิธี Cognito ในหน้านี้จะสร้าง TTI ให้ ให้เพิ่มเองเฉพาะเมื่อการออกแบบต้องการ Trusted Token Issuer (TTI) ทำให้ IAM Identity Center เชื่อถือ OIDC token จาก issuer ภายนอก (trusted identity propagation) ที่มา: เอกสาร AWS
ในคอนโซล IAM Identity Center เลือก Settings แล้วไปที่แท็บ Authentication ใต้หัวข้อ Trusted token issuers เลือก Create trusted token issuer
ที่ช่อง Issuer URL ใส่ OIDC discovery URL ของ IdP จนถึงส่วนก่อนหน้า .well-known/openid-configuration (ไม่รวมส่วนนี้) และต้องตรงกับ claim iss ใน token โดย discovery endpoint ต้องเข้าถึงได้ผ่านพอร์ต 80 และ 443 เท่านั้น
ใต้ Map attributes เลือก Identity provider attribute (claim ใน token เช่น email) และ IAM Identity Center attribute ที่ใช้ค้นหาผู้ใช้รายเดียวใน Identity Center directory
ตั้ง Trusted token issuer name แล้วเลือก Create trusted token issuer จากนั้นแจ้งผู้ดูแลแอปพลิเคชันให้เลือก TTI นี้และตั้งค่า token exchange (รวมถึงค่า claim Aud ของ AWS service ปลายทาง)
ลงทะเบียน OIDC endpoint จากขั้นที่ 1 เพื่อให้แอปเดสก์ท็อปยืนยันตัวตนได้ ต้องทำทั้งสองส่วน
เข้าสู่คอนโซลผู้ดูแล Amazon Quick แล้วเลือก Manage account → ใต้ Permissions เลือก Extension access → Add extension access ที่ Select Service เลือก Amazon Quick (Desktop application for Quick) แล้วเลือก Next
กรอกค่าตามตารางด้านล่างด้วยค่าจากขั้นที่ 1 แล้วเลือก Add
ในเมนูซ้ายของคอนโซล Amazon Quick เลือก Extensions (เลือก More ถ้าไม่เห็น) → Add extension เลือก extension access แบบ Desktop application for Quick ที่สร้างไว้ → Next → Create ถ้าไม่ทำขั้นนี้ ผู้ใช้จะเห็นข้อความ "Enterprise sign-in for Quick Desktop has not been configured for this account." ทำครั้งเดียวต่อบัญชี
| Field | ค่า |
|---|---|
| Name | ชื่อสำหรับ extension access นี้ (เช่น QuickDesktop-access) ใช้ตัวอักษร ตัวเลข และขีดกลางเท่านั้น ห้ามเว้นวรรค |
| Description | (ไม่บังคับ) คำอธิบาย |
| Issuer URL | OIDC issuer URL จากขั้นที่ 1 แบบตรงทุกตัว รวม path ที่ต้องต่อท้าย |
| Authorization Endpoint | OIDC authorization endpoint จากขั้นที่ 1 |
| Token Endpoint | OIDC token endpoint จากขั้นที่ 1 |
| JWKS URI | JSON Web Key Set URI จากขั้นที่ 1 |
| Client ID | OIDC client identifier จากขั้นที่ 1 |
ยืนยันว่าตั้งค่าถูกต้อง แล้วจึงแจกจ่ายให้ผู้ใช้
ในคอนโซล Amazon Quick เลือก Extensions เลือก extension Quick Desktop เปิดเมนู (...) แล้วเลือก Download for Windows หรือ Download for Mac ติดตั้งแอป เลือก Continue with SSO ที่หน้าจอเข้าสู่ระบบ (เลือก AWS Region หรือ Dynamic ได้) แล้วยืนยันตัวตนด้วยบัญชีบริษัท
หากเข้าสู่ระบบไม่สำเร็จ ให้ตรวจค่าจากขั้นที่ 3 เทียบกับ endpoint ในขั้นที่ 1 หากค่าใดผิด ให้ลบ extension access ที่ Permissions → Extension access แล้วทำขั้นที่ 3 ใหม่
แนะนำผู้ใช้ไปที่คู่มือการติดตั้ง ผู้ใช้เลือก Continue with SSO ได้เลยโดยไม่ต้องตั้งค่ารายคน ถ้าจะติดตั้งแบบเงียบทั้งองค์กร ดู Managed deployment configuration (ติดตั้งแบบเงียบบน Windows สำหรับผู้ใช้คนเดียว: .\Amazon-Quick-Setup.exe /S)
offline_access มาด้วย ซึ่งเส้นทาง Cognito + IAM Identity Center นี้ไม่รับ CloudFront Function จึงตัด scope ออกก่อนคำขอจะถึง identity provider หากต้องการเส้นทางที่มีในเอกสาร ให้ใช้คู่มือ AWS ของ IdP คุณ (Entra ID, Google Workspace, Okta, Ping Identity)รูปแบบที่ทีมทดสอบแล้วของเส้นทาง Cognito แทนที่จะใช้ API Gateway + Lambda proxy ใช้ CloudFront Function ตัวเดียว return 302 ที่ edge — ตัด offline_access และบังคับ federate ผ่าน IAM Identity Center โดย /authorize ไม่แตะ origin เลย จึงไม่ต้องห่วงเรื่อง Host header หรือ origin request policy ค่าที่ระบุตัวตนทั้งหมดด้านล่างถูก mask ไว้
authorize ถูก rewrite ที่ CloudFront edge; Token / JWKS / Issuer ยิงตรงไป Cognito
quick-desktop-authz-strip (runtime cloudfront-js-2.0, ผูกที่ viewer-request, stage LIVE)us-east-1_XXXXXXXXX พร้อม hosted-UI domain และ public PKCE app client (ไม่มี secret; authorization-code + PKCE; callback http://localhost:18080; allowed scopes openid email profile — ตั้งใจไม่ใส่ offline_access ใน allowed scopes)IdentityCenter (SAML) — Cognito federate ขึ้น IAM Identity Center เป็น upstream IdPOIDC_JWT) ที่เชื่อ Cognito issuer + application ของ Amazon Quick (quicksight)offline_access + บังคับ IdC)| Field | ค่า |
|---|---|
| Authorization Endpoint | https://dXXXXXXXXXXXXX.cloudfront.net/oauth2/authorize — CloudFront |
| Token Endpoint | https://us-east-1XXXXXXXXX.auth.us-east-1.amazoncognito.com/oauth2/token — Cognito (ตรง) |
| Issuer URL | https://cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXXXX — Cognito (ตรง) |
| JWKS URI | .../us-east-1_XXXXXXXXX/.well-known/jwks.json — Cognito (ตรง) |
| Aud claim / Client ID | <PUBLIC_CLIENT_ID> |
→ offline_access ถูกตัด, บังคับ federate ผ่าน IAM Identity Center, และ code_challenge (PKCE) ส่งผ่านครบ
FunctionGeneratedResponse) origin ของ Cognito ไม่ถูกเรียกใน /authorize — ไม่ต้อง rewrite Host header, ไม่ต้องมี origin request policy, sub-millisecond และไม่มี Lambda cold startoffline_access: Cognito ไม่ได้ใช้ scope offline_access ควบคุม refresh token แต่จะคืน refresh token ให้เมื่อใช้ authorization code grant และกำหนดอายุด้วยค่า refresh-token validity ของ app client (Cognito token endpoint) การตัด scope ออกจึงเลี่ยง invalid_scope ได้โดยไม่ทำให้ session สั้นลงidentity_provider=IdentityCenter ทำให้ทุก sign-in วิ่งผ่าน IAM Identity Center (ไม่มี local Cognito users ตรงๆ) ถ้าต้องการ break-glass local admin ต้องทำ path แยกus-east-1) และ AWS WAF Web ACL ให้ distribution ส่วน domain *.cloudfront.net default ใช้ทดสอบได้ปัญหาที่พบบ่อยและวิธีแก้ (จากคู่มือแก้ปัญหาของ AWS) เคล็ดลับ: export log ของแอปได้จากหน้าจอเข้าสู่ระบบ
| อาการ | วิธีแก้ |
|---|---|
ข้อผิดพลาด redirect_mismatch | ตรวจว่า redirect URI ใน IdP เป็น http://localhost:18080 ตรงเป๊ะ และตั้งเป็น public client / native platform |
| หาผู้ใช้ไม่พบหลังเข้าสู่ระบบ | token ต้องมี email claim (Entra ID: เพิ่ม optional claim email และกรอกค่า Mail ให้ผู้ใช้) และต้องตรงกับผู้ใช้ใน Amazon Quick ทุกตัวอักษร การจับคู่อีเมลแยกตัวพิมพ์เล็ก-ใหญ่ |
| Token validation ล้มเหลว | ตรวจว่า issuer URL ใน extension access ตรงกับ OIDC issuer ของ IdP ทุกตัวอักษร และ IdP sign ID token ด้วยอัลกอริทึม asymmetric ที่รองรับ (ไม่ใช่ HMAC) |
| Invalid issuer (Entra ID) | Issuer URL ต้องมี /v2.0 ให้ลบ extension access แล้วสร้างใหม่ด้วยค่าที่ถูก |
| Enterprise sign-in not configured for this account | มี extension access แล้วแต่ยังไม่ได้สร้าง extension ให้สร้างที่หน้า Extensions (ขั้นที่ 3) |
| User info request failed (HTTP 504) | เป็น timeout ชั่วคราวฝั่ง backend ให้เข้าสู่ระบบ Amazon Quick ในเว็บเบราว์เซอร์ก่อน แล้วลองเข้าแอปเดสก์ท็อปอีกครั้ง และตรวจการเข้าถึงโดเมนที่จำเป็น |
| Access blocked: app not verified (Google Workspace) | ตั้ง User type ของ OAuth consent screen เป็น Internal |
| Consent / permission error (Entra ID) | Grant admin consent ให้ API permission ที่ต้องการในพอร์ทัล Azure (app registration → API permissions) |
| Session หมดอายุบ่อย | ตรวจว่า IdP ออก refresh token: Entra ID ต้องมี offline_access; Okta และ Ping ต้องเปิด Refresh Token grant และ offline_access; Google จัดการให้อัตโนมัติ สำหรับ PingFederate ต้องเปิด Return ID Token On Refresh Grant ด้วย |
| User info request failed (HTTP 401) (PingOne) | เพิ่ม email, profile, offline_access ที่แท็บ Resources ของแอป |
| Token validation ล้มเหลวกับ JWKS ของ PingOne | ใช้ path /as/jwks ไม่ใช่ /.well-known/jwks.json |
| Application ไม่ได้เปิดใช้ (PingOne) | หากยืนยันตัวตนล้มเหลวก่อนถึงหน้า login ให้ตรวจว่า toggle ของแอปตั้งเป็น Enabled |
| ไม่มี email claim หลัง refresh (PingFederate) | ตรวจว่า claim email อยู่ใน OIDC policy Attribute Contract และ map ทั้งตอน initial auth และ refresh grant |
เอกสารทางการของ AWS ที่ใช้ในหน้านี้
Setting up Amazon Quick on desktop for enterprise deployments
Troubleshooting enterprise sign-in
Getting started (desktop)
Security, privacy, and architecture
ประกาศ GA แอปเดสก์ท็อป (What's New, ก.ย. 2026)
Cognito token endpoint (offline_access)