Forum: PC-Programmierung wie node.js APIs absichern mit Microsoft Konto (Auth0) ohne Frontend?


von Aua (Gast)


Lesenswert?

Hallo,

Ich habe nun dieses Tutorial schon recht gut durchgearbeitet und 
verstanden:

https://bezkoder.com/node-js-rest-api-express-mysql/

Was mich als nächstes interessiert: Wenn man so eine API zur Verfügung 
stellt, dann hat die ja evtl. eine Beschreibung (OpenAPI/Swagger), aber 
kein Frontend (im Beispiel wird Postman zum Testen verwendet).

Nun würde ich die API-Funktionen gerne so absichern, dass man sie nur 
aufrufen kann, wenn man sich vorher mit einem Microsoft-Konto 
authentifiziert hat (OAuth0?)

Wie macht man das / wie stellt man das zur Verfügung? Normalerweise 
würde ja ein Frontend die Seite aufrufen und ein Sesson-Coockie 
speichern, dann würde umgeleitet zu Microsoft zum Anmelden usw.. Aber 
wenn die API kein Frontend hat..?

Und wie testet man das dann? auch mit Postman?

von Εrnst B. (ernst)


Lesenswert?

OAuth verwendest du am Frontend. Das kann dann an den Dienst, der auf 
deine API zugreifen soll, "Access token" weiterreichen. Die API 
überprüft dann die Access token.

Starte vielleicht mal hier, um grob einen Überblick zu bekommen:

https://de.wikipedia.org/wiki/OAuth

von Aua (Gast)


Lesenswert?

Ok, ich habe gelesen, ich glaube auch das Prinzip verstanden.

Was ich erreichen will ist "single sign on" (sso): "Die API kann 
aufgerufen werden, wenn der Benutzer schon mit einem Microsoft-Konto 
angemeldet ist."

Der Client "beweist" das, indem er ein Access Token von der letzten 
gültigen Anmeldung überreicht, und die API müsste dann bei Microsoft 
testen, ob es gültig ist.

Stimmt das erstmal?

Dann habe ich gelesen (oder meine es so verstanden zu haben), dass man 
die API dafür bei Microsoft registrieren muss (sonst könnte ja jeder 
kommen und eine Identität überprüfen wollen) - stimmt das? Und wenn ja - 
woran erkennt MS denn meine API?

von Εrnst B. (ernst)


Lesenswert?

Sorry, im Detail wird dir jemand anderes weiterhelfen müssen, hab noch 
nie irgendeinen Dienst gegen Microsoft authentifizieren lassen.

Aber im Prinzip: GUI-Anwendung/Webseite mit aktivem Nutzer-Login fordert 
(über MS) ein spezielles Access-Token für deine Anwendung an.

Mit diesem Token kann die GUI dann deine API nutzen. Und ggfs. das Token 
auch speichern und ohne dass der User präsent ist weiternutzen.

Das kann dann z.B. über signierte JWT funktionieren.
Vorteil: Deine API kann nur durch Auswerten des JWT, ohne Kommunikation 
zu Microsoft (oder einem anderen Auth-Anbieter) entscheiden, ob der 
Request OK ist.

von Pandur S. (jetztnicht)


Lesenswert?

> Dann habe ich gelesen (oder meine es so verstanden zu haben), dass man
die API dafür bei Microsoft registrieren muss (sonst könnte ja jeder
kommen und eine Identität überprüfen wollen) - stimmt das? Und wenn ja -
woran erkennt MS denn meine API?

Ohne jetzt das jemals gemacht zu haben... du hast eine Kundennummer bei 
MS, oder dem betreffenden Dienst, und ein Login mit Passwort oder so. 
Damit nimmst du dann mit deren Server Kontakt auf. Und in einem 
Interaktiven Verfahren wird dann verifiziert, dass dein App auch die 
richtige ist. Alles verschluesselt mit SSL oder so. Und so auch 
abgesichert gegen Replay Attacken. Je nachdem, was dieser Dienst MS oder 
aehnlich bringt, musst du dann auch zahlen, pro Zugriff.

Allenfalls solltest du dir die Datenschutzrichtlinien nochmals 
reinziehen. Du verrätst mit einer solchen Identifizierung, Daten ueber 
die zu identifizierende Person an ein amerikanisches Unternehmen

: Bearbeitet durch User
von Aua (Gast)


Lesenswert?

So, wieder etwas Zeit für's Hobby gehabt- Ich habe dieses Tutorial 
gefunden, was ich so langsam recht gut nachvollziehen kann (Es 
funktioniert auch). Nur diese eine Zeile (bisher) nicht, und ich glaube, 
das ist ein Fehler im Tutorial, oder?

https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-javascript-auth-code

und zwar in der server.js diese Zeile:
1
// Set the front-end folder to serve public assets.
2
app.use("/lib", express.static(path.join(__dirname, "../../lib/msal-browser/lib")));

Wo soll definiert sein, was 2 Ordnerebenen über meinen Arbeitsordner 
gespeichert ist? oder habe ich das falsch interpretiert?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.