Logto คือทางเลือกแทน Auth0 ที่ออกแบบมาสำหรับแอปและผลิตภัณฑ์ SaaS ยุคใหม่ โดยมีทั้งบริการ Cloud และ Open-source เพื่อช่วยให้คุณเปิดตัวระบบการจัดการเอกลักษณ์และการเข้าถึง (IAM) ได้อย่างรวดเร็ว สนุกกับการยืนยันตัวตน (การยืนยันตัวตน), การอนุญาต (การอนุญาต), และการจัดการหลายผู้เช่า ครบจบในที่เดียว
เราแนะนำให้เริ่มต้นด้วย tenant สำหรับการพัฒนาแบบฟรีบน Logto Cloud เพื่อให้คุณสามารถสำรวจฟีเจอร์ทั้งหมดได้อย่างง่ายดาย
ในบทความนี้ เราจะพาคุณไปทีละขั้นตอนเพื่อสร้างประสบการณ์ลงชื่อเข้าใช้ Okta enterprise SSO (การยืนยันตัวตนของผู้ใช้) อย่างรวดเร็วด้วย Android (Kotlin / Java) และ Logto
ข้อกำหนดเบื้องต้น
- มี Logto instance ที่พร้อมใช้งาน ดู หน้าแนะนำ เพื่อเริ่มต้นใช้งาน
- มีความรู้พื้นฐานเกี่ยวกับ Android (Kotlin / Java)
- มีบัญชี Okta enterprise SSO ที่ใช้งานได้
สร้างแอปพลิเคชันใน Logto
Logto สร้างขึ้นบนพื้นฐานของการยืนยันตัวตน OpenID Connect (OIDC) และการอนุญาต OAuth 2.0 โดยรองรับการจัดการข้อมูลระบุตัวตนแบบรวมศูนย์ข้ามหลายแอปพลิเคชัน ซึ่งมักเรียกว่า การลงชื่อเข้าใช้ครั้งเดียว (Single Sign-On; SSO)
ในการสร้างแอปพลิเคชัน แอปเนทีฟ ของคุณ เพียงทำตามขั้นตอนเหล่านี้:
- เปิด Logto Console ในส่วน "เริ่มต้นใช้งาน" ให้คลิกที่ลิงก์ "ดูทั้งหมด" เพื่อเปิดรายการเฟรมเวิร์กของแอปพลิเคชัน หรือคุณสามารถไปที่ Logto Console > Applications แล้วคลิกปุ่ม "สร้างแอปพลิเคชัน"
- ในหน้าต่างที่เปิดขึ้น ให้คลิกที่ส่วน "แอปเนทีฟ" หรือกรองเฟรมเวิร์ก "แอปเนทีฟ" ทั้งหมดที่มีโดยใช้ช่องกรองด่วนทางซ้ายมือ จากนั้นคลิกที่การ์ดเฟรมเวิร์ก "Android" เพื่อเริ่มสร้างแอปพลิเคชันของคุณ
- กรอกชื่อแอปพลิเคชัน เช่น "Bookstore" แล้วคลิก "สร้างแอปพลิเคชัน"
🎉 เยี่ยมมาก! คุณเพิ่งสร้างแอปพลิเคชันแรกของคุณใน Logto คุณจะเห็นหน้าข้อความแสดงความยินดีซึ่งมีคู่มือการเชื่อมต่ออย่างละเอียด ให้ทำตามคู่มือเพื่อดูประสบการณ์ที่จะเกิดขึ้นในแอปพลิเคชันของคุณ
ผสานรวม Android กับ Logto
- ตัวอย่างนี้อ้างอิงจาก View system และ View Model แต่แนวคิดเดียวกันนี้ใช้ได้กับ Jetpack Compose
- ตัวอย่างเขียนด้วย Kotlin แต่แนวคิดเดียวกันนี้ใช้ได้กับ Java
- มีโปรเจกต์ตัวอย่างทั้ง Kotlin และ Java ให้ดูใน SDK repository ของเรา
- วิดีโอแนะนำสามารถรับชมได้ที่ YouTube channel ของเรา
การติดตั้ง
ระดับ API ขั้นต่ำของ Android ที่รองรับโดย Logto Android SDK คือระดับ 24
ก่อนติดตั้ง Logto Android SDK โปรดตรวจสอบให้แน่ใจว่าได้เพิ่ม mavenCentral()
ในการตั้งค่าที่เก็บ repository ในไฟล์ build ของโปรเจกต์ Gradle แล้ว:
dependencyResolutionManagement {
repositories {
mavenCentral()
}
}
เพิ่ม Logto Android SDK ลงใน dependencies ของคุณ:
- Kotlin
- Groovy
dependencies {
implementation("io.logto.sdk:android:1.1.3")
}
dependencies {
implementation 'io.logto.sdk:android:1.1.3'
}
เนื่องจาก SDK ต้องการเข้าถึงอินเทอร์เน็ต คุณจำเป็นต้องเพิ่ม permission ต่อไปนี้ในไฟล์ AndroidManifest.xml
ของคุณ:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- เพิ่มสิทธิ์การใช้งานอินเทอร์เน็ต -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- การตั้งค่าอื่น ๆ... -->
</manifest>
เริ่มต้น LogtoClient
สร้างไฟล์ LogtoViewModel.kt
และเริ่มต้น LogtoClient
ใน view model นี้:
//...with other imports
import io.logto.sdk.android.LogtoClient
import io.logto.sdk.android.type.LogtoConfig
class LogtoViewModel(application: Application) : AndroidViewModel(application) {
// กำหนดค่า LogtoConfig
private val logtoConfig = LogtoConfig(
endpoint = "<your-logto-endpoint>",
appId = "<your-app-id>",
scopes = null,
resources = null,
usingPersistStorage = true,
)
// เริ่มต้น LogtoClient ด้วย config และ application
private val logtoClient = LogtoClient(logtoConfig, application)
companion object {
val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(
modelClass: Class<T>,
extras: CreationExtras
): T {
// ดึง Application object จาก extras
val application = checkNotNull(extras[APPLICATION_KEY])
return LogtoViewModel(application) as T
}
}
}
}
จากนั้น สร้าง LogtoViewModel
สำหรับ MainActivity.kt
ของคุณ:
//...with other imports
class MainActivity : AppCompatActivity() {
// สร้าง logtoViewModel โดยใช้ Factory
private val logtoViewModel: LogtoViewModel by viewModels { LogtoViewModel.Factory }
//...โค้ดอื่น ๆ
}
กำหนดค่า redirect URI
ไปที่หน้ารายละเอียดแอปพลิเคชันของ Logto Console เพิ่ม Redirect URI io.logto.android://io.logto.sample/callback
แล้วคลิก "บันทึกการเปลี่ยนแปลง" (Save changes)

ดำเนินการลงชื่อเข้าใช้และออกจากระบบ
ก่อนเรียก logtoClient.signIn
โปรดตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่า Redirect URI ใน Admin Console อย่างถูกต้องแล้ว
คุณสามารถใช้ logtoClient.signIn
เพื่อให้ผู้ใช้ลงชื่อเข้าใช้ และ logtoClient.signOut
เพื่อให้ผู้ใช้ออกจากระบบ
ตัวอย่างเช่น ในแอป Android:
//...with other imports
class LogtoViewModel(application: Application) : AndroidViewModel(application) {
// ...other codes
// เพิ่ม live data เพื่อสังเกตสถานะการยืนยันตัวตน
private val _authenticated = MutableLiveData(logtoClient.isAuthenticated)
val authenticated: LiveData<Boolean>
get() = _authenticated
fun signIn(context: Activity) {
logtoClient.signIn(context, "io.logto.android://io.logto.sample/callback") { logtoException ->
logtoException?.let { println(it) }
// อัปเดต live data
_authenticated.postValue(logtoClient.isAuthenticated)
}
}
fun signOut() {
logtoClient.signOut { logtoException ->
logtoException?.let { println(it) }
// อัปเดต live data
_authenticated.postValue(logtoClient.isAuthenticated)
}
}
}
จากนั้นเรียกใช้เมธอด signIn
และ signOut
ใน activity ของคุณ:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
//...other codes
// สมมติว่าคุณมีปุ่มที่มี id "sign_in_button" ใน layout ของคุณ
val signInButton = findViewById<Button>(R.id.sign_in_button)
signInButton.setOnClickListener {
logtoViewModel.signIn(this)
}
// สมมติว่าคุณมีปุ่มที่มี id "sign_out_button" ใน layout ของคุณ
val signOutButton = findViewById<Button>(R.id.sign_out_button)
signOutButton.setOnClickListener {
if (logtoViewModel.authenticated) { // ตรวจสอบว่าผู้ใช้ได้รับการยืนยันตัวตนหรือไม่
logtoViewModel.signOut()
}
}
// สังเกตสถานะการยืนยันตัวตนเพื่ออัปเดต UI
logtoViewModel.authenticated.observe(this) { authenticated ->
if (authenticated) {
// ผู้ใช้ได้รับการยืนยันตัวตนแล้ว
signInButton.visibility = View.GONE
signOutButton.visibility = View.VISIBLE
} else {
// ผู้ใช้ยังไม่ได้รับการยืนยันตัวตน
signInButton.visibility = View.VISIBLE
signOutButton.visibility = View.GONE
}
}
}
}
จุดตรวจสอบ: ทดสอบแอปพลิเคชันของคุณ
ตอนนี้คุณสามารถทดสอบแอปพลิเคชันของคุณได้แล้ว:
- รันแอปพลิเคชันของคุณ คุณจะเห็นปุ่มลงชื่อเข้าใช้
- คลิกปุ่มลงชื่อเข้าใช้ SDK จะเริ่มกระบวนการลงชื่อเข้าใช้และเปลี่ยนเส้นทางคุณไปยังหน้าลงชื่อเข้าใช้ของ Logto
- หลังจากที่คุณลงชื่อเข้าใช้แล้ว คุณจะถูกเปลี่ยนเส้นทางกลับไปยังแอปพลิเคชันของคุณและเห็นปุ่มลงชื่อออก
- คลิกปุ่มลงชื่อออกเพื่อเคลียร์ที่เก็บโทเค็นและออกจากระบบ
เพิ่มตัวเชื่อมต่อ Okta enterprise SSO
เพื่อให้ง่ายต่อการจัดการการเข้าถึงและได้รับการปกป้องในระดับองค์กรสำหรับลูกค้ารายใหญ่ของคุณ เชื่อมต่อกับ Android ในฐานะผู้ให้บริการข้อมูลระบุตัวตนแบบเฟเดอเรต (federated identity provider) ตัวเชื่อมต่อ Logto Enterprise SSO ช่วยให้คุณสร้างการเชื่อมต่อนี้ได้ภายในไม่กี่นาทีโดยการกรอกพารามิเตอร์เพียงไม่กี่รายการ
ในการเพิ่มตัวเชื่อมต่อ Enterprise SSO ให้ทำตามขั้นตอนดังนี้:

- คลิกปุ่ม "Add enterprise connector" และเลือกประเภทผู้ให้บริการ SSO ของคุณ เลือกจากตัวเชื่อมต่อสำเร็จรูปสำหรับ Microsoft Entra ID (Azure AD), Google Workspace, และ Okta หรือสร้างการเชื่อมต่อ SSO แบบกำหนดเองโดยใช้มาตรฐาน OpenID Connect (OIDC) หรือ SAML
- กำหนดชื่อที่ไม่ซ้ำกัน (เช่น SSO sign-in for Acme Company)

- ตั้งค่าการเชื่อมต่อกับ IdP ของคุณในแท็บ "Connection" ดูคู่มือด้านบนสำหรับแต่ละประเภทตัวเชื่อมต่อ

- ปรับแต่งประสบการณ์ SSO และ โดเมนอีเมล ขององค์กรในแท็บ "Experience" ผู้ใช้ที่ลงชื่อเข้าใช้ด้วยโดเมนอีเมลที่เปิดใช้ SSO จะถูกเปลี่ยนเส้นทางไปยังการยืนยันตัวตน SSO

- บันทึกการเปลี่ยนแปลง
ตั้งค่า OIDC application on Okta admin portal
ขั้นตอนที่ 1: สร้างแอป OIDC บน Okta admin portal
- ไปที่พอร์ทัลผู้ดูแลระบบ Okta และลงชื่อเข้าใช้ในฐานะผู้ดูแลระบบ
- ไปที่หน้า
Applications
/Applications
โดยใช้เมนูด้านข้าง - คลิกปุ่ม
Create App Integration
เพื่อสร้างแอป OIDC ใหม่ - เลือกตัวเลือก
OIDC - OpenID Connect
เป็นSign-in method
- เลือกตัวเลือก
Web Application
เป็นApplication type

คลิกปุ่ม Next
เพื่อดำเนินการต่อ
ขั้นตอนที่ 2: กำหนดค่าการตั้งค่าแอปพลิเคชัน
- กำหนด
App integration name
ซึ่งจะใช้เป็นตัวระบุของแอปพลิเคชัน OIDC ของคุณ - เพิ่ม
Sign-in redirect URIs
ใหม่โดยใช้ callback URL ของตัวเชื่อมต่อ Logto SSO
นี่คือ URI ที่ Okta จะเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้หลังจากการยืนยันตัวตน (Authentication) สำเร็จ เมื่อผู้ใช้ยืนยันตัวตนกับ IdP สำเร็จ IdP จะเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้กลับมาที่ URI ที่กำหนดนี้พร้อมกับรหัสการอนุญาต (authorization code) Logto จะดำเนินการยืนยันตัวตน (Authentication) ให้สมบูรณ์โดยอิงจากรหัสการอนุญาตที่ได้รับจาก URI นี้

- กำหนดผู้ใช้ให้กับแอปพลิเคชัน
ตามการตั้งค่า Assignments
คุณสามารถเลือกกำหนดแอปพลิเคชันให้กับผู้ใช้ทั้งหมด หรือเฉพาะผู้ใช้ / กลุ่มที่ต้องการ

คลิกปุ่ม Save
เพื่อบันทึกการตั้งค่าแอปพลิเคชัน
ขั้นตอนที่ 3: ตั้งค่าตัวเชื่อมต่อ Logto ด้วย client credentials
หลังจากสร้างแอปพลิเคชัน OIDC สำเร็จแล้ว คุณจะถูกเปลี่ยนเส้นทางไปยังหน้ารายละเอียดของแอปพลิเคชัน

คัดลอก client ID
และ client secret
แล้วกรอกลงในช่องที่เกี่ยวข้องบนแท็บ Connection
ของตัวเชื่อมต่อ SSO ของ Logto
ใช้โดเมน Okta ของคุณเป็น issuer
ตัวอย่าง: https://dev-12345678.okta.com
เมื่อกรอกข้อมูลครบทุกช่องแล้ว ให้คลิกปุ่ม Save
เพื่อบันทึกการตั้งค่าตัวเชื่อมต่อ
หากลิงก์ issuer
ที่คุณให้มาถูกต้อง คุณจะเห็นรายการการตั้งค่า Okta IdP ที่ถูกแยกแสดงแบบเต็มด้านล่างช่อง issuer
ขั้นตอนที่ 4: ขอบเขตเพิ่มเติม (ไม่บังคับ)
ขอบเขต (Scopes) กำหนดสิทธิ์ (Permissions) ที่แอปของคุณร้องขอจากผู้ใช้ และควบคุมว่าแอปของคุณสามารถเข้าถึงข้อมูลใดจากบัญชี Okta ของพวกเขาได้ การร้องขอสิทธิ์ Okta เพิ่มเติมจำเป็นต้องมีการกำหนดค่าทั้งสองฝั่ง:
ใน Okta admin console:
- ไปที่ Applications > Applications และเลือกแอป OIDC ของคุณ
- ไปที่แท็บ Assignments เพื่อให้แน่ใจว่าแอปของคุณสามารถเข้าถึงผู้ใช้และกลุ่มที่ต้องการได้
- สำหรับขอบเขตแบบกำหนดเอง ให้ไปที่ Security > API > Authorization Servers และเลือก authorization server ของคุณ
- เพิ่มขอบเขตแบบกำหนดเองหากจำเป็น:
- คลิก Scopes แล้วเลือก Add Scope
- กำหนดชื่อขอบเขต เช่น
okta.users.read
หรือokta.groups.read
สำหรับการเข้าถึง Okta APIs - กำหนดข้อกำหนดการขอความยินยอม (consent) สำหรับแต่ละขอบเขต
สำหรับรายการขอบเขตที่มีทั้งหมดและคำอธิบาย โปรดดูที่ เอกสาร Okta OIDC
ใน Logto Okta connector:
- Logto จะเพิ่มขอบเขต
openid
,profile
และemail
โดยอัตโนมัติเพื่อดึงข้อมูลตัวตนพื้นฐานของผู้ใช้ คุณสามารถเว้นว่างช่องScopes
ได้หากต้องการเพียงข้อมูลผู้ใช้พื้นฐาน - เพิ่ม
offline_access
ในช่องScopes
หากคุณต้องการจัดเก็บโทเค็นเพื่อเข้าถึง API แบบถาวร ขอบเขตนี้จะเปิดใช้งานโทเค็นรีเฟรช (Refresh token) สำหรับการเข้าถึง API ระยะยาว - เพิ่มขอบเขตเพิ่มเติม (คั่นด้วยช่องว่าง) ในช่อง
Scopes
เพื่อร้องขอข้อมูลเพิ่มเติมจาก Okta เช่นokta.users.read okta.groups.read
หากแอปของคุณร้องขอขอบเขตเหล่านี้เพื่อเข้าถึง Okta APIs และดำเนินการต่าง ๆ โปรดตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน Store tokens for persistent API access ใน Logto Okta connector ดูรายละเอียดในหัวข้อถัดไป
ขั้นตอนที่ 5: จัดเก็บโทเค็นเพื่อเข้าถึง Okta API (ไม่บังคับ)
หากคุณต้องการเข้าถึง Okta scopes และดำเนินการต่าง ๆ ด้วยการอนุญาตของผู้ใช้ Logto จำเป็นต้องขอขอบเขต (scopes) เฉพาะและจัดเก็บโทเค็น
- เพิ่มขอบเขตที่จำเป็นในหน้าตั้งค่าสิทธิ์ API ของ Okta developer console และในตัวเชื่อมต่อ Okta ของ Logto
- เปิดใช้งาน จัดเก็บโทเค็นสำหรับการเข้าถึง API แบบถาวร ในตัวเชื่อมต่อ Okta ของ Logto โดย Logto จะจัดเก็บ Okta access และ refresh tokens อย่างปลอดภัยใน Secret Vault
- เพื่อให้แน่ใจว่า refresh tokens จะถูกส่งกลับ ให้เพิ่มขอบเขต
offline_access
ในสิทธิ์ของแอป Okta ของคุณ และรวมไว้ในขอบเขตของตัวเชื่อมต่อ Okta ของ Logto ด้วย ขอบเขตนี้จะช่วยให้แอปของคุณสามารถเข้าถึงทรัพยากรได้เป็นระยะเวลานาน
ขั้นตอนที่ 6: ตั้งค่าโดเมนอีเมลและเปิดใช้งานตัวเชื่อมต่อ SSO
ระบุ email domains
ขององค์กรของคุณในแท็บ SSO experience
ของตัวเชื่อมต่อ Logto การดำเนินการนี้จะเปิดใช้งานตัวเชื่อมต่อ SSO เป็นวิธีการยืนยันตัวตนสำหรับผู้ใช้เหล่านั้น
ผู้ใช้ที่มีที่อยู่อีเมลในโดเมนที่ระบุจะถูกเปลี่ยนเส้นทางให้ใช้ตัวเชื่อมต่อ SSO ของคุณเป็นวิธีการยืนยันตัวตนเพียงวิธีเดียว
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างการเชื่อมต่อ OIDC กับ Okta โปรดดูที่ Create OIDC App Integrations
บันทึกการตั้งค่าของคุณ
โปรดตรวจสอบให้แน่ใจว่าคุณได้กรอกค่าที่จำเป็นในพื้นที่การตั้งค่าตัวเชื่อมต่อ Logto เรียบร้อยแล้ว คลิก "บันทึกและเสร็จสิ้น" (หรือ "บันทึกการเปลี่ยนแปลง") และตัวเชื่อมต่อ Okta enterprise SSO ควรพร้อมใช้งานแล้ว
เปิดใช้งานตัวเชื่อมต่อ Okta enterprise SSO ในประสบการณ์การลงชื่อเข้าใช้
คุณไม่จำเป็นต้องตั้งค่าตัวเชื่อมต่อองค์กร (enterprise connectors) ทีละตัว Logto ช่วยให้การผสานรวม SSO เข้ากับแอปพลิเคชันของคุณง่ายขึ้นเพียงคลิกเดียว
- ไปที่: Console > ประสบการณ์การลงชื่อเข้าใช้ > การสมัครและลงชื่อเข้าใช้
- เปิดใช้งานสวิตช์ "SSO สำหรับองค์กร (Enterprise SSO)"
- บันทึกการเปลี่ยนแปลง
เมื่อเปิดใช้งานแล้ว จะมีปุ่ม "การลงชื่อเข้าใช้ครั้งเดียว (Single Sign-On)" ปรากฏในหน้าลงชื่อเข้าใช้ของคุณ ผู้ใช้ระดับองค์กรที่มีโดเมนอีเมลที่เปิดใช้งาน SSO สามารถเข้าถึงบริการของคุณผ่านผู้ให้บริการข้อมูลระบุตัวตน (IdPs) ขององค์กรตนเอง


หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับประสบการณ์ผู้ใช้ SSO รวมถึง SSO ที่เริ่มต้นโดย SP และ SSO ที่เริ่มต้นโดย IdP โปรดดูที่ User flows: SSO สำหรับองค์กร (Enterprise SSO)
การทดสอบและการตรวจสอบความถูกต้อง
กลับไปที่แอป Android (Kotlin / Java) ของคุณ ตอนนี้คุณควรจะสามารถลงชื่อเข้าใช้ด้วย Okta enterprise SSO ได้แล้ว ขอให้สนุก!
อ่านเพิ่มเติม
กระบวนการสำหรับผู้ใช้ปลายทาง: 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 ไปจนถึงหัวข้อขั้นสูงและอื่น ๆ