Small wrapper around Singapore MyInfo V3 API for node JS. Wraps the scary-scary π± security logic into easy to use APIs.
Lightly refactored from the excellent official example π
Initialise MyInfoClient
const MyInfoClient = require('node-my-info-sg');
const myInfoClient = new MyInfoClient({
// MyInfo API base URL (sandbox/test/production)
// https://www.ndi-api.gov.sg/assets/lib/trusted-data/myinfo/specs/myinfo-kyc-v3.0.1.yaml.html#section/Environments/Available-Environments
baseUrl: 'https://sandbox.api.myinfo.gov.sg',
// Api auth level (L0 for sandbox; Otherwise L2)
authLevel: 'L0',
// Public key from MyInfo Consent Platform given to you during onboarding for RSA digital signature
publicCertPath: './ssl/stg-auth-signing-public.pem',
// Your private key for RSA digital signature
privateKeyPath: './ssl/stg-demoapp-client-privatekey-2018.pem',
// Your client_id provided to you during onboarding
clientId: 'STG2-MYINFO-SELF-TEST',
// Your client_secret provided to you during onboarding
clientSecret: '44d953c796cccebcec9bdc826852857ab412fbe2',
// Redirect URL for your web application
// https://www.ndi-api.gov.sg/library/trusted-data/myinfo/implementation-technical-requirements (Callback URLs)
redirectUrl: 'http://localhost:3001/callback',
});
Generate the OAuth2 url
const attributes = ['uinfin', 'name', 'mobileno'];
const { authoriseUrl, state } = myInfoClient.getAuthoriseUrl(purpose, attributes);
// Then you can pass authoriseUrl to your frontend app
// (or open authoriseUrl on a WebView on your mobile apps)
//
// Note: You might want to store authoriseUrl, attributes, and state to fulfill the transaction log requirements
// https://www.ndi-api.gov.sg/library/trusted-data/myinfo/implementation-technical-requirements
Get the person object
// Exchange authorisation code with usable access token
const { accessToken } = await myInfoClient.getToken(code);
// Get the person object
// Make sure attributes is the same as the one requested in previous step!
const { person } = await myInfoClient.getPerson(accessToken, attributes)
// Now you can return the person object to your frontend and pre-fill your form!
console.log(JSON.stringify(person));
In the example directory, run:
yarn install
./start.sh
yarn lint
yarn test