bankid
A npm module to simplify integration with the Swedish Bank ID service for user authentication and signing processes.
Installation
npm install --save bankid
yarn install bankid
Usage
import { BankIdClient } from "bankid";
const client = new BankIdClient();
const pno = "YYYYMMDDXXXX";
client
.authenticateAndCollect({
personalNumber: pno,
endUserIp: "127.0.0.1",
})
.then(res => console.log(res.completionData))
.catch(console.error);
As outlined in the relying party guidelines,
there' four main methods (arguments marked with *
are required)
authenticate({endUserIp*, personalNumber, requirement})
sign({endUserIp*, personalNumber, requirement, userVisibleData*, userNonVisibleData})
collect({orderRef*})
cancel({orderRef*})
Additionally, bankid
provides convenience methods to combine auth / sign with periodic collection of the status until the process either failed or succeeded (as shown in the example code above):
authenticateAndCollect(...)
signAndCollect(...)
Full example not using the convenience methods:
import { BankIdClient } from "bankid";
const client = new BankIdClient();
const pno = "YYYYMMDDXXXX";
const message = "some message displayed to the user to sign";
client
.sign({
endUserIp: "127.0.0.1",
personalNumber: pno,
userVisibleData: message,
})
.then(res => {
const timer = setInterval(() => {
const done = () => clearInterval(timer);
client
.collect({ orderRef: res.orderRef })
.then(res => {
if (res.status === "complete") {
console.log(res.completionData);
done();
} else if (res.status === "failed") {
throw new Error(res.hintCode);
}
})
.catch(err => {
console.error(err);
done();
});
}, 1000);
})
.catch(console.error);
Configuration
By default, bankid
is instantiated with the following configuration pointing to the Bank ID Test Environment:
settings = {
refreshInterval: 1000,
production: false,
pfx: "PATH_TO_TEST_ENV_PFX",
passphrase: "TEST_ENV_PASSPHRASE",
ca: "CERTIFICATE",
};
For production, you'll want to pass in your own pfx and passphrase instead:
import { BankIdClient } from "bankid";
const client = new BankIdClient({
production: true,
pfx: "PATH_TO_YOUR_PFX",
passphrase: "YOUR_PASSPHRASE",
});
PFX path
When providing a pfx path, it is expected to be based on the current working directory from where the script is run:
.
├── certs
│ └── bankid.pfx
├── src
│ └── main.js
From the current directory you would run the script with node src/main.js
and provide the pfx path:
import { BankIdClient } from "bankid";
const client = new BankIdClient({
pfx: "certs/bankid.pfx",
});
Deploy/Publish
In order to deploy new versions, bump the version in package.json
and create a new GitHub release.
GitHub Actions should automagically release it to npm. ✨
Ownership
Repo ownership: Jeff Trinidad - @jefftrinidad29
Last audit: 2023-04-27 by @jefftrinidad29
Audit Notes
27th April 2023 by @jefftrinidad29
- Upgraded all non-critical dependencies
- yarn audit fix