Hur enkelt är det att bygga en app med BankID-inloggning?
Att integrera BankID i en app är definitivt möjligt, men det är mer komplicerat än att använda Google- eller Apple-inloggning av några anledningar: det kräver teknisk integration, säkerhetshantering, och ett formellt avtal med en bank eller återförsäljare för att få tillgång till BankID:s tjänster. Men det är absolut något du kan göra själv om du har grundläggande utvecklingskunskaper och är redo att sätta dig in i processen. Här är en översikt:
- Vad är BankID och varför är det annorlunda?
BankID är en elektronisk identifieringstjänst som används flitigt i Sverige för säker inloggning och signering. Den administreras av Finansiell ID-Teknik BID AB, som ägs av flera svenska banker. Till skillnad från Google- och Apple-inloggning, som är mer "öppna" och designade för enkel integration, är BankID en tjänst med höga säkerhetskrav (t.ex. tvåfaktorsautentisering på tillitsnivå 3, LoA3). Det betyder att det finns strikta krav på hur du integrerar det, och du behöver ett avtal för att använda det i produktion.
- Vad krävs för att integrera BankID?
För att bygga en app med BankID-inloggning behöver du hantera både den tekniska integrationen och den administrativa processen. Här är de viktigaste stegen:
A. Administrativa krav
- Avtal med en bank eller återförsäljare:
- För att använda BankID i produktion måste du teckna ett avtal med en svensk bank (t.ex. Swedbank, SEB) eller en återförsäljare (t.ex. Svensk e-identitet eller Criipto). Detta avtal ger dig tillgång till ett så kallat Förlitandepartcertifikat (FP-certifikat), som används för att identifiera din app mot BankID:s tjänster.
- Kostnaden varierar beroende på leverantör, men det är ofta en transaktionsbaserad prismodell (du betalar per inloggning eller signering). För privata företag kan det också finnas en startavgift för certifikatet.
- Om du bara vill testa kan du använda BankID:s testmiljö gratis, men för att gå live med riktiga användare krävs avtalet.
- Testmiljö:
- BankID erbjuder en testmiljö där du kan testa integrationen utan kostnad. Du behöver skapa ett test-BankID via deras demo-sida (demo.bankid.com) och konfigurera din app för att använda testmiljön (appapi2.test.bankid.com istället för produktionsmiljön).
B. Tekniska krav
- Integration med BankID:s API:
- BankID tillhandahåller ett REST API (RP-API) som du kan använda för att hantera autentisering och signering. Den senaste versionen (v6, från maj 2023) har förbättrade säkerhetsfunktioner, som stöd för QR-koder och "Secure Start", vilket gör att användare inte behöver ange sitt personnummer manuellt (vilket minskar risken för bedrägerier).
- Du behöver implementera två huvudsakliga flöden:
- Starta autentisering: Skicka en förfrågan till BankID:s API för att starta en inloggning. Detta genererar en autoStartToken och en redirect-URL som används för att starta BankID-appen på användarens enhet.
- Hämta resultat: Polla BankID:s API för att få resultatet av autentiseringen (via en collect-förfrågan).
- Hantera olika enheter:
- Samma enhet: Om användaren har BankID-appen installerad på samma enhet som din app, kan du starta BankID-appen direkt via en URL (t.ex. https://app.bankid.com/?autostarttoken=<TOKEN>&redirect=<REDIRECT_URL>).
- Annan enhet: Om BankID-appen är på en annan enhet, visar du en QR-kod som användaren skannar med BankID-appen för att slutföra autentiseringen.
- För att hantera detta behöver din app stödja både deep linking (för att starta BankID-appen) och polling (för att hämta resultatet).
- Säkerhet och certifikat:
- Du behöver konfigurera ett klientcertifikat (som du får via avtalet) för att autentisera din app mot BankID:s API. Detta certifikat används för att säkerställa att kommunikationen är krypterad och säker.
- För testmiljön kan du använda ett testcertifikat som tillhandahålls av BankID.
- Redirect-URL:
- Efter att användaren har autentiserat sig i BankID-appen, behöver appen dirigeras tillbaka till din app. Detta görs genom att ange en redirect-parameter i API-anropet. På iOS måste denna parameter ha ett värde, medan den på Android kan vara null (för att undvika problem med flera webbläsare).
- Plattformsspecifika krav:
- iOS: Du behöver registrera en universal link eller ett anpassat URL-schema i din app, så att BankID-appen kan skicka användaren tillbaka till din app efter autentisering.
- Android: Samma sak gäller, men på Android kan användaren få välja webbläsare om redirect inte är satt till null. BankID rekommenderar att använda redirect=null på Android för att säkerställa att användaren återvänder till den senast använda webbläsaren.
C. Utveckling och test
-
Välj en teknisk stack:
-
För en mobilapp kan du använda Swift (iOS) eller Kotlin (Android) för native utveckling, eller ett ramverk som React Native om du vill bygga för båda plattformarna samtidigt.
-
För backend-delen (som hanterar API-anrop till BankID) kan du använda t.ex. Node.js, Java Spring Boot, eller .NET, beroende på vad du är bekväm med.
-
Ett exempel på en enkel Node.js-implementation för BankID-anrop kan se ut så här (baserat på information från webben):
javascript
const axios = require('axios');
const fs = require('fs');
const https = require('https');
const config = {
bankIdUrl: '<https://appapi2.test.bankid.com/rp/v5>',
pfx: fs.readFileSync('./certs/FPTestcert2.pfx'), // Testcertifikat
passphrase: 'qwerty123', // Lösenord för certifikatet
ca: fs.readFileSync('./certs/test.ca'), // CA-certifikat
};
const axiosInstance = axios.create({
httpsAgent: new https.Agent({
pfx: config.pfx,
passphrase: config.passphrase,
ca: config.ca,
}),
headers: { 'Content-Type': 'application/json' },
});
// Starta autentisering
async function startAuth() {
const response = await axiosInstance.post(`${config.bankIdUrl}/auth`, {
endUserIp: '192.168.1.1', // Användarens IP-adress
});
return response.data; // Innehåller autoStartToken och orderRef
}
-
Testa i testmiljön:
- Skapa ett test-BankID på demo.bankid.com. Du behöver ett svenskt personnummer (du kan generera ett test-personnummer om du inte har ett riktigt).
- Konfigurera BankID-appen för testmiljön genom att gå till inställningarna i appen och ange cavainternal.test.bankid.com som server, samt skriva in kundtest i ett dolt fält (enligt BankID:s instruktioner).
- Testa autentiseringen i din app genom att anropa testmiljön och använda QR-koder eller autostart.
- Hur enkelt är det jämfört med Google/Apple-inloggning?