Skip to content

Authenticating with gRPC

Die Authentifizierung basiert auf asymmetrischer Kryptografie mit RSA.
Für jeden Controller, der sich dem gRPC-Server gegenüber authentifizieren möchte, wird ein Schlüsselpaar (Private und Public Key) generiert. Der private Schlüssel verbleibt auf dem Controller und muss geheim bleiben. Der öffentliche Schlüssel wird auf dem gRPC-Server hinterlegt.
Die Authentifizierung erfolgt dann über den etablierten Standard JWT. Unter https://jwt.io/libraries finden sich fertige Bibliotheken für zahlreiche Programmiersprachen.

Um sich erfolgreich zu authentifizieren, muss der Controller im JWT den header kid (KeyID) angeben und hier seine eindeutige ID hinterlegen. Die Authentifizierung ist nur dann erfolgreich, wenn die hier hinterlegte ID und die JWT-Signatur zum öffentlichen Schlüssel des Gerätes passt.

Schlüsselpaar generieren

Um ein RSA-256 Schlüsselpaar zu generieren, kann der folgende Befehl verwendet werden:

ssh-keygen -t rsa -b 4096 -m PEM -f jwtRS256.key

Danach findet sich der private Schlüssel in jwtRS256.key, der öffentliche Schlüssel in jwtRS256.key.pub.

Header senden

Der JWT muss bei jedem gRPC Methodenaufruf mitgesendet werden. Dies geschieht mit dem Bearer-Authorization Format.

Authorization: Bearer JWT_TOKEN_HERE