Jag skulle inte rekommendera något som basic authentication. Och framför allt, koda inte din egen säkerhetslösning på API (backend) sidan.
Authentication/Identifiering:
En process för att identifiera sig. Desto mer du litar på källan som ger dig identifikationen desto bättre.
Exempel:
(SVAG) En person ringer upp och säger att han heter Kalle Anka med personnummer xxxxxxxx-xxxx. (Basic Authentication)
IT - Skickar användarnamn och lösenord som base64 kodat info i HTTP headern.
(OK) En person ringer upp och anger en lång kod som han fått via login (kanske med verifikation via till en etablerat och förtroende ingivande part (facebook/microsoft/a. Koden verifieras (på mottagarsidan mot en nyckel/certifikat som de redan har. Verifieringen sker mot den krypterad koden som innehåller vem Kalle vill verifiera sig mot (i vissa fall), hur länge koden är giltig (t.ex. 2h) och vem som skapat koden.
IT - Kalle försöker ansluter mot API X, men får tillbaka 401 Unauthorized, och får även tillbaka en redirect adress som pekar på en inloggning mot en officiel Facebook, Azure AD/Microsoft, AWS, Auth0, Ping etc inloggning. Inloggningen ger tillbaka en JWT (token) som Kalle skickar med i alla följande HTTP requests mot API't. När giltighetstiden går ut, måste Kalle identifiera sig igen. (Vissa varienter på detta finns)
API'et verifierar token mot en nyckel/certifikat (från Facebook, Microsoft/Azure AD etc och unikt för din API) eller ställer en verifiering request mot Facebook, microsoft etc för validering (skickar Kalles token + en hemlig nyckel).
Alternativt. Använd ett certifikat på API sidan som är 'trusted' och har motsvarande certifikat installerat per användare. Bra inom organisationer.
(säkrast?) Om du behöver verifiera faktiskt fysisk person, använd t.ex. BankId. Om jag inte har fel så fungerar det i grunden som beskrevs ovan förutom att banken/staten är verifierare istället för Facebook etc.
Vilken utgivare av token du vill ha är beroende på vilka användarna är.
Är det inom en organisation som har sin egen katalogtjänst (te.x Active Directory) och/eller personer som registrerat sig direkt mot din tjänst (API), är det troligtvis Azure AD, Ping, Auth0, IdentityServer(.net)/IdentityServer(java) etc (de två sistnämda kan du hosta själv) som gäller. Noter att vid registrering så måste du koda den delen på API och klient.
Om användarna är okända, från det öppna internet, då kanske Facebook, Microsoft, Google funkar.
Och naturligtvis, utan HTTPS fungerar inga av de ovanstående metoderna.
Authorization/Behörighet:
Behörighetskoll måste alltid ske på API sidan. Målet är att returnera en 403 Forbidden för allt användaren inte ska kunna göra.
Hur behörighetskontrollen ser ut är olika, men i stora drag kan man:
- Via token få ut ett användar id. Slå upp i katalogtjänsten vilka behörigheter/roller denna användare har. (te.x. via ett active directory eller motsvarande i Auth0, IdentityServer etc).
- Den som skapar token inkluderar behörighet/roller i själva token.