Skip to content

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์•ฑ ํ†ตํ•ฉ ํŠธ๋ž™ โ€‹

iOS ยท Android ยท Flutter ยท React Native ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์—์„œ logi ๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๊ธธ.

์ด ํŠธ๋ž™์ด ๋งž๋‚˜์š”?

ํ•ต์‹ฌ ์•ฝ์† 4์ค„ โ€‹

  1. Public client + PKCE ํ•„์ˆ˜. client_secret ๋ชจ๋ฐ”์ผ์— ๋ชป ๋ฐ•์ง€ ๋งˆ์„ธ์š”.
  2. redirect_uri ๋Š” custom scheme 1๊ฐœ โ€” ์˜ˆ: com.example.app://oauth/1pass/callback
  3. app-to-app first, ์ธ์•ฑ ๋ธŒ๋ผ์šฐ์ € fallback โ€” ์‚ฌ์šฉ์ž๊ฐ€ ์นดํ†ก/๋„ค์ด๋ฒ„ ์ธ์•ฑ์—์„œ ๋“ค์–ด์™€๋„ ๋™์ž‘.
  4. ์•ฑ RP ์™€ ์›น RP ๋Š” ๋ถ„๋ฆฌ โ€” ๊ฐ™์€ client_id ์— ๋ชจ๋ฐ”์ผ+์›น redirect ์„ž์ง€ ๋งˆ์„ธ์š”. ์ž์„ธํžˆ: ๊ณตํ†ต/Public Clients ยท Surface ๋ณ„ RP ๋ถ„๋ฆฌ

Step 1 ยท ์•ฑ ๋“ฑ๋ก โ€‹

client_type: public ์œผ๋กœ RP ํ•œ ๊ฐœ ๋“ฑ๋ก. ์ฝ˜์†” ๋˜๋Š” API ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ.

Step 2 ยท ํ”Œ๋žซํผ๋ณ„ Quickstart โ€‹

iOS โ€” LogiAuth Swift Package (๊ถŒ์žฅ) โ€‹

iOS ๋Š” ๊ณต์‹ Swift SDK LogiAuth 0.1.2 ๊ฐ€ PKCE ยท ASWebAuthenticationSession ยท ์ธ์•ฑ escape ยท keychain ๋ณด๊ด€๊นŒ์ง€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. roll-your-own ๋ณด๋‹ค ๋จผ์ € SDK ๋ฅผ ์‹œ๋„ํ•˜์„ธ์š”.

swift
// Package.swift
.package(url: "https://github.com/1pass-dev/logi.git", exact: "0.1.2"),

// App.swift
import LogiAuth

@main
struct MyApp: App {
  init() {
    LogiAuth.configure(LogiAuthConfig(
      clientId: "logi_xxx",
      redirectURI: URL(string: "myapp://oauth/1pass/callback")!
    ))
  }

  var body: some Scene {
    WindowGroup {
      ContentView()
        .onOpenURL { url in _ = LogiAuth.handle(url) }
    }
  }
}

// ์–ด๋””์„œ๋“ 
let result = try await LogiAuth.signIn()

.onOpenURL { url in _ = LogiAuth.handle(url) } ๋„ ์žŠ์ง€ ๋งˆ์„ธ์š” โ€” ๋กœ๊ทธ์ธ ์ฝœ๋ฐฑ์„ SDK ๊ฐ€ ๋ฐ›์•„ ํ† ํฐ ๊ตํ™˜์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ํ†ตํ•ฉ + ์—๋Ÿฌ ๋ถ„๋ฅ˜ โ†’ Swift quickstart

๊ทธ ์™ธ ํ”Œ๋žซํผ โ€‹

๋ณธ์ธ ์Šคํƒ์˜ ํŽ˜์ด์ง€ ํ•œ ๊ฐœ๋งŒ ๋”ฐ๋ผ๊ฐ€์„ธ์š”. ๋‚˜๋จธ์ง€๋Š” ๊ฐ™์€ ํŒจํ„ด์˜ ๋ฏธ๋Ÿฌ์ž…๋‹ˆ๋‹ค.

์Šคํƒ๊ฐ€์ด๋“œSDK / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
iOS (Swift)integrations/swiftLogiAuth 0.1.2 (๊ถŒ์žฅ) ยท ๋˜๋Š” roll-your-own ASWebAuthenticationSession + CryptoKit
Android (Kotlin)integrations/androidLogiAuth Kotlin SDK (๊ถŒ์žฅ) ยท ๋˜๋Š” hand-rolled Custom Tabs + DataStore + Keystore
Flutterintegrations/flutterflutter_web_auth_2 + flutter_secure_storage
React Nativeintegrations/react-nativereact-native-app-auth + react-native-keychain

Android ์ž๊ฒฉ์ฆ๋ช… ๋ถ„๋ฆฌ ๋ณด๊ด€

Android (Kotlin) โ€” Canonical/Merge ํŽ˜์ด์ง€๋Š” canonical_sub / linked_subs ์ฒ˜๋ฆฌ + ์ž๊ฒฉ์ฆ๋ช… ๋ถ„๋ฆฌ ๋ณด๊ด€ ํŒจํ„ด์„ ๋”ฐ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์‹ ๊ทœ ํ†ตํ•ฉ์ด๋ฉด Step 2 ๊ฐ€์ด๋“œ ๋๋‚ธ ๋’ค ์ฝ์œผ์„ธ์š”.

Step 3 ยท ๋ชจ๋ฐ”์ผ ํŠนํ™” ํ•จ์ • ํ”ผํ•˜๊ธฐ โ€‹

Step 4 ยท ๋นŒ๋“œ ์ „ ์ฒดํฌ โ€‹

๊ณตํ†ต ๋ ˆํผ๋Ÿฐ์Šค (ํŠธ๋ž™ ๋ฌด๊ด€) โ€‹


AI ์—๊ฒŒ ํ†ต์งธ๋กœ ๋˜์ง€๊ธฐ โ€‹

@/llms-full.txt ๋ฅผ Claude Code ยท Cursor ยท Codex ์— ๋ถ™์ด๊ณ  ๋‹ค์Œ ํ•œ ์ค„:

"logi 1pass ๋ฅผ [iOS Swift / Flutter / Android Kotlin / RN] ์•ฑ์— RP ๋กœ ํ†ตํ•ฉํ•ด์ค˜. public client + PKCE ๊ธฐ์ค€."

โ†’ Quickstart, env, redirect_uri ๋“ฑ๋ก, ์ฝœ๋ฐฑ ํ•ธ๋“ค๋Ÿฌ๊นŒ์ง€ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

MIT License ยท Identity๊ฐ€ ์ œํ’ˆ์˜ ์‹ ๋ขฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.