Authentifizierung
Sicherer Zugriff auf die mindzieAPI
Erfahren Sie, wie Sie sich mit der mindzieAPI unter Verwendung von Bearer Tokens authentifizieren, den Zugriff auf Mandanten und Projekte verwalten und sichere API-Integrationsmuster implementieren.
Überblick zur Authentifizierung
Die mindzieAPI verwendet Bearer-Token-Authentifizierung in Kombination mit Mandanten- und Projektkennungen, um einen sicheren, mandantenfähigen Zugriff auf mindzie-Ressourcen zu gewährleisten.
Arten von API-Schlüsseln
Die mindzieAPI unterstützt zwei Arten von API-Schlüsseln mit unterschiedlichen Zugriffsebenen:
Mandanten-API-Schlüssel (Standard)
Mandanten-API-Schlüssel sind auf einen bestimmten Mandanten beschränkt und werden für die meisten API-Operationen verwendet:
- Zugriff auf Projekte, Datensätze, Untersuchungen und Dashboards innerhalb des Mandanten
- Ausführen von Notebooks und Blöcken
- Verwalten von Ressourcen auf Projektebene
Erstellen unter: Einstellungen -> API-Schlüssel (innerhalb von mindzieStudio)
Globale API-Schlüssel (Server-API-Schlüssel)
Globale API-Schlüssel haben systemweite Administratorrechte und sind erforderlich für:
- Mandanten-API - Erstellen, Auflisten, Aktualisieren und Löschen von Mandanten
- Benutzer-API (global) - Erstellen und Verwalten von Benutzern über alle Mandanten hinweg
- Benutzer Mandanten zuweisen
Erstellen unter: /admin/global-api-keys (Administratorzugang erforderlich)
WICHTIG: Die Mandanten-API-Endpunkte (/api/tenant) erfordern einen globalen API-Schlüssel. Reguläre mandantenspezifische API-Schlüssel können diese Endpunkte nicht aufrufen und erhalten eine 401 Unauthorized-Antwort.
Erforderliche Header
Für mandantenbezogene Operationen
Authorization: Bearer YOUR_TENANT_API_KEY
Content-Type: application/json
Die Mandanten-ID ist typischerweise im URL-Pfad enthalten (z.B. /api/{tenantId}/project).
Für globale Operationen (Mandanten-/Benutzerverwaltung)
Authorization: Bearer YOUR_GLOBAL_API_KEY
Content-Type: application/json
Sicherheitshinweis: Verwenden Sie stets HTTPS bei API-Anfragen, um Ihre Zugriffstoken während der Übertragung zu schützen.
Zugangstoken erhalten
Enterprise Server
Für Enterprise-Server-Installationen wenden Sie sich an Ihren mindzie-Administrator, um zu erhalten:
- API-Zugangstoken
- Mandanten-ID (im GUID-Format)
- Projekt-ID (im GUID-Format)
- Basis-API-URL für Ihre Instanz
SaaS-Bereitstellung
Für SaaS-Nutzer können Zugangstoken erzeugt werden über:
- Benutzeroberfläche von mindzie Studio (Einstellungen → API-Schlüssel)
- Kontaktieren des Kontoadministrators
- Nutzung der Authentifizierungsendpunkte (sofern aktiviert)
Authentifizierung testen
Verwenden Sie die Ping-Endpunkte, um Ihre Authentifizierung einzurichten und zu prüfen:
Grundlegender Verbindungstest
curl -X GET "https://your-mindzie-instance.com/api/Action/ping"
Authentifizierter Test
curl -X GET "https://your-mindzie-instance.com/api/Action/ping/authenticated" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "X-Tenant-Id: YOUR_TENANT_GUID" \
-H "X-Project-Id: YOUR_PROJECT_GUID"
Erfolgreiche Antwort
{
"status": "authenticated",
"timestamp": "2024-01-15T10:30:00Z",
"tenantId": "12345678-1234-1234-1234-123456789012",
"projectId": "87654321-4321-4321-4321-210987654321",
"userId": "user@company.com",
"permissions": ["read", "write", "admin"]
}
Sicherheits-Best Practices
Token-Sicherheit
Bewahren Sie Tokens sicher auf, z.B. in Umgebungsvariablen oder sicheren Credential-Management-Systemen.
Token-Ablauf
Beobachten Sie das Ablaufdatum von Tokens und implementieren Sie Erneuerungsmechanismen, um unterbrechungsfreien Zugang sicherzustellen.
Multi-Tenant
Jedes Token ist gezielt für bestimmte Mandanten und Projekte ausgelegt, um eine sichere Datenisolation zu gewährleisten.
Implementierungsbeispiele
JavaScript/Node.js
const apiConfig = {
baseURL: process.env.MINDZIE_API_URL,
token: process.env.MINDZIE_ACCESS_TOKEN,
tenantId: process.env.MINDZIE_TENANT_ID,
projectId: process.env.MINDZIE_PROJECT_ID
};
const makeAuthenticatedRequest = async (endpoint, options = {}) => {
const url = `${apiConfig.baseURL}${endpoint}`;
const headers = {
'Authorization': `Bearer ${apiConfig.token}`,
'X-Tenant-Id': apiConfig.tenantId,
'X-Project-Id': apiConfig.projectId,
'Content-Type': 'application/json',
...options.headers
};
try {
const response = await fetch(url, {
...options,
headers
});
if (!response.ok) {
throw new Error(`API request failed: ${response.status} ${response.statusText}`);
}
return await response.json();
} catch (error) {
console.error('API request error:', error);
throw error;
}
};
Python
import os
import requests
from typing import Dict, Any
class MindzieAPIClient:
def __init__(self):
self.base_url = os.getenv('MINDZIE_API_URL')
self.token = os.getenv('MINDZIE_ACCESS_TOKEN')
self.tenant_id = os.getenv('MINDZIE_TENANT_ID')
self.project_id = os.getenv('MINDZIE_PROJECT_ID')
if not all([self.base_url, self.token, self.tenant_id, self.project_id]):
raise ValueError("Missing required environment variables")
def _get_headers(self) -> Dict[str, str]:
return {
'Authorization': f'Bearer {self.token}',
'X-Tenant-Id': self.tenant_id,
'X-Project-Id': self.project_id,
'Content-Type': 'application/json'
}
def make_request(self, method: str, endpoint: str, **kwargs) -> Dict[str, Any]:
url = f"{self.base_url.rstrip('/')}{endpoint}"
headers = self._get_headers()
if 'headers' in kwargs:
headers.update(kwargs['headers'])
kwargs['headers'] = headers
try:
response = requests.request(method, url, **kwargs)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"API request failed: {e}")
# Usage
client = MindzieAPIClient()
result = client.make_request('GET', '/api/Action/ping/authenticated')
C#/.NET
using System;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
public class MindzieApiClient
{
private readonly HttpClient _httpClient;
private readonly string _baseUrl;
private readonly string _tenantId;
private readonly string _projectId;
public MindzieApiClient(string baseUrl, string accessToken, string tenantId, string projectId)
{
_baseUrl = baseUrl.TrimEnd('/');
_tenantId = tenantId;
_projectId = projectId;
_httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
_httpClient.DefaultRequestHeaders.Add("X-Tenant-Id", tenantId);
_httpClient.DefaultRequestHeaders.Add("X-Project-Id", projectId);
}
public async Task<T> GetAsync<T>(string endpoint)
{
var response = await _httpClient.GetAsync($"{_baseUrl}{endpoint}");
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<T>(content);
}
public async Task<T> PostAsync<T>(string endpoint, object data)
{
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"{_baseUrl}{endpoint}", content);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<T>(responseContent);
}
}
// Usage
var client = new MindzieApiClient(
Environment.GetEnvironmentVariable("MINDZIE_API_URL"),
Environment.GetEnvironmentVariable("MINDZIE_ACCESS_TOKEN"),
Environment.GetEnvironmentVariable("MINDZIE_TENANT_ID"),
Environment.GetEnvironmentVariable("MINDZIE_PROJECT_ID")
);
Fehlerbehandlung
Häufige Authentifizierungsfehler
| Statuscode | Fehler | Beschreibung | Lösung |
|---|---|---|---|
401 |
Unauthorized | Ungültiges oder fehlendes Zugriffstoken | Token prüfen und sicherstellen, dass es nicht abgelaufen ist |
403 |
Forbidden | Gültiges Token, aber unzureichende Berechtigungen | Zugriff auf Mandant/Projekt überprüfen oder Berechtigungen anfordern |
400 |
Bad Request | Fehlende erforderliche Header | Stellen Sie sicher, dass X-Tenant-Id und X-Project-Id bereitgestellt werden |
Beispiel für eine Fehlerantwort
{
"error": "invalid_token",
"message": "The provided access token is invalid or expired",
"timestamp": "2024-01-15T10:30:00Z",
"requestId": "req_12345"
}
Nächste Schritte
Sobald die Authentifizierung funktioniert, probieren Sie die Schnellstartanleitung aus, um Ihre ersten API-Aufrufe zu tätigen, oder erkunden Sie die Dokumentation zu Antwortformaten.