UNPKG

angular-simple-oidc

Version:

Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.

49 lines 6.02 kB
import { Injectable } from '@angular/core'; import { b64utoutf8 } from 'jsrsasign'; /** * Inspired on https://github.com/damienbod/angular-auth-oidc-client */ export class TokenHelperService { convertTokenClaimToDate(claim) { if (!claim) { return null; } const date = new Date(0); // The 0 here is the key, which sets the date to the epoch date.setUTCSeconds(claim); return date; } isTokenExpired(expiresAt) { return new Date().getTime() > expiresAt; } getExpirationFromExpiresIn(expiresIn) { const now = new Date(); // expires_in = access token expiration in seconds (optional) // 3.2.2.5. Successful Authentication Response // https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse now.setSeconds(now.getSeconds() + expiresIn); return now; } getHeaderFromToken(idToken) { return this.getTokenSlice(idToken, 0); } getPayloadFromToken(idToken) { return this.getTokenSlice(idToken, 1); } getSignatureFromToken(idToken) { return this.getTokenSlice(idToken, 2); } getTokenSlice(idToken, index) { if (!idToken || idToken.split('.').length !== 3) { // Quick and dirty validation. // The caller is expcetd to validate the token properly return null; } const slice = idToken.split('.')[index]; const result = b64utoutf8(slice); return JSON.parse(result); } } TokenHelperService.decorators = [ { type: Injectable } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXNpbXBsZS1vaWRjL2NvcmUvbGliL3Rva2VuLWhlbHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUd2Qzs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFFcEIsdUJBQXVCLENBQUMsS0FBYTtRQUN4QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMERBQTBEO1FBQ3BGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxTQUFpQjtRQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLDZEQUE2RDtRQUM3RCwrQ0FBK0M7UUFDL0Msc0VBQXNFO1FBQ3RFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGtCQUFrQixDQUFDLE9BQWU7UUFDckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQXdCLENBQUM7SUFDakUsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE9BQWU7UUFDdEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQXlCLENBQUM7SUFDbEUsQ0FBQztJQUVNLHFCQUFxQixDQUFDLE9BQWU7UUFDeEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQVcsQ0FBQztJQUNwRCxDQUFDO0lBRVMsYUFBYSxDQUFDLE9BQWUsRUFBRSxLQUFhO1FBQ2xELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdDLDhCQUE4QjtZQUM5Qix1REFBdUQ7WUFDdkQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDOzs7WUFoREosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGI2NHV0b3V0ZjggfSBmcm9tICdqc3JzYXNpZ24nO1xuaW1wb3J0IHsgSWRlbnRpdHlUb2tlbkhlYWRlciwgRGVjb2RlZElkZW50aXR5VG9rZW4gfSBmcm9tICcuL21vZGVscyc7XG5cbi8qKlxuICogSW5zcGlyZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2RhbWllbmJvZC9hbmd1bGFyLWF1dGgtb2lkYy1jbGllbnRcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRva2VuSGVscGVyU2VydmljZSB7XG5cbiAgICBwdWJsaWMgY29udmVydFRva2VuQ2xhaW1Ub0RhdGUoY2xhaW06IG51bWJlcikge1xuICAgICAgICBpZiAoIWNsYWltKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwKTsgLy8gVGhlIDAgaGVyZSBpcyB0aGUga2V5LCB3aGljaCBzZXRzIHRoZSBkYXRlIHRvIHRoZSBlcG9jaFxuICAgICAgICBkYXRlLnNldFVUQ1NlY29uZHMoY2xhaW0pO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUb2tlbkV4cGlyZWQoZXhwaXJlc0F0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gZXhwaXJlc0F0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBpcmF0aW9uRnJvbUV4cGlyZXNJbihleHBpcmVzSW46IG51bWJlcikge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyBleHBpcmVzX2luID0gYWNjZXNzIHRva2VuIGV4cGlyYXRpb24gaW4gc2Vjb25kcyAob3B0aW9uYWwpXG4gICAgICAgIC8vIDMuMi4yLjUuICBTdWNjZXNzZnVsIEF1dGhlbnRpY2F0aW9uIFJlc3BvbnNlXG4gICAgICAgIC8vIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1Rva2VuUmVzcG9uc2VcbiAgICAgICAgbm93LnNldFNlY29uZHMobm93LmdldFNlY29uZHMoKSArIGV4cGlyZXNJbik7XG4gICAgICAgIHJldHVybiBub3c7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhlYWRlckZyb21Ub2tlbihpZFRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5TbGljZShpZFRva2VuLCAwKSBhcyBJZGVudGl0eVRva2VuSGVhZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXlsb2FkRnJvbVRva2VuKGlkVG9rZW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlblNsaWNlKGlkVG9rZW4sIDEpIGFzIERlY29kZWRJZGVudGl0eVRva2VuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaWduYXR1cmVGcm9tVG9rZW4oaWRUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuU2xpY2UoaWRUb2tlbiwgMikgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUb2tlblNsaWNlKGlkVG9rZW46IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoIWlkVG9rZW4gfHwgaWRUb2tlbi5zcGxpdCgnLicpLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgLy8gUXVpY2sgYW5kIGRpcnR5IHZhbGlkYXRpb24uXG4gICAgICAgICAgICAvLyBUaGUgY2FsbGVyIGlzIGV4cGNldGQgdG8gdmFsaWRhdGUgdGhlIHRva2VuIHByb3Blcmx5XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNsaWNlID0gaWRUb2tlbi5zcGxpdCgnLicpW2luZGV4XTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYjY0dXRvdXRmOChzbGljZSk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgfVxufVxuIl19