Tokeny dostępu do tematu
Tokeny dostępu do tematu zapewniają uwierzytelnianie w zakresie dla publikowania do konkretnych tematów prywatnych.
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
- Przejdź do strony swojego tematu (np.
app.notifer.io/topic/my-topic) - Kliknij Ustawienia tematu (ikona koła zębatego)
- Przejdź do zakładki Tokeny dostępu
- Kliknij Utwórz token
- Wprowadź nazwę tokenu (np. "Pipeline CI")
- Wybierz poziom dostępu:
read(subskrypcja),write(publikacja) lubread_write(oba) - Kliknij Utwórz
- 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
}
Użytkownicy planu FREE mogą utworzyć 1 token na temat prywatny. Ulepsz do ESSENTIALS, aby mieć nieograniczoną liczbę tokenów.
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 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ępu | Opis | Przypadek użycia |
|---|---|---|
read | Subskrybuj wiadomości tematu (tylko odczyt) | Agregacja logów, panele monitoringu |
write | Publikuj wiadomości do tematu (tylko zapis) | Powiadomienia CI/CD, alerty monitorowania |
read_write | Zarówno publikuj, jak i subskrybuj | Peł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
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(nieX-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
writelubread_writedla żądań POST/PUT - Sprawdź, czy token ma poziom dostępu
readlubread_writedla 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
- Klucze API - Uwierzytelnianie na poziomie użytkownika
- Tematy prywatne - Prywatność tematu i kontrola dostępu
- Publikowanie HTTP - Przykłady publikowania
- Przegląd uwierzytelniania - Wszystkie metody uwierzytelniania