04.5 — Tek Tıkla Doğrudan Giriş (Direct Login SSO)
Kimin için: TALOST ID Kullanıcı Paneli üzerinden "Uygulamaya Git" butonuyla kullanıcılarını şifresiz açmak isteyen uygulamalar.
Ön koşul: Temel Kavramlar ve aktif bir web uygulaması.
Tahmini süre: 10 dakika.
Ne Öğreneceksiniz
- TALOST ID IdP-Initiated SSO mekanizmasını,
/panel/uygulamalar/[slug]/ssorotasının çalışma mantığını,- Uygulamanızın geri dönüş (callback) ucunda tek tıkla oturum açma desteği sağlamayı.
Nasıl Çalışır?
Kullanıcı id.talost.com/panel adresinde giriş yapmış durumdayken "Uygulamalarım" menüsünden bir ürününüzün kartına tıklar:
Diyagram (Mermaid)
sequenceDiagram
autonumber
actor User as Kullanıcı
participant Panel as TALOST ID Paneli (/panel)
participant SSO as SSO Yönlendirici (/sso)
participant App as Uygulamanız (/callback)
User->>Panel: "Uygulamaya Git" butonuna basar
Panel->>SSO: GET /panel/uygulamalar/{slug}/sso
SSO->>SSO: Lisans ve Bakım Modunu kontrol eder
SSO->>SSO: Kullanıcı adına doğrudan yetkilendirme kodu üretir
SSO-->>App: 302 Redirect (redirect_uri?code=XYZ&state=direct_login_ABC)
App->>App: Geri dönüşü yakalar, /oauth/token ile takas eder
App-->>User: Uygulama paneline yönlendirir
Uygulamanızda Yapılması Gerekenler
Standart SP-Initiated akışlarda uygulama kendi ürettiği state değerini çerezde arar. Ancak IdP üzerinden doğrudan yönlendirmede çerezde önceden saklanmış bir state bulunmaz.
Geri dönüş uç noktanızda (/api/auth/callback):
typescript
// app/api/auth/callback/route.ts
export async function GET(req: NextRequest) {
const { searchParams } = new URL(req.url);
const code = searchParams.get("code");
const state = searchParams.get("state");
const cookieStore = await cookies();
const savedState = cookieStore.get("talost_oauth_state")?.value;
const verifier = cookieStore.get("talost_pkce_verifier")?.value;
// 1. Durum: Uygulama içinden başlatılan normal PKCE akışı
if (savedState && state === savedState && verifier) {
// Standart token takası...
}
// 2. Durum: TALOST ID Panelinden tek tıkla doğrudan geliş (Direct Login)
else if (state && state.startsWith("direct_login_")) {
// Confidential istemci gizli anahtarı ile takas yapılır
const tokenRes = await fetch(`${process.env.TALOST_ISSUER}/oauth/token`, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
grant_type: "authorization_code",
client_id: process.env.TALOST_CLIENT_ID!,
client_secret: process.env.TALOST_CLIENT_SECRET!,
code: code!,
redirect_uri: process.env.TALOST_REDIRECT_URI!,
}),
});
const tokens = await tokenRes.json();
if (!tokenRes.ok) return NextResponse.json(tokens, { status: 400 });
// Oturumu başlat
cookieStore.set("session_user", JSON.stringify(tokens), { httpOnly: true, secure: true });
return NextResponse.redirect(new URL("/dashboard", req.url));
}
}
Güvenlik Notları
- TALOST ID, tek tıkla doğrudan girişte kullanıcının lisans durumunu (
entitlement) ve uygulamanın bakım modunu yönlendirme öncesinde kesin olarak doğrular. Kullanıcının lisansı yoksa veya uygulama bakımda ise doğrudan/oauth/bakimveya abonelik satın alma ekranına aktarılır. - Üretilen yetkilendirme kodları tek kullanımlıktır ve 5 dakika geçerlidir.
İlgili Sayfalar
Son doğrulama: 2026-10-04 · Kaynak: _envanter.md, src/app/panel/uygulamalar/[slug]/sso/route.ts
Son doğrulama: 2026-10-04 · Kaynak: `_envanter.md`, `src/app/panel/uygulamalar/[slug]/sso/route.ts`