API-Schlüssel

API-Schlüssel vs. Token

vg

Auth ist schon schwer genug. Stellen Sie sicher, dass Sie den Unterschied zwischen zwei primären Authentifizierungsmodi verstehen: API-Schlüssel und Token.

Sie sagen, dass die beiden schwierigsten Probleme in der Informatik die Invalidierung von Caches und die Benennung von Dingen sind. Ehrlich gesagt, ist das nicht falsch. Die sind super schwer.

Was die Benennung schwierig macht, ist, klar und dennoch prägnant zu sein. Es sollte keinen Zweifel an der Bedeutung einer Variablen, eines Begriffs, einer Funktion oder einer Klasse geben. Wenn Sie der Meinung sind, dass ein Begriff eines von zwei Dingen bedeuten könnte, ist er nicht richtig benannt.

Definition

Wir können zwischen einem API-Schlüssel und einem Token mit folgenden Definitionen unterscheiden:

  • API-Schlüssel – Ein Wert, der vom Code beim Aufrufen einer API bereitgestellt wird, um den Aufrufer zu identifizieren und zu autorisieren. Es ist für die programmgesteuerte Verwendung gedacht und besteht oft aus einer langen Zeichenfolge aus Buchstaben und Zahlen.
  • Token – Ein Datenelement, das eine Benutzersitzung oder bestimmte Berechtigungen darstellt. Wird von einzelnen Benutzern für einen begrenzten Zeitraum verwendet.

Generation

Die Erstellungsmethode unterscheidet sich in der Regel auch zwischen den beiden.

  • API-Schlüssel – Wird einmal erstellt, oft über eine Benutzeroberfläche, und bleibt statisch, bis er rotiert wird. Diese können optional so konfiguriert werden, dass sie nach einer bestimmten Zeit ablaufen.
  • Token – Wird dynamisch bei erfolgreicher Authentifizierung oder Anmeldung generiert. Hat oft eine kurze Ablaufzeit, kann aber über längere Zeiträume aktualisiert werden.

Umfang

Es wäre keine Diskussion über Authentifizierung, ohne über den Berechtigungsbereich zu sprechen. Mit Berechtigungsbereich meine ich den Autorisierungsteil oder welche Funktionalität ausgeführt werden kann, wenn die bereitgestellte Authentifizierungsmethode verwendet wird.

  • API-Schlüssel – Fester, unveränderlicher Satz von Berechtigungen für App-Funktionen. Wer den Schlüssel hat, kann auf die erlaubten Ressourcen zugreifen.
  • Token – Beschränkt auf bestimmte Daten oder Funktionen, auf die eine Person Zugriff hat. Dies kann durch Rollen oder andere Anforderungen auf Unternehmensebene beeinflusst werden. Konzentriert sich tendenziell mehr auf Dateneinschränkungen.

Sicherheit

Wie sicher ist jede Methode? Wie groß ist der potenzielle Schaden, wenn der Schlüssel oder das Token kompromittiert oder von einem böswilligen Benutzer erworben wird?

  • API-Schlüssel – Da diese in der Regel langlebig sind und den Zugriff auf Daten nicht einschränken, können sie verheerend sein, wenn sie kompromittiert werden. Sie erfordern den Entzug des Schlüssels als einziges Mittel zur Lösung. Anwendungen müssen oft über eine gute Beobachtbarkeit verfügen, um kompromittierte Schlüssel zu identifizieren und den böswilligen Benutzer zu finden.
  • Token — Entwickelt mit Blick auf die Sicherheit. In der Regel kurzlebig und leicht widerruflich. Ein kompromittiertes Token hat nur den Bereich der Daten, auf die der Benutzer Zugriff hat, und läuft automatisch ab.

Anwendungsfälle

Wann würden Sie also das eine dem anderen vorziehen? Es sieht so aus, als hätten sie ein gutes Gleichgewicht zwischen Vor- und Nachteilen.

  • API-Schlüssel – Wird für die Server-zu-Server-Kommunikation, den Zugriff auf öffentliche Daten wie eine Wetter-API und die Integration mit Systemen von Drittanbietern verwendet.
  • Token – Wird für die Benutzerauthentifizierung, die fein abgestufte Zugriffskontrolle (FGAC), das Gewähren von temporärem Zugriff auf Ressourcen, den Browserzugriff und das Verwalten von Benutzersitzungen verwendet.

Beispiele

Nachdem wir nun den Unterschied zwischen den beiden verstanden haben, schauen wir uns zwei praktische Beispiele mit dem Momento JavaScript SDK an.

API-Schlüssel

Ich habe gesagt, dass API-Schlüssel in der Regel über eine Benutzeroberfläche ausgegeben werden. Vor diesem Hintergrund habe ich kein Codebeispiel, das ich freigeben kann. Im Folgenden erfahren Sie jedoch, wie Sie als Benutzer einen API-Schlüssel über die Momento-Konsole erhalten.

Sie wählen die gewünschten Berechtigungen aus, legen das optionale Ablaufdatum fest und generieren sie. Sie können den API-Schlüssel dann sofort in Ihren Workflows verwenden.

Token

Vergleichen Sie dies mit einem benutzerbasierten verwerfbaren Token, das bei erfolgreicher Anmeldung ausgestellt wird. Wir können ein rollenbasiertes Beispiel für einen Benutzer verwenden, der schreibgeschützten Zugriff auf den Cache für Kalenderereignisse erhält, aber Zugriff auf ein Thema für die Zusammenarbeit veröffentlicht und abonniert hat.

// called on successful login
exports.handler = async (event) => {
const user = await loadUserMetadata(event.userId);
let token;
switch(user.role){
case 'data-entry':
token = await getDataEntryToken(user.tenantId);
break;
case 'admin':
token = await getAdminToken(user.tenantId);
break;
default:
throw new Error('Role not supported');
}

return token;
};

const getDataEntryToken = async (tenantId) => {
const scope = {
permissions: [
{
role: 'readonly',
cache: 'calendar-events',
item: {
keyPrefix: tenantId
}
},
{
role: 'publishsubscribe',
cache: 'collaboration',
topic: `${tenantId}-events`
}
]
};

const response = await authClient.generateDisposableToken(scope, ExpiresIn.minutes(15));
return {
token: response.authToken,
expiresAt: response.expiresAt.epoch()
};
};

Sie können hier sehen, dass wir ein Token erstellen, das 15 Minuten lang gültig ist und auf schreibgeschützte Berechtigungen für Funktionen beschränkt ist und nur auf Cacheelemente zugreifen darf, die mit der tenantId beginnen, zu der der Benutzer gehört. Daher haben wir sowohl die Funktionalität als auch die Daten basierend auf Attributen des Benutzers eingeschränkt.

Fazit

API-Schlüssel und -Token haben ihre Vor- und Nachteile. Das eine ist nicht besser als das andere. Wie bei allen Dingen in der Informatik kommt es auf Ihren Anwendungsfall an. Berücksichtigen Sie bei der Entscheidung, welchen Authentifizierungsmechanismus Sie implementieren möchten, wie Ihre Benutzer mit Ihrer Anwendung interagieren werden.

Handelt es sich um benutzerbasierte Sitzungen im Web? Entscheiden Sie sich für Token. Vielleicht erwarten Sie nur programmgesteuerten Zugriff, ohne dass Sie den Umfang der verfügbaren Daten festlegen müssen. Verwenden Sie einen API-Schlüssel. Fühlen Sie sich frei, unsere Referenztabelle oben zum schnellen Nachschlagen zu speichern.

Weiterer interessanter Beitrag: Else: Raus aus dem Code

com

Newsletter Anmeldung

Bleiben Sie informiert! Wir informieren Sie über alle neuen Beiträge (max. 1 Mail pro Woche – versprochen)