Przejdź do głównej zawartości

Tokeny dostępu do tematu

Tokeny dostępu do tematu zapewniają uwierzytelnianie w zakresie dla publikowania do konkretnych tematów prywatnych.

Porównanie metod uwierzytelniania

Szczegółowe porównanie tokenów dostępu do tematów z kluczami API znajdziesz w Uwierzytelnianie.

Przegląd

Dlaczego warto używać tokenów dostępu do tematu?

  • Zakres tematu - Działa tylko dla konkretnego tematu
  • Bezpieczny - Ograniczone poziomy dostępu (tylko odczyt, tylko zapis lub odczyt-zapis)
  • Możliwy do udostępnienia - Bezpieczny do udostępnienia usługom zewnętrznym
  • Możliwy do unieważnienia - Unieważnij bez wpływu na inne integracje
  • Możliwy do śledzenia - Monitoruj użycie dla każdego tokenu

Idealny dla:

  • Pipelinów CI/CD powiadamiających pojedynczy temat
  • Integracji zewnętrznych (narzędzia monitorujące, systemy alertów)
  • Udostępniania dostępu do tematu współpracownikom bez udostępniania danych uwierzytelniających konta
  • Automatycznych skryptów publikujących do jednego tematu

Tworzenie tokenów dostępu do tematu

Przez panel webowy

  1. Przejdź do strony swojego tematu (np. app.notifer.io/topic/my-topic)
  2. Kliknij Ustawienia tematu (ikona koła zębatego)
  3. Przejdź do zakładki Tokeny dostępu
  4. Kliknij Utwórz token
  5. Wprowadź nazwę tokenu (np. "Pipeline CI")
  6. Wybierz poziom dostępu: read (subskrypcja), write (publikacja) lub read_write (oba)
  7. Kliknij Utwórz
  8. Skopiuj token (wyświetlany tylko raz!)

Przez API

# Utwórz token tylko do zapisu (do publikowania)
curl -X POST https://app.notifer.io/api/topics/my-topic/access-tokens \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "CI Pipeline Token",
"access_level": "write"
}'

Odpowiedź:

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"topic_id": "123e4567-e89b-12d3-a456-426614174000",
"user_id": "987fcdeb-51a2-3c4d-e5f6-789012345678",
"token": "tk_FjZTOcx14k4_Kg6RtUCikAPYc2KNjXIMkWQUvDSREFc",
"token_prefix": "tk_FjZTO",
"name": "CI Pipeline Token",
"access_level": "write",
"is_active": true,
"created_at": "2025-11-10T10:00:00Z",
"last_used": null,
"expires_at": null,
"is_valid": true,
"can_read": false,
"can_write": true
}
Limity tokenów

Użytkownicy planu FREE mogą utworzyć 1 token na temat prywatny. Ulepsz do ESSENTIALS, aby mieć nieograniczoną liczbę tokenów.

Zapisz swój token

Token jest wyświetlany tylko raz podczas tworzenia. Zapisz go bezpiecznie! Jeśli go zgubisz, będziesz musiał utworzyć nowy token.

Używanie tokenów dostępu do tematu

W żądaniach HTTP (zalecane)

Użyj nagłówka X-Topic-Token:

curl -d "Kompilacja zakończona pomyślnie" \
-H "X-Topic-Token: tk_FjZTOcx14k4_Kg6RtUCikAPYc2KNjXIMkWQUvDSREFc" \
-H "X-Title: CI/CD" \
-H "X-Priority: 3" \
https://app.notifer.io/my-topic

Jako parametr zapytania

Dla narzędzi, które nie obsługują niestandardowych nagłówków:

curl -d "Kompilacja zakończona" \
"https://app.notifer.io/my-topic?token=tk_FjZTOcx14k4_Kg6RtUCikAPYc2KNjXIMkWQUvDSREFc"
Przykłady kodu

Przykłady użycia tokenów dostępu w Python, JavaScript i innych językach znajdziesz w Uwierzytelnianie - przykłady kodu.

Poziomy dostępu tokenu

Kontroluj, co każdy token może robić:

Poziom dostępuOpisPrzypadek użycia
readSubskrybuj wiadomości tematu (tylko odczyt)Agregacja logów, panele monitoringu
writePublikuj wiadomości do tematu (tylko zapis)Powiadomienia CI/CD, alerty monitorowania
read_writeZarówno publikuj, jak i subskrybujPełny dostęp do integracji

Przykłady poziomów dostępu

=== "Tylko zapis (najczęstsze)"

```bash
# Pipeline CI/CD - wymaga tylko wysyłania powiadomień
curl -X POST https://app.notifer.io/api/topics/deployments/access-tokens \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"name": "GitHub Actions",
"access_level": "write"
}'
```

=== "Tylko odczyt"

```bash
# Usługa zewnętrzna konsumująca wiadomości
curl -X POST https://app.notifer.io/api/topics/events/access-tokens \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"name": "Log Aggregator",
"access_level": "read"
}'
```

=== "Odczyt i zapis"

```bash
# Pełny dostęp do integracji
curl -X POST https://app.notifer.io/api/topics/monitoring/access-tokens \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{
"name": "Monitoring Service",
"access_level": "read_write"
}'
```

Zarządzanie tokenami

Wyświetl tokeny dla tematu

curl https://app.notifer.io/api/topics/my-topic/access-tokens \
-H "Authorization: Bearer YOUR_JWT"

Unieważnij token

curl -X DELETE https://app.notifer.io/api/topics/my-topic/access-tokens/token_abc123 \
-H "Authorization: Bearer YOUR_JWT"

Po unieważnieniu:

  • Token natychmiast przestaje działać
  • Wszystkie żądania z tym tokenem zwracają 401 Unauthorized
  • Tokenu nie można ponownie włączyć (zamiast tego utwórz nowy)

Monitoruj użycie tokenu

Wyświetl w ustawieniach tematu:

  • Ostatnie użycie - Kiedy token był ostatnio używany
  • Całkowite żądania - Liczba żądań wykonanych z tym tokenem
  • Utworzony przez - Użytkownik, który utworzył token
Porównanie z kluczami API

Szczegółowe porównanie tokenów dostępu do tematów z kluczami API oraz wskazówki, kiedy używać każdej metody, znajdziesz w Uwierzytelnianie.

Najlepsze praktyki bezpieczeństwa

Przechowywanie

Rób:

  • Przechowuj tokeny w zmiennych środowiskowych
  • Używaj przechowywania sekretów CI/CD (GitHub Secrets, GitLab CI Variables)
  • Używaj menedżerów sekretów (AWS Secrets Manager, HashiCorp Vault)
  • Twórz oddzielne tokeny dla każdej integracji
  • Unieważniaj nieużywane tokeny

Nie rób:

  • Nie commituj tokenów do kontroli wersji
  • Nie udostępniaj tokenów w postaci zwykłego tekstu (e-mail, Slack)
  • Nie używaj tego samego tokenu w wielu usługach
  • Nie przyznawaj więcej uprawnień niż potrzeba (np. publikowanie+subskrypcja, gdy potrzeba tylko publikowania)

Zmienne środowiskowe

# Przechowuj w pliku .env (dodaj do .gitignore!)
NOTIFER_TOPIC_TOKEN=tk_FjZTOcx14k4_Kg6RtUCikAPYc2KNjXIMkWQUvDSREFc

# Załaduj w skrypcie
source .env
curl -H "X-Topic-Token: $NOTIFER_TOPIC_TOKEN" \
-d "Message" \
https://app.notifer.io/my-topic

GitHub Actions

# Przechowuj token w sekretach repozytorium
- name: Notify deployment
run: |
curl -d "Deploy completed" \
-H "X-Topic-Token: ${{ secrets.NOTIFER_TOPIC_TOKEN }}" \
-H "X-Title: Deployment" \
https://app.notifer.io/deployments

Docker Secrets

# Utwórz sekret
echo "tk_..." | docker secret create notifer_token -

# Użyj w docker-compose.yml
services:
app:
secrets:
- notifer_token
environment:
NOTIFER_TOKEN_FILE: /run/secrets/notifer_token

secrets:
notifer_token:
external: true

Przykłady z rzeczywistych sytuacji

GitHub Actions CI/CD

name: Deploy and Notify

on:
push:
branches: [main]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy
run: ./deploy.sh

- name: Notify success
if: success()
run: |
curl -d "Wdrożenie na produkcję powiodło się ✅" \
-H "X-Topic-Token: ${{ secrets.NOTIFER_TOPIC_TOKEN }}" \
-H "X-Title: Deploy Success" \
-H "X-Priority: 3" \
-H "X-Tags: ci,deploy,success" \
https://app.notifer.io/deployments

- name: Notify failure
if: failure()
run: |
curl -d "Wdrożenie na produkcję nie powiodło się ❌" \
-H "X-Topic-Token: ${{ secrets.NOTIFER_TOPIC_TOKEN }}" \
-H "X-Title: Deploy Failed" \
-H "X-Priority: 1" \
-H "X-Tags: ci,deploy,error" \
https://app.notifer.io/deployments

Skrypt monitorowania serwera

#!/bin/bash

TOPIC_TOKEN="tk_FjZTOcx14k4_Kg6RtUCikAPYc2KNjXIMkWQUvDSREFc"
TOPIC="server-alerts"

# Sprawdź miejsce na dysku
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

if [ "$USAGE" -gt 90 ]; then
PRIORITY=1
MESSAGE="🚨 KRYTYCZNE: Użycie dysku na poziomie ${USAGE}%"
elif [ "$USAGE" -gt 80 ]; then
PRIORITY=2
MESSAGE="⚠️ OSTRZEŻENIE: Użycie dysku na poziomie ${USAGE}%"
else
exit 0
fi

curl -d "$MESSAGE" \
-H "X-Topic-Token: $TOPIC_TOKEN" \
-H "X-Priority: $PRIORITY" \
-H "X-Tags: server,disk,monitoring" \
"https://app.notifer.io/$TOPIC"

Powiadomienie o kopii zapasowej bazy danych

#!/bin/bash

TOKEN="tk_your_token_here"
TOPIC="backups"

# Wykonaj kopię zapasową
if pg_dump production_db > /backups/db_$(date +%Y%m%d).sql; then
# Powiadomienie o sukcesie
curl -d "Kopia zapasowa bazy danych zakończona: $(date)" \
-H "X-Topic-Token: $TOKEN" \
-H "X-Title: Backup Success" \
-H "X-Priority: 3" \
-H "X-Tags: database,backup,success" \
"https://app.notifer.io/$TOPIC"
else
# Powiadomienie o niepowodzeniu
curl -d "Kopia zapasowa bazy danych NIE POWIODŁA SIĘ: $(date)" \
-H "X-Topic-Token: $TOKEN" \
-H "X-Title: Backup Failed" \
-H "X-Priority: 1" \
-H "X-Tags: database,backup,error" \
"https://app.notifer.io/$TOPIC"
fi

Rozwiązywanie problemów

401 Unauthorized

Przyczyna: Nieprawidłowy lub brakujący token

Rozwiązanie:

  • Sprawdź, czy token jest poprawny (brak dodatkowych spacji lub nowych linii)
  • Sprawdź, czy token nie został unieważniony
  • Upewnij się, że używasz poprawnego nagłówka: X-Topic-Token (nie X-API-Key)
  • Potwierdź, że token jest dla poprawnego tematu

403 Forbidden

Przyczyna: Token nie ma wymaganego poziomu dostępu

Rozwiązanie:

  • Sprawdź, czy token ma poziom dostępu write lub read_write dla żądań POST/PUT
  • Sprawdź, czy token ma poziom dostępu read lub read_write dla połączeń SSE/WebSocket
  • Sprawdź, czy temat jest nadal prywatny (token działa tylko dla tematów prywatnych)

Token wyświetla się jako nigdy nieużywany

Przyczyna: Token nie jest wysyłany poprawnie

Rozwiązanie:

  • Sprawdź nazwę nagłówka: X-Topic-Token (rozróżniana wielkość liter)
  • Sprawdź, czy nginx przekazuje nagłówek (zobacz konfiguracja nginx)
  • Przetestuj z curl szczegółowo: curl -v ...

Konfiguracja Nginx

Jeśli uruchamiasz własny proxy nginx, upewnij się, że przekazuje nagłówek X-Topic-Token:

location ~ ^/[a-zA-Z0-9_-]+$ {
proxy_pass http://backend:8000;

# Wymagane: Przekaż nagłówki uwierzytelniania
proxy_set_header X-Topic-Token $http_x_topic_token;
proxy_set_header Authorization $http_authorization;

# Przekaż również nagłówki wiadomości
proxy_set_header X-Title $http_x_title;
proxy_set_header X-Priority $http_x_priority;
proxy_set_header X-Tags $http_x_tags;
}

Następne kroki