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.keyDanach 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