Authenticatie

Beveiligde Toegang tot de mindzieAPI

Leer hoe u kunt authenticeren met de mindzieAPI met Bearer tokens, beheer van tenant- en projecttoegang, en implementeer veilige API-integratiepatronen.

Overzicht Authenticatie

De mindzieAPI maakt gebruik van Bearer token authenticatie gecombineerd met tenant- en projectidentificaties om veilige, multi-tenant toegang te bieden tot mindzie resources.

Soorten API-sleutels

De mindzieAPI ondersteunt twee soorten API-sleutels met verschillende toegangsrechten:

Tenant API-sleutels (Standaard)

Tenant API-sleutels zijn gebonden aan een specifieke tenant en worden gebruikt voor de meeste API-bewerkingen:

  • Toegang tot projecten, datasets, onderzoeken en dashboards binnen de tenant
  • Uitvoeren van notebooks en blocks
  • Beheren van projectgebonden resources

Aanmaken via: Instellingen -> API Keys (binnen mindzieStudio)

Globale API-sleutels (Server API Keys)

Globale API-sleutels hebben systeem-brede administratieve toegang en zijn vereist voor:

  • Tenant API - Tenant aanmaken, opsommen, bijwerken en verwijderen
  • User API (Globaal) - Gebruikers aanmaken en beheren over alle tenants heen
  • Gebruikers toewijzen aan tenants

Aanmaken via: /admin/global-api-keys (Administrator toegang vereist)

BELANGRIJK: De Tenant API endpoints (/api/tenant) vereisen een Global API Key. Gewone tenant-specifieke API-sleutels kunnen deze endpoints niet benaderen en ontvangen een 401 Unauthorized response.

Vereiste Headers

Voor Tenant-gebonden Operaties

Authorization: Bearer YOUR_TENANT_API_KEY
Content-Type: application/json

De tenant ID wordt meestal in het URL-pad opgenomen (bijv. /api/{tenantId}/project).

Voor Globale Operaties (Tenant/Gebruikersbeheer)

Authorization: Bearer YOUR_GLOBAL_API_KEY
Content-Type: application/json

Beveiligingstip: Gebruik altijd HTTPS wanneer u API-verzoeken doet om uw toegangstokens tijdens transport te beschermen.

Verkrijgen van Toegangstokens

Enterprise Server

Voor Enterprise Server implementaties, neem contact op met uw mindzie beheerder voor:

  • API toegangstoken
  • Tenant ID (GUID-formaat)
  • Project ID (GUID-formaat)
  • Basis API URL voor uw instantie

SaaS Implementatie

Voor SaaS gebruikers kunnen toegangstokens worden gegenereerd via:

  • mindzie Studio gebruikersinterface (Instellingen → API Keys)
  • Contact met uw accountbeheerder
  • Gebruik van authenticatie endpoints (indien ingeschakeld)

Authenticatie Testen

Gebruik de ping endpoints om uw authenticatie-instelling te verifiëren:

Basis-connectiviteitstest

curl -X GET "https://your-mindzie-instance.com/api/Action/ping"

Geauthenticeerde 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"

Succesvolle Respons

{
  "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"]
}

Beste Beveiligingspraktijken

Token Beveiliging

Bewaar tokens veilig met behulp van omgevingsvariabelen of beveiligde credential management systemen.

Token Verval

Houd tokenverval in de gaten en implementeer vernieuwingmechanismen om ononderbroken toegang te bewaren.

Multi-Tenant

Elke token is gebonden aan specifieke tenants en projecten voor veilige data-isolatie.

Implementatievoorbeelden

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("Ontbrekende vereiste omgevingsvariabelen")

    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 verzoek mislukt: {e}")

# Gebruik
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);
    }
}

// Gebruik
var client = new MindzieApiClient(
    Environment.GetEnvironmentVariable("MINDZIE_API_URL"),
    Environment.GetEnvironmentVariable("MINDZIE_ACCESS_TOKEN"),
    Environment.GetEnvironmentVariable("MINDZIE_TENANT_ID"),
    Environment.GetEnvironmentVariable("MINDZIE_PROJECT_ID")
);

Foutafhandeling

Algemene Authenticatiefouten

Statuscode Fout Beschrijving Oplossing
401 Unauthorized Ongeldige of ontbrekende toegangstoken Controleer token en zorg dat deze niet verlopen is
403 Forbidden Geldige token maar onvoldoende rechten Controleer tenant/project toegang of vraag rechten aan
400 Bad Request Vereiste headers ontbreken Zorg dat X-Tenant-Id en X-Project-Id zijn meegegeven

Voorbeeld Foutrespons

{
  "error": "invalid_token",
  "message": "De opgegeven toegangstoken is ongeldig of verlopen",
  "timestamp": "2024-01-15T10:30:00Z",
  "requestId": "req_12345"
}

Volgende Stappen

Zodra de authenticatie werkt, probeer dan de Quick Start Guide om uw eerste API-aanroepen te doen of verken de documentatie over Response Formats.