JavaScript tarayıcı SDK'sı

@keenauth/js, KeenAuth'un tarayıcı çekirdeğidir. Kullanıcıları tek sayfalık uygulamanıza giriş yaptırır, belirteçlerini saklar ve API'nizi çağırır. Çalışma zamanı bağımlılığı yoktur ve React bileşenleri bunun üzerine kuruludur. Paket henüz npm'de yayımlanmamıştır.

Yönlendirme ile giriş yap

SDK, standart bir OpenID Connect genel istemcisidir:

import { KeenAuth } from "@keenauth/js";

const auth = new KeenAuth({
  issuer: "https://acme.eu.keenauth.app", // your environment's issuer, exactly
  clientId: "app_01j9zzzzzzzzzzzzzzzzzzzz",
  redirectUri: "https://app.acme.example/callback",
  postLogoutRedirectUri: "https://app.acme.example/",
});

// On your sign-in button:
await auth.signInRedirect({ appState: "/orders" });

// On https://app.acme.example/callback:
const { appState } = await auth.handleRedirectCallback();

handleRedirectCallback bir yanıtı yalnızca bir kez kabul eder. Şu durumlarda KeenAuthError ile başarısız olur:

Sunucunun geri gönderdiği bir hata, OAuth error kodunu taşıyan bir KeenAuthOAuthError olarak yükseltilir.

API'nizi çağırın

API'niz için bir erişim belirteci almak üzere, API tanımlayıcısını resource olarak geçin (RFC 8707). Bu değer yetkilendirme isteğinde, kod değişiminde ve her yenilemede gönderilir; belirtecin aud değeri bu tanımlayıcıdır:

const auth = new KeenAuth({
  issuer: "https://acme.eu.keenauth.app",
  clientId: "app_01j9zzzzzzzzzzzzzzzzzzzz",
  redirectUri: "https://app.acme.example/callback",
  resource: "https://api.acme.example", // your API's identifier
  scope: "openid profile email offline_access messages:read",
});
const res = await auth.authorizedFetch("https://api.acme.example/v1/orders");

// Or take the token yourself; it is refreshed when it is about to expire.
const token = await auth.getAccessToken();

authorizedFetch, belirtece bağlı taze bir kanıtla Authorization: DPoP gönderir. Sunucu bir DPoP nonce isterse, o nonce ile bir kez yeniden dener. Eşzamanlı çağrılar tek bir yenileme isteğini paylaşır ve her yenileme yenileme belirtecini döndürür. Bu belirteçleri API'nizde doğrulamak için bkz. API'nizde belirteçleri doğrulama.

Çıkış yap

await auth.signOut();

signOut belirteçleri siler ve yenileme belirtecini iptal eder. Ardından tarayıcıyı ortamınızın çıkış uç noktasına yönlendirir; bu uç nokta da onu postLogoutRedirectUri adresine geri döndürür.

Belirteçlerin tutulduğu yer

Gömülü giriş

Aynı nesne, gömülü bileşenlere bir ön yüz API istemcisi de sağlar:

Bu çağrılar ortamınızın çerezlerini ve bir CSRF üstbilgisini kullanır. Sunucu bunları yalnızca ortamın kendi giriş kaynağından kabul eder.

Yönlendirme olmadan giriş yap

Giriş kaynağınızın dışındaki bir sayfada, işlemi clientId'nizle başlatın. SDK bunu çerezler yerine kendi DPoP anahtarına bağlar:

let tx = await auth.transactions.create({ client_id: "app_01j9...", organization: "acme" });
tx = await auth.transactions.step("identifier", { identifier: "ada@acme.example" });
tx = await auth.transactions.step("password", { password });
if (tx.state === "completed") await auth.complete(tx); // { kind: "signed_in" }

Kendi kaynağınızdan hesap çağrıları

Kullanıcı giriş yaptıktan ve SDK bir yenileme belirteci tuttuktan sonra (varsayılan kapsam offline_access ister), me ve organizations çağrıları artık giriş sunucusunun oturum çerezine ihtiyaç duymaz:

Sunucu kuralları için bkz. Ön yüz API erişim belirteci.

Kuruluşu değiştirme

organizations.switch(orgId), giriş yapmış kullanıcıyı sayfa yenilemeden başka bir kuruluşa taşır. organizations.listMine() çıktısından bir kuruluşun org_… kimliğini geçin:

const { data } = await auth.organizations.listMine();
await auth.organizations.switch(data[1].id);

Bugünkü sınırlar