DEV Community

Cover image for เข้าสู่ระบบ ChatGPT สำหรับนักพัฒนา: OAuth, การใช้แพ็กเกจ และค่าบริการ API ที่ควรรู้
Thanawat Wongchai
Thanawat Wongchai

Posted on Originally published at apidog.com

เข้าสู่ระบบ ChatGPT สำหรับนักพัฒนา: OAuth, การใช้แพ็กเกจ และค่าบริการ API ที่ควรรู้

การลงชื่อเข้าใช้ด้วย ChatGPT คือระบบ OAuth 2.0 และ OpenID Connect ของ OpenAI สำหรับผู้ใช้ ChatGPT ทั่วโลก แอปของคุณจะได้รับ ID บัญชีที่เสถียร พร้อมชื่อ อีเมล และรูปโปรไฟล์ ตั้งแต่ DevDay วันที่ 29 กันยายน 2026 ผู้ใช้ Plus และ Pro สามารถอนุญาตให้แอปที่เข้าร่วมรันคำขอ AI บนแผน ChatGPT ของตนได้ แทนการใช้ API key ของคุณ โดยกำหนดขีดจำกัดรายสัปดาห์ต่อแอปได้เอง แอปจะไม่ได้รับบทสนทนา ความทรงจำ หรือ API key ของผู้ใช้

ลองใช้ Apidog วันนี้

บทความนี้เน้นผลกระทบด้านต้นทุนและการลงมือทำ: วิธีเลือกใช้แผนของผู้ใช้แทน API key ของคุณ วิธีอธิบายการใช้งานให้ผู้ใช้เข้าใจ และวิธีทดสอบ OAuth flow รวมถึงกรณีล้มเหลวใน Apidog ดูบริบทเพิ่มเติมได้ที่ สรุปงาน DevDay 2026 และหากต้องการทบทวนความต่างระหว่าง Identity กับ Authorization ให้เริ่มจาก OAuth vs OpenID

ภาพรวมการลงชื่อเข้าใช้ด้วย ChatGPT

รายการ สิ่งที่เอกสาร OpenAI ระบุ
ขอบเขตการระบุตัวตน openid profile email
ขอบเขตการใช้งานแผนสำหรับโอเพนซอร์ส offline_access resource.invoke chatgpt.tokens.use.direct พร้อม resource=https://api.openai.com/v1
สิ่งที่แอปได้รับ ID token และเมื่อใช้แผน จะได้รับ access token กับ refresh token
คุณสมบัติในการใช้งานแผน ผู้ใช้ Plus และ Pro ในแอปที่เข้าร่วม
ที่ที่การใช้งานถูกนับ การใช้งาน ChatGPT Work และ Codex ของแผน
การควบคุมต่อแอป ขีดจำกัดรายสัปดาห์เป็นสัดส่วนของการใช้งานรวมรายสัปดาห์ เครดิตหลังเกินขีดจำกัดปิดไว้โดยค่าเริ่มต้น
อายุโทเค็นสำหรับการใช้งานแผน Access token อายุ 1 ชั่วโมง, refresh token อายุ 30 วัน และถูกแทนที่ทุกครั้งที่รีเฟรช
การเข้าถึงของนักพัฒนา แอปเชิงพาณิชย์: ทดลองแบบจำกัดผ่านแบบฟอร์มแสดงความสนใจ; แอปโอเพนซอร์ส: บริการตนเอง

แหล่งข้อมูล: เอกสารการลงชื่อเข้าใช้ด้วย ChatGPT, เอกสารอ้างอิงโทเค็น และบทความช่วยเหลือเรื่อง การใช้แผน ChatGPT ในแอปอื่น

สิ่งที่แอปของคุณได้รับ และสิ่งที่ไม่ได้รับ

การระบุตัวตนเป็นค่าเริ่มต้น หากไคลเอนต์ขอ scope ต่อไปนี้:

openid profile email
Enter fullscreen mode Exit fullscreen mode

แอปจะได้รับ ID token ตาม คู่มือเว็บไซต์

  • profile ครอบคลุมข้อมูล เช่น ชื่อและรูปโปรไฟล์
  • email ครอบคลุมอีเมลและสถานะการยืนยันอีเมล
  • Scope สำหรับ Identity ไม่ ให้สิทธิ์เข้าถึงบทสนทนา ChatGPT หรือทรัพยากร OpenAI API

ให้ผูกบัญชีภายในของคุณกับ claim sub ที่ตรวจสอบแล้ว รวมกับ issuer และ Client ID อย่าใช้อีเมลเป็นตัวระบุหลักเพียงอย่างเดียว เพราะอีเมลไม่ใช่หลักฐานการเป็นเจ้าของบัญชี หากผู้ใช้เดิมต้องการเชื่อมบัญชี ให้ขอให้ยืนยันการเชื่อมโยงอย่างชัดเจน

การใช้งานแผนเป็นสิทธิ์แยกต่างหาก เมื่อผู้ใช้อนุมัติ scope เพิ่มเติม การตอบกลับ token จะมี access token สำหรับเรียก Responses API ที่ได้รับอนุญาต

หากใช้เฉพาะการลงชื่อเข้าใช้ อย่าร้องขอ access token คุณต้องใช้เพียง id_token

วิธีทำงานของ OAuth flow

เว็บไซต์ใช้มาตรฐาน Authorization Code grant with PKCE ร่วมกับ OIDC ให้โหลด endpoint จาก:

https://auth.openai.com/.well-known/openid-configuration
Enter fullscreen mode Exit fullscreen mode

ค่าหลักที่ใช้ในการตั้งค่า:

Issuer:                 https://auth.openai.com
Authorization endpoint: https://auth.openai.com/api/accounts/authorize
Token endpoint:         https://auth.openai.com/api/accounts/oauth/token
JWKS URI:               https://auth.openai.com/.well-known/jwks.json
Enter fullscreen mode Exit fullscreen mode

ลำดับการทำงานที่ควรนำไปใช้มีดังนี้:

  1. แบ็กเอนด์สร้าง state, PKCE verifier พร้อม S256 challenge และ nonce ใหม่สำหรับทุก authorization request
  2. เปลี่ยนเส้นทางเบราว์เซอร์ไปยัง authorization endpoint พร้อม Client ID, Redirect URI ที่ตรงกับค่าลงทะเบียน และ scope ที่ต้องการ
  3. ผู้ใช้ให้ความยินยอม แล้ว OpenAI ส่ง authorization code กลับไปยัง callback
  4. แบ็กเอนด์ตรวจสอบ state แลก code เป็น token และตรวจสอบลายเซ็น, issuer, audience, วันหมดอายุ และ nonce ของ ID token
  5. ค้นหา สร้าง หรือเชื่อมโยงบัญชีภายใน ก่อนออก session ของแอปเอง

สำหรับ public client ห้ามส่ง client secret ส่วน confidential client ที่ใช้ client_secret_basic ต้องส่ง secret ผ่าน HTTP Basic header เท่านั้น

กรณีเครื่องมือโอเพนซอร์ส

เครื่องมือโอเพนซอร์สมีขั้นตอนลงทะเบียนต่างออกไป ตาม คู่มือการลงชื่อเข้าใช้สำหรับโอเพนซอร์ส:

  • เริ่มต้นด้วย client_id=dynamic_agent_client
  • ส่ง agent_name_hint เป็นชื่อแอปของคุณ
  • ส่ง ext_agent_host_id ที่คงที่ต่อโฮสต์
  • Callback จะคืน Client ID ที่ออกให้ เช่น oaiapp_...
  • บันทึก Client ID นี้และใช้ซ้ำในครั้งถัดไป
  • ใช้ Loopback redirect URI บน 127.0.0.1
  • ไม่มี client secret

การใช้งานแผนทำงานอย่างไรสำหรับผู้ใช้

เอกสารในแอปและหน้า onboarding ควรอธิบายประเด็นต่อไปนี้ให้ชัดเจน:

  • คำขอที่มีสิทธิ์จะนับรวมในแผน

    คำขอจะใช้โควต้าการใช้งาน ChatGPT Work และ Codex ของแผน Plus หรือ Pro

  • แต่ละแอปมีขีดจำกัดรายสัปดาห์

    ผู้ใช้กำหนดเป็นเปอร์เซ็นต์ของการใช้งานรวมรายสัปดาห์ ตัวอย่างในเอกสารอยู่ระหว่าง 10% ถึง 100% ขีดจำกัดนี้เป็นเพดาน ไม่ใช่โควต้าที่จองไว้ให้แอปของคุณ

  • เครดิตเป็นแบบเลือกใช้

    การใช้งานต่อหลังถึงขีดจำกัดถูกปิดไว้โดยค่าเริ่มต้น และผู้ใช้ต้องกำหนดขีดจำกัดแอปเป็น 100% ก่อน

  • แผน Plus มีขีดจำกัดรวม 5 ชั่วโมง

    ตาม หน้าบัญชีและเซสชัน ขีดจำกัดนี้ครอบคลุมทุกแอปที่ใช้แผน และไม่ใช้กับ Pro

  • การตัดการเชื่อมต่อหยุดการใช้งานในอนาคต

    ไม่ย้อนกลับการใช้งานที่เกิดขึ้นแล้ว OpenAI จะไม่แจ้งเตือนแอปของคุณโดยตรง คุณจะทราบเมื่อ request หรือ refresh token ล้มเหลว

ผู้ใช้จัดการการตั้งค่าเหล่านี้ได้ใน ChatGPT ที่ chatgpt.com/settings/usage ตาม แนวทาง UI ของ OpenAI แอปของคุณควรแสดงลิงก์ จัดการการใช้งาน ในจุดที่เกี่ยวข้อง

ใครบ้างที่เปิดตัว และคุณจะได้รับ Client ID อย่างไร

สรุปงาน DevDay ของ OpenAI ระบุพันธมิตรการใช้งานแผน 16 ราย เช่น Devin ของ Cognition, Notion, Vercel, T3, OpenClaw และ Dactyl ขณะที่ The New Stack ระบุ Amp, Warp, Kilo Code และ OpenCode เพิ่มเติม รวมถึง Lovable ที่มีกำหนดเปิดตัวในภายหลัง หากคุณใช้ OpenClaw จะพบชื่อนี้ในทั้งสองรายการ

Sam Altman กล่าวบนเวทีตามที่ The New Stack รายงานว่า:

“ตอนนี้คุณไม่จำเป็นต้องรับผิดชอบค่าใช้จ่ายโทเค็นเพื่อให้พวกเขาใช้งานได้”

แนวทางเข้าร่วมขึ้นอยู่กับประเภทแอป:

  • แอปเชิงพาณิชย์หรือแอปที่โฮสต์: การลงชื่อเข้าใช้เป็นการทดลองแบบจำกัด คุณสามารถ ร้องขอ Client ID ผ่านแบบฟอร์มแสดงความสนใจของ OpenAI ได้ ทั้งกรณีใช้ Identity อย่างเดียวและกรณีใช้แผนด้วย
  • เครื่องมือโอเพนซอร์สและโฮสต์ในเครื่อง: การใช้งานแผนเปิดให้พันธมิตรโอเพนซอร์สผ่าน flow แบบบริการตนเอง

อะไรจะเปลี่ยนไปสำหรับค่า API ของคุณ

ปกติคุณจ่ายค่าบริการตามจำนวนโทเค็น แล้วเรียกเก็บเงินคืนผ่านโมเดลธุรกิจของคุณ การใช้งานแผนย้ายต้นทุนโมเดลไปยัง subscription ของผู้ใช้ ทำให้กำไรของคุณไม่ผูกกับปริมาณการใช้งาน AI ของผู้ใช้โดยตรง แต่คุณจะควบคุมข้อจำกัดและทางเลือกสำรองได้น้อยลง

คีย์ API ของคุณ แผน ChatGPT ของผู้ใช้
ใครจ่าย คุณ ตามจำนวนโทเค็น แผนของผู้ใช้ โดยเครดิตใช้เฉพาะเมื่อเลือกใช้
ใครใช้ได้ ผู้ใช้ทุกคน ผู้ใช้ Plus และ Pro ที่อนุญาต chatgpt.tokens.use.direct
ขีดจำกัด Rate limit ของคุณ การใช้งานแผนรายสัปดาห์, ขีดจำกัดต่อแอป และหน้าต่างเวลา 5 ชั่วโมงของ Plus
รูปแบบคำขอ Responses API เต็มรูปแบบ ต้องมี store: false และ stream: true; ไม่มี temperature, max_output_tokens, file search หรือ Code Interpreter
ความล้มเหลวทั่วไป 429 เมื่อเกิน rate limit 429 subscription_sharing_usage_limit_exceeded หรือ error เดียวกันใน response.failed ระหว่างสตรีม
ทางเลือกสำรอง คุณออกแบบเอง ไม่มีอัตโนมัติ OpenAI ไม่เปลี่ยนผู้รับผิดชอบค่าใช้จ่าย
สิ่งที่ควรแสดงใน UI การใช้งานและราคาของคุณ “กำลังใช้แผน ChatGPT”, ลิงก์จัดการการใช้งาน และแผนที่รองรับ

ข้อจำกัดเหล่านี้มาจาก หน้าข้อจำกัดการดูตัวอย่าง: ฟีเจอร์ที่ต้องเก็บสถานะบทสนทนา หรือใช้เครื่องมือที่โฮสต์ไว้ ยังไม่ทำงานบนแผนของผู้ใช้ในปัจจุบัน

แนวทางที่เหมาะสมคือใช้โมเดลแบบไฮบริด:

  1. ใช้แผนของผู้ใช้สำหรับงานแบบ interactive ของผู้ใช้ Plus และ Pro
  2. ใช้ API key ของคุณสำหรับผู้ใช้รายอื่น
  3. ใช้ API key ของคุณสำหรับ background jobs, CI และ agent ที่ทำงานตามเวลา
  4. เมื่อชนขีดจำกัด ให้แสดงลิงก์จัดการการใช้งาน และเสนอเครดิตหรือ billing path ของคุณเป็นทางเลือก

ดูแนวคิดเพิ่มเติมได้จาก การเปรียบเทียบ API key vs OAuth และ OAuth สำหรับ AI agents

วิธีทดสอบ flow การลงชื่อเข้าใช้และเส้นทางความล้มเหลวใน Apidog

Apidog ไม่ได้ลงชื่อเข้าใช้ผู้ใช้ด้วย ChatGPT โดยตรง แต่ช่วยทดสอบการตั้งค่า OAuth, token exchange และการจัดการข้อผิดพลาดของระบบคุณได้ เริ่มจาก ดาวน์โหลด Apidog แล้วสร้าง environment แยกสำหรับการทดสอบ

1. จัดเก็บ Client และ token เป็นตัวแปร

เพิ่มตัวแปร sensitive ต่อไปนี้ใน environment:

SIWC_CLIENT_ID
SIWC_REDIRECT_URI
SIWC_CLIENT_SECRET
ACCESS_TOKEN
Enter fullscreen mode Exit fullscreen mode

SIWC_CLIENT_SECRET ใช้เฉพาะ confidential client และ ACCESS_TOKEN ใช้สำหรับทดสอบการใช้งานแผน

อ้างอิงตัวแปรใน request ด้วยรูปแบบ:

{{SIWC_CLIENT_ID}}
Enter fullscreen mode Exit fullscreen mode

วิธีนี้ช่วยป้องกันไม่ให้ข้อมูลลับปรากฏใน request ที่บันทึกไว้

2. รัน Authorization Code flow พร้อม PKCE

ในแท็บ Auth ของ Apidog:

  1. เลือก OAuth 2.0
  2. เลือก flow แบบ Authorization Code with PKCE
  3. กำหนด authorization endpoint และ token endpoint ตามค่าด้านบน
  4. ตั้ง scope เป็น:
   openid profile email
Enter fullscreen mode Exit fullscreen mode
  1. ใช้ callback URL ที่ลงทะเบียนไว้กับ Client ID ของคุณ

ดูขั้นตอนของแต่ละฟิลด์ได้จาก คู่มือ Apidog OAuth 2.0

3. ตรวจสอบ ID token ที่ได้รับ

บันทึก token exchange เป็น POST request แยกไปยัง token endpoint โดยส่ง code, PKCE verifier, redirect URI และ Client ID

เพิ่ม post-processor เพื่อยืนยัน response ขั้นพื้นฐาน:

const body = pm.response.json();

pm.test("token exchange returned an ID token", () => {
  pm.expect(pm.response.code).to.eql(200);
  pm.expect(body.id_token).to.be.a("string");
});

const decode = require("atob");
const part = body.id_token
  .split(".")[1]
  .replace(/-/g, "+")
  .replace(/_/g, "/");

const claims = JSON.parse(
  decode(part + "=".repeat((4 - (part.length % 4)) % 4))
);

pm.test("ID token claims match this client", () => {
  pm.expect(claims.iss).to.eql("https://auth.openai.com");
  pm.expect(claims.aud).to.include(pm.environment.get("SIWC_CLIENT_ID"));
  pm.expect(claims.sub).to.be.a("string").and.not.empty;
  pm.expect(claims.exp * 1000).to.be.above(Date.now());
});
Enter fullscreen mode Exit fullscreen mode

ให้บันทึก name, email และ picture เป็นข้อมูลที่อาจมีใน response แทนการบังคับตรวจสอบว่าต้องมีเสมอ

การตรวจสอบลายเซ็น JWT และ nonce ต้องทำในแบ็กเอนด์ของคุณเสมอ ไม่ใช่ในเครื่องมือทดสอบเพียงอย่างเดียว

หากทดสอบการใช้งานแผน ให้ตรวจสอบว่า body.scope มี:

chatgpt.tokens.use.direct
Enter fullscreen mode Exit fullscreen mode

4. จำลองเส้นทางความล้มเหลว

บัญชี Plus จริงไม่เหมาะสำหรับทดสอบทุกกรณี ใช้ Apidog Mock Server เพื่อจำลอง response เหล่านี้:

  • ผู้ใช้ปฏิเสธการใช้งานแผน

    ส่ง token response ที่ scope ไม่มี chatgpt.tokens.use.direct แอปควรคง session การลงชื่อเข้าใช้ไว้ และเสนอให้ผู้ใช้เปิดใช้งานแผนหรือเลือกเส้นทางเรียกเก็บเงินอื่น

  • ถึงขีดจำกัดการใช้งาน

    ส่ง HTTP 429 พร้อม error.code เป็น subscription_sharing_usage_limit_exceeded หรือส่งรหัสเดียวกันผ่าน response.failed ระหว่างสตรีม ตรวจสอบว่าแอปหยุดส่งคำขอผ่านแผน

  • ผู้ใช้ไม่มีสิทธิ์

    ส่ง HTTP 403 พร้อม subscription_sharing_user_not_eligible แอปไม่ควร retry หรือวนกลับไปทำ OAuth flow ซ้ำ

  • ผู้ใช้ตัดการเชื่อมต่อแอป

    จำลอง refresh token ที่คืน invalid_grant หรือ HTTP 401 พร้อม subscription_sharing_invalid_user แอปต้องล้าง token ที่เก็บไว้ และขอให้ผู้ใช้ลงชื่อเข้าใช้อีกครั้ง

เชื่อมกรณีเหล่านี้เป็น test scenario และรันใน CI ด้วย Apidog CLI ดูรายการ error และแนวทางกู้คืนเพิ่มเติมได้จาก หน้าข้อผิดพลาดและการกู้คืน

5. ตรวจสอบการเรียกใช้งานจริง

เมื่อมี plan token จริง ให้ส่ง request แบบ streaming โดยตั้ง Authorization เป็น Bearer {{ACCESS_TOKEN}} ใน Apidog

ตัวอย่าง curl:

curl --no-buffer https://api.openai.com/v1/responses \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "input": [{"role": "user", "content": "Say exactly: Hello, world!"}],
    "store": false,
    "stream": true
  }'
Enter fullscreen mode Exit fullscreen mode

ยืนยันว่า stream จบด้วย event:

response.completed
Enter fullscreen mode Exit fullscreen mode

นี่คือสัญญาณความสำเร็จที่ควรใช้ตัดสินว่าคำขอเสร็จสมบูรณ์

คำถามที่พบบ่อย

ผู้ใช้ Free สามารถลงชื่อเข้าใช้ด้วย ChatGPT ได้หรือไม่?

ได้ การลงชื่อเข้าใช้เปิดให้ผู้ใช้ ChatGPT ทั่วโลก แต่การใช้แผนในแอปอื่นต้องใช้ Plus หรือ Pro

แอปได้รับ OpenAI API key ของผู้ใช้หรือไม่?

ไม่ แอปจะได้รับ ID token และหากผู้ใช้อนุมัติการใช้งานแผน จะได้รับ OAuth access token สำหรับคำขอ Responses API ที่มีสิทธิ์เท่านั้น

จะเกิดอะไรขึ้นเมื่อผู้ใช้ถึงขีดจำกัด?

คำขอจะล้มเหลวด้วย subscription_sharing_usage_limit_exceeded ซึ่งอาจเป็น HTTP 429 หรือ event response.failed หลังเริ่มสตรีมแล้ว ให้หยุดการใช้งานแผนชั่วคราว และแสดงลิงก์จัดการการใช้งาน

ผู้ใช้ Plus สามารถรัน GPT-6.1 Sol ผ่านแอปพันธมิตรได้หรือไม่?

ตัวอย่างในเอกสารใช้ gpt-6.1-sol กับ plan token แต่ก่อนนำเสนอโมเดลนี้ในแอป ควรดึงรายการโมเดลด้วย token ของบัญชีนั้นก่อน ดูเพิ่มเติมได้ที่ GPT-6.1 Sol ฟรีหรือไม่

ขั้นตอนต่อไป

หากคุณกำลังพัฒนาแอปเชิงพาณิชย์ ให้เข้าร่วมรายการรอเพื่อขอ Client ID และเริ่มสร้าง test suite สำหรับกรณีต่อไปนี้ทันที:

  • token validation
  • ผู้ใช้ปฏิเสธ plan usage
  • usage limit exceeded
  • ผู้ใช้ไม่มีสิทธิ์
  • การตัดการเชื่อมต่อและ refresh token ล้มเหลว

ระหว่างรอ ให้ถือว่า plan usage เป็นทางเลือกเพิ่มเติมจาก API billing ของคุณ ไม่ใช่สิ่งทดแทนทั้งหมด บันทึก token validation และ failure scenarios ใน Apidog เพื่อให้เมื่อได้รับ Client ID แล้ว สิ่งที่ต้องเปลี่ยนจริง ๆ เหลือเพียงการใช้ token จริงใน environment ของคุณ

Top comments (0)