PushizoDocs
Kullanıcılar & segmentler

JWT ile kimlik doğrulama (SDK identity verification)

Kullanıcı kimliğinizi (external_id) SDK'ya verirken başkasının kimliğine bürünülmesini önlemek için kanıt istenir. İki yöntem vardır ve app ayarında seçilir (ADR-0023 §9):

Kullanıcı kimliğinizi (external_id) SDK'ya verirken başkasının kimliğine bürünülmesini önlemek için kanıt istenir. İki yöntem vardır ve app ayarında seçilir (docs/adr/0023-kurumsal-kimlik-sso-scim-jwt.md §9):

ModKanıt
hmac (varsayılan)identity_hash = HMAC-SHA256(sdk_secret, external_id) — süresiz
jwtSunucunuzda ES256 ile imzalanan, en çok 24 saat geçerli JWT
bothİkisinden biri (geçiş dönemi)

Ayarlar → App → JWT kimlik doğrulama bölümünden modu seçin ve genel anahtarınızı ekleyin. "Kimlik doğrulama zorunlu" açıksa seçilen türde kanıt olmayan istekler 403 alır.

1. Anahtar çifti üretin

openssl ecparam -name prime256v1 -genkey -noout -out hs-identity.pem
```text
```bash
openssl ec -in hs-identity.pem -pubout -out hs-identity.pub.pem
```text

`hs-identity.pub.pem` içeriğini panele (veya `POST /v1/apps/{appId}/identity-keys` ile) ekleyin; size bir `kid` verilir. Özel anahtar **yalnızca sunucunuzda** kalır; Pushizo'ya gönderilmez (özel anahtar içeren istek reddedilir).

## 2. Belirteci sunucunuzda üretin

Talepler: `sub` = external_id, `aud` = app kimliği, `iat`, `exp` (en çok 24 saat); başlıkta `alg: ES256` ve `kid`.

```ts
import { Pushizo } from '@pushizo/node';
const jwt = Pushizo.identityToken({ privateKey: process.env.HS_IDENTITY_KEY!, kid: 'main', appId: 'app_…', externalId: user.id, expiresInSeconds: 3600 });
```text

```php
$jwt = \Pushizo\Client::identityToken(getenv('HS_IDENTITY_KEY'), 'main', 'app_…', $user->id, 3600);
```text

```python
from pushizo import identity_token  # pip install "pushizo[jwt]"
jwt = identity_token(os.environ["HS_IDENTITY_KEY"], "main", "app_…", user.id, expires_in=3600)
```text

```go
jwt, err := pushizo.IdentityToken(pushizo.IdentityTokenOptions{PrivateKeyPEM: key, Kid: "main", AppID: "app_…", ExternalID: user.ID, TTL: time.Hour})
```text

```java
String jwt = io.pushizo.IdentityToken.create(pem, "main", "app_…", user.getId(), Duration.ofHours(1));
```text

```csharp
var jwt = Pushizo.IdentityToken.Create(pem, "main", "app_…", user.Id, TimeSpan.FromHours(1));
```text

```ruby
jwt = Pushizo.identity_token(pem, kid: "main", app_id: "app_…", external_id: user.id, expires_in: 3600)
```text

## 3. SDK'ya verin

Uygulamanız belirteci kendi oturumlu API'nizden alır ve girişte SDK'ya verir. SDK belirteci tüm SDK isteklerinde `Authorization: Bearer` başlığıyla taşır (URL'ye ve gövdeye yazılmaz).

```js
await Pushizo.login(user.id, { jwt });
// Süresi dolmadan yenileyin:
await Pushizo.updateUserJwt(newJwt);
```text

Mobil SDK'lar ve köprüler aynı API'yi sunar (`login(externalId, jwt)`, `updateUserJwt(jwt)`); ayrıntı her SDK'nın belgesinde. Çıkışta (`logout`) belirteç silinir.

## Anahtar döndürme

Yeni anahtarı ekleyin (farklı `kid`), sunucunuzu yeni anahtarla imzalayacak şekilde güncelleyin, eski belirteçlerin süresi dolunca (en çok 24 saat) eski anahtarı **İptal et** ile kapatın. İptal edilen anahtarla imzalı belirteçler hemen reddedilir. Bir app'te en çok 10 etkin anahtar olabilir; birden çok anahtar varken başlıktaki `kid` zorunludur.

Bu sayfada