Logto คือทางเลือกแทน Auth0 ที่ออกแบบมาสำหรับแอปและผลิตภัณฑ์ SaaS ยุคใหม่ โดยมีทั้งบริการ Cloud และ Open-source เพื่อช่วยให้คุณเปิดตัวระบบการจัดการเอกลักษณ์และการเข้าถึง (IAM) ได้อย่างรวดเร็ว สนุกกับการยืนยันตัวตน (การยืนยันตัวตน), การอนุญาต (การอนุญาต), และการจัดการหลายผู้เช่า ครบจบในที่เดียว
เราแนะนำให้เริ่มต้นด้วย tenant สำหรับการพัฒนาแบบฟรีบน Logto Cloud เพื่อให้คุณสามารถสำรวจฟีเจอร์ทั้งหมดได้อย่างง่ายดาย
ในบทความนี้ เราจะพาคุณไปทีละขั้นตอนเพื่อสร้างประสบการณ์ลงชื่อเข้าใช้ OAuth2 (การยืนยันตัวตนของผู้ใช้) อย่างรวดเร็วด้วย Go และ Logto
ข้อกำหนดเบื้องต้น
- มี Logto instance ที่พร้อมใช้งาน ดู หน้าแนะนำ เพื่อเริ่มต้นใช้งาน
- มีความรู้พื้นฐานเกี่ยวกับ Go
- มีบัญชี OAuth2 ที่ใช้งานได้
สร้างแอปพลิเคชันใน Logto
Logto สร้างขึ้นบนพื้นฐานของการยืนยันตัวตน OpenID Connect (OIDC) และการอนุญาต OAuth 2.0 โดยรองรับการจัดการข้อมูลระบุตัวตนแบบรวมศูนย์ข้ามหลายแอปพลิเคชัน ซึ่งมักเรียกว่า การลงชื่อเข้าใช้ครั้งเดียว (Single Sign-On; SSO)
ในการสร้างแอปพลิเคชัน เว็บแบบดั้งเดิม ของคุณ เพียงทำตามขั้นตอนเหล่านี้:
- เปิด Logto Console ในส่วน "เริ่มต้นใช้งาน" ให้คลิกที่ลิงก์ "ดูทั้งหมด" เพื่อเปิดรายการเฟรมเวิร์กของแอปพลิเคชัน หรือคุณสามารถไปที่ Logto Console > Applications แล้วคลิกปุ่ม "สร้างแอปพลิเคชัน"
- ในหน้าต่างที่เปิดขึ้น ให้คลิกที่ส่วน "เว็บแบบดั้งเดิม" หรือกรองเฟรมเวิร์ก "เว็บแบบดั้งเดิม" ทั้งหมดที่มีโดยใช้ช่องกรองด่วนทางซ้ายมือ จากนั้นคลิกที่การ์ดเฟรมเวิร์ก "Go" เพื่อเริ่มสร้างแอปพลิเคชันของคุณ
- กรอกชื่อแอปพลิเคชัน เช่น "Bookstore" แล้วคลิก "สร้างแอปพลิเคชัน"
🎉 เยี่ยมมาก! คุณเพิ่งสร้างแอปพลิเคชันแรกของคุณใน Logto คุณจะเห็นหน้าข้อความแสดงความยินดีซึ่งมีคู่มือการเชื่อมต่ออย่างละเอียด ให้ทำตามคู่มือเพื่อดูประสบการณ์ที่จะเกิดขึ้นในแอปพลิเคชันของคุณ
ผสานรวม Go กับ Logto
- ตัวอย่างสาธิตต่อไปนี้สร้างขึ้นบน Gin Web Framework คุณสามารถผสาน Logto เข้ากับเฟรมเวิร์กอื่น ๆ ได้ด้วยขั้นตอนเดียวกัน
- โปรเจกต์ตัวอย่าง Go พร้อมใช้งานใน Go SDK repo ของเรา
การติดตั้ง
รันคำสั่งในไดเรกทอรีรากของโปรเจกต์:
# ติดตั้งแพ็กเกจ core สำหรับเข้าถึงค่าที่กำหนดไว้ล่วงหน้าและชนิดข้อมูล
go get github.com/logto-io/go/v2/core
# ติดตั้งแพ็กเกจ client สำหรับโต้ตอบกับ Logto
go get github.com/logto-io/go/v2/client
เพิ่มแพ็กเกจ github.com/logto-io/go/v2/core
และ github.com/logto-io/go/v2/client
ลงในโค้ดแอปพลิเคชันของคุณ:
// main.go
package main
import (
"github.com/gin-gonic/gin"
// เพิ่ม dependency
"github.com/logto-io/go/v2/core"
"github.com/logto-io/go/v2/client"
)
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.String(200, "Hello Logto!")
})
router.Run(":3000")
}
สร้าง session storage
ในเว็บแอปพลิเคชันแบบดั้งเดิม ข้อมูลการยืนยันตัวตนของผู้ใช้จะถูกเก็บไว้ในเซสชันของผู้ใช้
Logto SDK มี Storage
interface ให้คุณสามารถสร้างอะแดปเตอร์ Storage
ตามเฟรมเวิร์กเว็บของคุณ เพื่อให้ Logto SDK สามารถเก็บข้อมูลการยืนยันตัวตนของผู้ใช้ในเซสชันได้
เรา ไม่แนะนำ ให้ใช้เซสชันที่อิงกับคุกกี้ เนื่องจากข้อมูลการยืนยันตัวตนของผู้ใช้ที่ Logto เก็บไว้อาจมีขนาดเกินขีดจำกัดของคุกกี้ ในตัวอย่างนี้ เราใช้เซสชันที่อยู่ในหน่วยความจำ (memory-based session) คุณสามารถใช้ Redis, MongoDB หรือเทคโนโลยีอื่น ๆ ในการใช้งานจริงเพื่อเก็บเซสชันตามความเหมาะสม
Storage
type ใน Logto SDK มีดังนี้:
package client
type Storage interface {
GetItem(key string) string
SetItem(key, value string)
}
เราจะใช้ middleware github.com/gin-contrib/sessions เป็นตัวอย่างเพื่อแสดงขั้นตอนนี้
นำ middleware ไปใช้กับแอปพลิเคชัน เพื่อให้เราสามารถดึงเซสชันของผู้ใช้จาก context ของ request ใน route handler ได้:
package main
import (
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/memstore"
"github.com/gin-gonic/gin"
"github.com/logto-io/go/v2/client"
)
func main() {
router := gin.Default()
// ในตัวอย่างนี้เราใช้ session ที่อยู่ในหน่วยความจำ
store := memstore.NewStore([]byte("your session secret"))
router.Use(sessions.Sessions("logto-session", store))
router.GET("/", func(ctx *gin.Context) {
// ดึง session ของผู้ใช้
session := sessions.Default(ctx)
// ...
ctx.String(200, "Hello Logto!")
})
router.Run(":3000")
}
สร้างไฟล์ session_storage.go
กำหนด SessionStorage
และ implement interface Storage
ของ Logto SDK:
package main
import (
"github.com/gin-contrib/sessions"
)
type SessionStorage struct {
session sessions.Session
}
func (storage *SessionStorage) GetItem(key string) string {
value := storage.session.Get(key)
if value == nil {
return ""
}
return value.(string)
}
func (storage *SessionStorage) SetItem(key, value string) {
storage.session.Set(key, value)
storage.session.Save()
}
ตอนนี้ ใน route handler คุณสามารถสร้าง session storage สำหรับ Logto ได้ดังนี้:
session := sessions.Default(ctx)
sessionStorage := &SessionStorage{session: session}
เริ่มต้น LogtoClient
ก่อนอื่น สร้าง Logto config:
func main() {
// ...
logtoConfig := &client.LogtoConfig{
Endpoint: "<your-logto-endpoint>", // เช่น http://localhost:3001
AppId: "<your-application-id>",
AppSecret: "<your-application-secret>",
}
// ...
}
คุณสามารถค้นหาและคัดลอก "App Secret" ได้จากหน้ารายละเอียดแอปพลิเคชันใน Admin Console:

จากนั้น คุณสามารถสร้าง LogtoClient
สำหรับแต่ละคำขอของผู้ใช้โดยใช้ Logto config ข้างต้น:
func main() {
// ...
router.GET("/", func(ctx *gin.Context) {
// สร้าง LogtoClient
session := sessions.Default(ctx)
logtoClient := client.NewLogtoClient(
logtoConfig,
&SessionStorage{session: session},
)
// ใช้ Logto เพื่อควบคุมเนื้อหาของหน้าแรก
authState := "คุณยังไม่ได้เข้าสู่ระบบเว็บไซต์นี้ :("
if logtoClient.IsAuthenticated() {
authState = "คุณได้เข้าสู่ระบบเว็บไซต์นี้แล้ว! :)"
}
homePage := `<h1>Hello Logto</h1>` +
"<div>" + authState + "</div>"
ctx.Data(http.StatusOK, "text/html; charset=utf-8", []byte(homePage))
})
// ...
}
สร้างเส้นทาง sign-in
หลังจากกำหนดค่า redirect URI แล้ว เราจะเพิ่ม route sign-in
เพื่อจัดการคำขอลงชื่อเข้าใช้ และเพิ่มลิงก์สำหรับลงชื่อเข้าใช้ในหน้าแรกด้วย:
func main() {
// ...
// เพิ่มลิงก์สำหรับดำเนินการคำขอลงชื่อเข้าใช้ในหน้าแรก
router.GET("/", func(ctx *gin.Context) {
// ...
homePage := `<h1>Hello Logto</h1>` +
"<div>" + authState + "</div>" +
// เพิ่มลิงก์
`<div><a href="/sign-in">Sign In</a></div>`
ctx.Data(http.StatusOK, "text/html; charset=utf-8", []byte(homePage))
})
// เพิ่ม route สำหรับจัดการคำขอลงชื่อเข้าใช้
router.GET("/sign-in", func(ctx *gin.Context) {
session := sessions.Default(ctx)
logtoClient := client.NewLogtoClient(
logtoConfig,
&SessionStorage{session: session},
)
// คำขอลงชื่อเข้าใช้จะถูกจัดการโดย Logto
// ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง Redirect URI หลังจากลงชื่อเข้าใช้สำเร็จ
signInUri, err := logtoClient.SignIn("http://localhost:3000/callback")
if err != nil {
ctx.String(http.StatusInternalServerError, err.Error())
return
}
// เปลี่ยนเส้นทางผู้ใช้ไปยังหน้าลงชื่อเข้าใช้ของ Logto
ctx.Redirect(http.StatusTemporaryRedirect, signInUri)
})
// ...
}
ตอนนี้ เมื่อผู้ใช้ของคุณเข้าชม http://localhost:3000/sign-in
ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้ของ Logto
สร้างเส้นทาง callback
เมื่อผู้ใช้ลงชื่อเข้าใช้สำเร็จบนหน้าลงชื่อเข้าใช้ของ Logto แล้ว Logto จะเปลี่ยนเส้นทาง (redirect) ผู้ใช้ไปยัง Redirect URI
เนื่องจาก Redirect URI คือ http://localhost:3000/callback
เราจึงเพิ่ม route /callback
เพื่อจัดการ callback หลังจากลงชื่อเข้าใช้
func main() {
// ...
// เพิ่ม route สำหรับจัดการคำขอ callback หลังลงชื่อเข้าใช้
router.GET("/callback", func(ctx *gin.Context) {
session := sessions.Default(ctx)
logtoClient := client.NewLogtoClient(
logtoConfig,
&SessionStorage{session: session},
)
// คำขอ callback หลังลงชื่อเข้าใช้จะถูกจัดการโดย Logto
err := logtoClient.HandleSignInCallback(ctx.Request)
if err != nil {
ctx.String(http.StatusInternalServerError, err.Error())
return
}
// เปลี่ยนหน้าไปยังหน้าที่นักพัฒนาระบุไว้
// ตัวอย่างนี้จะพาผู้ใช้กลับไปยังหน้าแรก
ctx.Redirect(http.StatusTemporaryRedirect, "/")
})
// ...
}
สร้างเส้นทาง sign-out
เช่นเดียวกับขั้นตอนการลงชื่อเข้าใช้ เมื่อผู้ใช้ลงชื่อออก Logto จะเปลี่ยนเส้นทางผู้ใช้ไปยัง post sign-out redirect URI
ตอนนี้ มาเพิ่ม route sign-out
เพื่อจัดการคำขอลงชื่อออก และเพิ่มลิงก์สำหรับลงชื่อออกในหน้าแรกด้วย:
func main() {
// ...
// เพิ่มลิงก์สำหรับดำเนินการลงชื่อออกในหน้าแรก
router.GET("/", func(ctx *gin.Context) {
// ...
homePage := `<h1>Hello Logto</h1>` +
"<div>" + authState + "</div>" +
`<div><a href="/sign-in">Sign In</a></div>` +
// เพิ่มลิงก์
`<div><a href="/sign-out">Sign Out</a></div>`
ctx.Data(http.StatusOK, "text/html; charset=utf-8", []byte(homePage))
})
// เพิ่ม route สำหรับจัดการคำขอลงชื่อออก
router.GET("/sign-out", func(ctx *gin.Context) {
session := sessions.Default(ctx)
logtoClient := client.NewLogtoClient(
logtoConfig,
&SessionStorage{session: session},
)
// คำขอลงชื่อออกจะถูกจัดการโดย Logto
// ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง Post Sign-out Redirect URI หลังจากลงชื่อออก
signOutUri, signOutErr := logtoClient.SignOut("http://localhost:3000")
if signOutErr != nil {
ctx.String(http.StatusOK, signOutErr.Error())
return
}
ctx.Redirect(http.StatusTemporaryRedirect, signOutUri)
})
// ...
}
หลังจากผู้ใช้ดำเนินการลงชื่อออก Logto จะล้างข้อมูลการยืนยันตัวตน (authentication) ของผู้ใช้ทั้งหมดใน session
จุดตรวจสอบ: ทดสอบแอปพลิเคชันของคุณ
ตอนนี้คุณสามารถทดสอบแอปพลิเคชันของคุณได้แล้ว:
- รันแอปพลิเคชันของคุณ คุณจะเห็นปุ่มลงชื่อเข้าใช้
- คลิกปุ่มลงชื่อเข้าใช้ SDK จะเริ่มกระบวนการลงชื่อเข้าใช้และเปลี่ยนเส้นทางคุณไปยังหน้าลงชื่อเข้าใช้ของ Logto
- หลังจากที่คุณลงชื่อเข้าใช้แล้ว คุณจะถูกเปลี่ยนเส้นทางกลับไปยังแอปพลิเคชันของคุณและเห็นปุ่มลงชื่อออก
- คลิกปุ่มลงชื่อออกเพื่อเคลียร์ที่เก็บโทเค็นและออกจากระบบ
เพิ่มตัวเชื่อมต่อ OAuth2
เพื่อเปิดใช้งานการลงชื่อเข้าใช้อย่างรวดเร็วและเพิ่มอัตราการเปลี่ยนผู้ใช้ ให้เชื่อมต่อกับ Go ในฐานะผู้ให้บริการข้อมูลระบุตัวตน (Identity provider) ตัวเชื่อมต่อโซเชียลของ Logto ช่วยให้คุณสร้างการเชื่อมต่อนี้ได้ภายในไม่กี่นาที โดยสามารถกรอกพารามิเตอร์ได้หลายค่า
ในการเพิ่มตัวเชื่อมต่อโซเชียล ให้ทำตามขั้นตอนดังนี้:
- ไปที่ Console > Connectors > Social Connectors
- คลิก "Add social connector" และเลือก "OAuth2"
- ทำตามคู่มือ README กรอกข้อมูลที่จำเป็น และปรับแต่งการตั้งค่า

หากคุณกำลังทำตามคู่มือ Connector แบบ in-place คุณสามารถข้ามส่วนถัดไปได้
ตั้งค่า Standard OAuth 2.0 app
สร้างแอป OAuth ของคุณ
เมื่อคุณเปิดหน้านี้ เราเชื่อว่าคุณทราบแล้วว่าต้องการเชื่อมต่อกับผู้ให้บริการข้อมูลระบุตัวตนโซเชียลรายใด สิ่งแรกที่ต้องทำคือยืนยันว่าผู้ให้บริการข้อมูลระบุตัวตนรองรับโปรโตคอล OAuth ซึ่งเป็นข้อกำหนดเบื้องต้นสำหรับการตั้งค่าตัวเชื่อมต่อที่ถูกต้อง จากนั้นให้ทำตามคำแนะนำของผู้ให้บริการข้อมูลระบุตัวตนเพื่อสมัครและสร้างแอปที่เกี่ยวข้องสำหรับการอนุญาต OAuth
ตั้งค่าตัวเชื่อมต่อของคุณ
เรารองรับเฉพาะประเภท grant แบบ "Authorization Code" เพื่อความปลอดภัย และเหมาะสมกับกรณีการใช้งานของ Logto อย่างสมบูรณ์
clientId
และ clientSecret
สามารถดูได้ที่หน้ารายละเอียดแอป OAuth ของคุณ
clientId: client ID คือรหัสระบุที่ไม่ซ้ำกันซึ่งใช้ระบุแอปพลิเคชันลูกค้าในระหว่างการลงทะเบียนกับเซิร์ฟเวอร์อนุญาต รหัสนี้ใช้โดยเซิร์ฟเวอร์อนุญาตเพื่อตรวจสอบตัวตนของแอปพลิเคชันลูกค้าและเชื่อมโยงโทเค็นการเข้าถึงที่ได้รับอนุญาตกับแอปพลิเคชันลูกค้านั้น
clientSecret: client secret คือคีย์ลับที่ออกให้กับแอปพลิเคชันลูกค้าโดยเซิร์ฟเวอร์อนุญาตในระหว่างการลงทะเบียน แอปพลิเคชันลูกค้าจะใช้คีย์ลับนี้เพื่อยืนยันตัวตนกับเซิร์ฟเวอร์อนุญาตเมื่อขอโทเค็นการเข้าถึง client secret ถือเป็นข้อมูลลับและควรเก็บไว้อย่างปลอดภัยตลอดเวลา
tokenEndpointAuthMethod: วิธีการยืนยันตัวตนที่ token endpoint ใช้โดยแอปพลิเคชันลูกค้าเพื่อยืนยันตัวตนกับเซิร์ฟเวอร์อนุญาตเมื่อขอโทเค็นการเข้าถึง หากต้องการค้นหาวิธีที่รองรับ ให้ดูที่ฟิลด์ token_endpoint_auth_methods_supported
ที่มีอยู่ใน discovery endpoint ของ OpenID Connect ของผู้ให้บริการ OAuth 2.0 หรือดูเอกสารที่เกี่ยวข้องของผู้ให้บริการ OAuth 2.0
clientSecretJwtSigningAlgorithm (ไม่บังคับ): ใช้เฉพาะเมื่อ tokenEndpointAuthMethod
เป็น client_secret_jwt
อัลกอริทึมสำหรับลงนาม JWT ด้วย client secret ใช้โดยแอปพลิเคชันลูกค้าเพื่อลงนาม JWT ที่ส่งไปยังเซิร์ฟเวอร์อนุญาตระหว่างการขอโทเค็น
scope: พารามิเตอร์ scope ใช้เพื่อระบุชุดทรัพยากรและสิทธิ์ที่แอปพลิเคชันลูกค้าต้องการเข้าถึง โดยปกติ scope จะถูกกำหนดเป็นรายการค่าที่คั่นด้วยช่องว่างซึ่งแทนสิทธิ์เฉพาะ ตัวอย่างเช่น ค่า scope เป็น "read write" อาจหมายถึงแอปพลิเคชันลูกค้าขอสิทธิ์อ่านและเขียนข้อมูลของผู้ใช้
คุณควรค้นหา authorizationEndpoint
, tokenEndpoint
และ userInfoEndpoint
ในเอกสารของผู้ให้บริการโซเชียล
authenticationEndpoint: endpoint นี้ใช้เริ่มต้นกระบวนการยืนยันตัวตน โดยปกติจะเกี่ยวข้องกับการที่ผู้ใช้เข้าสู่ระบบและให้สิทธิ์แก่แอปพลิเคชันลูกค้าในการเข้าถึงทรัพยากรของตน
tokenEndpoint: endpoint นี้ใช้โดยแอปพลิเคชันลูกค้าเพื่อขอโทเค็นการเข้าถึงที่สามารถใช้เข้าถึงทรัพยากรที่ร้องขอได้ โดยปกติแอปพลิเคชันลูกค้าจะส่งคำขอไปยัง token endpoint พร้อม grant type และ authorization code เพื่อรับโทเค็นการเข้าถึง
userInfoEndpoint: endpoint นี้ใช้โดยแอปพลิเคชันลูกค้าเพื่อขอข้อมูลเพิ่มเติมเกี่ยวกับผู้ใช้ เช่น ชื่อเต็ม อีเมล หรือรูปโปรไฟล์ โดยปกติจะเข้าถึงหลังจากแอปพลิเคชันลูกค้าได้รับโทเค็นการเข้าถึงจาก token endpoint แล้ว
Logto ยังมีฟิลด์ profileMap
ให้ผู้ใช้ปรับแต่งการแมปข้อมูลจากโปรไฟล์ของผู้ให้บริการโซเชียล ซึ่งมักจะไม่เป็นมาตรฐาน คีย์คือชื่อฟิลด์โปรไฟล์ผู้ใช้มาตรฐานของ Logto และค่าที่ตรงกันควรเป็นชื่อฟิลด์ของโปรไฟล์โซเชียล ในปัจจุบัน Logto สนใจเฉพาะ 'id', 'name', 'avatar', 'email' และ 'phone' จากโปรไฟล์โซเชียล โดย 'id' เป็นฟิลด์ที่จำเป็นและฟิลด์อื่นเป็นตัวเลือก
responseType
และ grantType
สามารถเป็นค่า FIXED ได้เฉพาะกับ authorization code grant type ดังนั้นเราจึงตั้งให้เป็นตัวเลือกและจะเติมค่าเริ่มต้นให้อัตโนมัติ
ตัวอย่างเช่น คุณสามารถดู Google user profile response และดังนั้น profileMap
ควรเป็นแบบนี้:
{
"id": "sub",
"avatar": "picture"
}
เรามีคีย์ customConfig
(ไม่บังคับ) สำหรับใส่พารามิเตอร์ที่คุณปรับแต่งเอง
ผู้ให้บริการข้อมูลระบุตัวตนโซเชียลแต่ละรายอาจมีความแตกต่างจากมาตรฐาน OAuth หากผู้ให้บริการของคุณยึดตามมาตรฐาน OAuth อย่างเคร่งครัด คุณไม่จำเป็นต้องสนใจ customConfig
ประเภทการตั้งค่า
ชื่อ | ประเภท | จำเป็น |
---|---|---|
authorizationEndpoint | string | true |
userInfoEndpoint | string | true |
clientId | string | true |
clientSecret | string | true |
tokenEndpointResponseType | enum | false |
responseType | string | false |
grantType | string | false |
tokenEndpoint | string | false |
scope | string | false |
customConfig | Record<string, string> | false |
profileMap | ProfileMap | false |
ฟิลด์ ProfileMap | ประเภท | จำเป็น | ค่าเริ่มต้น |
---|---|---|---|
id | string | false | id |
name | string | false | name |
avatar | string | false | avatar |
string | false | ||
phone | string | false | phone |
การตั้งค่าทั่วไป
ต่อไปนี้เป็นการตั้งค่าทั่วไปที่แม้จะไม่ขัดขวางการเชื่อมต่อกับผู้ให้บริการข้อมูลระบุตัวตนของคุณ แต่ก็อาจมีผลต่อประสบการณ์การยืนยันตัวตนของผู้ใช้ปลายทาง
ชื่อและโลโก้ปุ่มโซเชียล
หากคุณต้องการแสดงปุ่มโซเชียลในหน้าลงชื่อเข้าใช้ คุณสามารถตั้งค่า ชื่อ และ โลโก้ (โหมดมืดและโหมดสว่าง) ของผู้ให้บริการข้อมูลระบุตัวตนโซเชียล เพื่อช่วยให้ผู้ใช้จดจำตัวเลือกเข้าสู่ระบบโซเชียลได้
ชื่อผู้ให้บริการข้อมูลระบุตัวตน
ตัวเชื่อมต่อโซเชียลแต่ละตัวจะมีชื่อผู้ให้บริการข้อมูลระบุตัวตน (IdP) เฉพาะเพื่อแยกแยะตัวตนผู้ใช้ ตัวเชื่อมต่อทั่วไปจะใช้ชื่อ IdP แบบคงที่ แต่ตัวเชื่อมต่อแบบกำหนดเองต้องใช้ค่าที่ไม่ซ้ำกัน ดูข้อมูลเพิ่มเติมเกี่ยวกับ ชื่อ IdP
ซิงค์ข้อมูลโปรไฟล์
ในตัวเชื่อมต่อ OAuth คุณสามารถตั้งค่านโยบายการซิงค์ข้อมูลโปรไฟล์ เช่น ชื่อผู้ใช้และรูปโปรไฟล์ เลือกได้ดังนี้:
- ซิงค์เฉพาะตอนสมัครสมาชิก: ดึงข้อมูลโปรไฟล์ครั้งเดียวเมื่อผู้ใช้ลงชื่อเข้าใช้ครั้งแรก
- ซิงค์ทุกครั้งที่ลงชื่อเข้าใช้: อัปเดตข้อมูลโปรไฟล์ทุกครั้งที่ผู้ใช้ลงชื่อเข้าใช้
เก็บโทเค็นเพื่อเข้าถึง API ของบุคคลที่สาม (ไม่บังคับ)
หากคุณต้องการเข้าถึง API ของผู้ให้บริการข้อมูลระบุตัวตนและดำเนินการต่าง ๆ ด้วยการอนุญาตของผู้ใช้ (ไม่ว่าจะผ่าน social sign-in หรือการเชื่อมบัญชี) Logto จำเป็นต้องขอ scope ของ API ที่ต้องการและเก็บโทเค็นไว้
- เพิ่ม scope ที่ต้องการในฟิลด์ scope ตามคำแนะนำข้างต้น
- เปิดใช้งาน Store tokens for persistent API access ในตัวเชื่อมต่อ OAuth ของ Logto Logto จะเก็บโทเค็นการเข้าถึงไว้ใน Secret Vault อย่างปลอดภัย
- สำหรับผู้ให้บริการข้อมูลระบุตัวตน OAuth/OIDC มาตรฐาน ต้องใส่ scope
offline_access
เพื่อขอโทเค็นรีเฟรช ป้องกันการขอความยินยอมจากผู้ใช้ซ้ำ
เก็บ client secret ของคุณให้ปลอดภัยและอย่าเปิดเผยในโค้ดฝั่งไคลเอนต์ หากถูกเปิดเผย ให้สร้างใหม่ทันทีในหน้าตั้งค่าแอปของผู้ให้บริการข้อมูลระบุตัวตนของคุณ
ใช้งานตัวเชื่อมต่อ OAuth
เมื่อคุณสร้างตัวเชื่อมต่อ OAuth และเชื่อมต่อกับผู้ให้บริการข้อมูลระบุตัวตนแล้ว คุณสามารถนำไปใช้ในกระบวนการสำหรับผู้ใช้ปลายทาง เลือกตัวเลือกที่ตรงกับความต้องการของคุณ:
เปิดใช้งานปุ่ม social sign-in
- ใน Logto Console ไปที่ ประสบการณ์การลงชื่อเข้าใช้ > สมัครสมาชิกและลงชื่อเข้าใช้
- เพิ่มตัวเชื่อมต่อ OAuth ในส่วน Social sign-in เพื่อให้ผู้ใช้ยืนยันตัวตนกับผู้ให้บริการข้อมูลระบุตัวตนของคุณ
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ประสบการณ์ social sign-in
เชื่อมหรือยกเลิกการเชื่อมบัญชีโซเชียล
ใช้ Account API เพื่อสร้างศูนย์บัญชีผู้ใช้แบบกำหนดเองในแอปของคุณ ให้ผู้ใช้ที่ลงชื่อเข้าใช้เชื่อมหรือยกเลิกการเชื่อมบัญชีโซเชียลของตน ดูตัวอย่างการใช้งาน Account API
สามารถเปิดใช้งานตัวเชื่อมต่อ OAuth เฉพาะสำหรับการเชื่อมบัญชีและเข้าถึง API ได้ โดยไม่ต้องเปิดใช้งานสำหรับ social sign-in ก็ได้
เข้าถึง API ของผู้ให้บริการข้อมูลระบุตัวตนและดำเนินการต่าง ๆ
แอปพลิเคชันของคุณสามารถดึงโทเค็นการเข้าถึงที่เก็บไว้จาก Secret Vault เพื่อเรียกใช้ API ของผู้ให้บริการข้อมูลระบุตัวตนและทำงาน backend อัตโนมัติ ความสามารถเฉพาะขึ้นอยู่กับผู้ให้บริการข้อมูลระบุตัวตนและ scope ที่คุณร้องขอ ดูคู่มือการดึงโทเค็นที่เก็บไว้เพื่อเข้าถึง API
จัดการข้อมูลระบุตัวตนโซเชียลของผู้ใช้
หลังจากผู้ใช้เชื่อมบัญชีโซเชียลแล้ว ผู้ดูแลระบบสามารถจัดการการเชื่อมต่อนั้นใน Logto Console ได้ดังนี้:
- ไปที่ Logto console > การจัดการผู้ใช้ และเปิดโปรไฟล์ของผู้ใช้
- ในส่วน Social connections ค้นหารายการผู้ให้บริการข้อมูลระบุตัวตนและคลิก จัดการ
- ในหน้านี้ ผู้ดูแลระบบสามารถจัดการการเชื่อมต่อโซเชียลของผู้ใช้ ดูข้อมูลโปรไฟล์ทั้งหมดที่ได้รับและซิงค์จากบัญชีโซเชียล และตรวจสอบสถานะโทเค็นการเข้าถึง
การตอบกลับ access token ของผู้ให้บริการข้อมูลระบุตัวตนบางรายจะไม่มีข้อมูล scope ที่เฉพาะเจาะจง ดังนั้น Logto จึงไม่สามารถแสดงรายการสิทธิ์ที่ผู้ใช้อนุญาตได้โดยตรง อย่างไรก็ตาม ตราบใดที่ผู้ใช้ได้ให้ความยินยอมกับ scope ที่ร้องขอระหว่างการอนุญาต แอปพลิเคชันของคุณจะมีสิทธิ์ที่เกี่ยวข้องเมื่อเข้าถึง OAuth API
บันทึกการตั้งค่าของคุณ
โปรดตรวจสอบให้แน่ใจว่าคุณได้กรอกค่าที่จำเป็นในพื้นที่การตั้งค่าตัวเชื่อมต่อ Logto เรียบร้อยแล้ว คลิก "บันทึกและเสร็จสิ้น" (หรือ "บันทึกการเปลี่ยนแปลง") และตัวเชื่อมต่อ OAuth2 ควรพร้อมใช้งานแล้ว
เปิดใช้งานตัวเชื่อมต่อ OAuth2 ในประสบการณ์การลงชื่อเข้าใช้
เมื่อคุณสร้างตัวเชื่อมต่อโซเชียลสำเร็จแล้ว คุณสามารถเปิดใช้งานเป็นปุ่ม "ดำเนินการต่อด้วย OAuth2" ในประสบการณ์การลงชื่อเข้าใช้ (Sign-in Experience) ได้
- ไปที่ Console > ประสบการณ์การลงชื่อเข้าใช้ > สมัครและลงชื่อเข้าใช้
- (ไม่บังคับ) เลือก "ไม่เกี่ยวข้อง" สำหรับตัวระบุการสมัคร หากคุณต้องการเฉพาะการเข้าสู่ระบบโซเชียล
- เพิ่มตัวเชื่อมต่อ OAuth2 ที่ตั้งค่าไว้แล้วในส่วน "เข้าสู่ระบบโซเชียล" (Social sign-in)

การทดสอบและการตรวจสอบความถูกต้อง
กลับไปที่แอป Go ของคุณ ตอนนี้คุณควรจะสามารถลงชื่อเข้าใช้ด้วย OAuth2 ได้แล้ว ขอให้สนุก!
อ่านเพิ่มเติม
กระบวนการสำหรับผู้ใช้ปลายทาง: Logto มีโฟลว์การยืนยันตัวตนสำเร็จรูปพร้อมใช้งาน รวมถึง MFA และ Enterprise SSO พร้อม API อันทรงพลังสำหรับการปรับแต่งการตั้งค่าบัญชี การตรวจสอบความปลอดภัย และประสบการณ์แบบหลายผู้เช่า (multi-tenant) ได้อย่างยืดหยุ่น
การอนุญาต (Authorization): การอนุญาต (Authorization) กำหนดว่าผู้ใช้สามารถทำอะไรหรือเข้าถึงทรัพยากรใดได้บ้างหลังจากได้รับการยืนยันตัวตนแล้ว สำรวจวิธีปกป้อง API ของคุณสำหรับแอปเนทีฟและแอปหน้าเดียว (SPA) และการใช้งานการควบคุมการเข้าถึงตามบทบาท (RBAC)
องค์กร (Organizations): ฟีเจอร์องค์กรมีประสิทธิภาพอย่างยิ่งใน SaaS แบบหลายผู้เช่าและแอป B2B โดยช่วยให้สร้างผู้เช่า จัดการสมาชิก RBAC ระดับองค์กร และ Just-in-Time Provisioning ได้
ชุดบทความ Customer IAM: บทความต่อเนื่องเกี่ยวกับการจัดการข้อมูลระบุตัวตนและการเข้าถึงของลูกค้า (Customer IAM) ตั้งแต่ระดับพื้นฐาน 101 ไปจนถึงหัวข้อขั้นสูงและอื่น ๆ