UNPKG

angular-simple-oidc

Version:

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

37 lines 4.95 kB
import { Injectable } from '@angular/core'; import { hextob64u, KEYUTIL, KJUR } from 'jsrsasign'; export class TokenCryptoService { sha256b64First128Bits(payload) { const hash = KJUR.crypto.Util.hashString(payload, 'sha256'); const first128bits = hash.substr(0, hash.length / 2); return hextob64u(first128bits); } sha256btoa(payload) { const hash = KJUR.crypto.Util.hashString(payload, 'sha256'); return hextob64u(hash); } verifySignature(key, message) { const pk = KEYUTIL.getKey(key); return KJUR.jws.JWS.verify(message, pk, ['RS256']); } generateNonce() { return 'N' + Math.random() + '' + Date.now(); } generateState() { return Date.now() + '' + Math.random() + Math.random(); } generateCodesForCodeVerification() { const codeVerifier = 'C' + Math.random() + '' + Date.now() + '' + Date.now() + Math.random(); const codeChallenge = this.sha256btoa(codeVerifier); const method = 'S256'; return { codeVerifier, codeChallenge, method }; } } TokenCryptoService.decorators = [ { type: Injectable } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXNpbXBsZS1vaWRjL2NvcmUvbGliL3Rva2VuLWNyeXB0by5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXJELE1BQU0sT0FBTyxrQkFBa0I7SUFFcEIscUJBQXFCLENBQUMsT0FBZTtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxHQUFXLEVBQUUsT0FBZTtRQUMvQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxhQUFhO1FBQ2hCLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFTSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNELENBQUM7SUFFTSxnQ0FBZ0M7UUFDbkMsTUFBTSxZQUFZLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU87WUFDSCxZQUFZO1lBQ1osYUFBYTtZQUNiLE1BQU07U0FDVCxDQUFDO0lBQ04sQ0FBQzs7O1lBcENKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBoZXh0b2I2NHUsIEtFWVVUSUwsIEtKVVIgfSBmcm9tICdqc3JzYXNpZ24nO1xuaW1wb3J0IHsgSldUS2V5IH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9rZW5DcnlwdG9TZXJ2aWNlIHtcblxuICAgIHB1YmxpYyBzaGEyNTZiNjRGaXJzdDEyOEJpdHMocGF5bG9hZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcocGF5bG9hZCwgJ3NoYTI1NicpO1xuICAgICAgICBjb25zdCBmaXJzdDEyOGJpdHMgPSBoYXNoLnN1YnN0cigwLCBoYXNoLmxlbmd0aCAvIDIpO1xuICAgICAgICByZXR1cm4gaGV4dG9iNjR1KGZpcnN0MTI4Yml0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNoYTI1NmJ0b2EocGF5bG9hZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcocGF5bG9hZCwgJ3NoYTI1NicpO1xuICAgICAgICByZXR1cm4gaGV4dG9iNjR1KGhhc2gpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2ZXJpZnlTaWduYXR1cmUoa2V5OiBKV1RLZXksIG1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwayA9IEtFWVVUSUwuZ2V0S2V5KGtleSk7XG4gICAgICAgIHJldHVybiBLSlVSLmp3cy5KV1MudmVyaWZ5KG1lc3NhZ2UsIHBrLCBbJ1JTMjU2J10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZU5vbmNlKCkge1xuICAgICAgICByZXR1cm4gJ04nICsgTWF0aC5yYW5kb20oKSArICcnICsgRGF0ZS5ub3coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgKyAnJyArIE1hdGgucmFuZG9tKCkgKyBNYXRoLnJhbmRvbSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZUNvZGVzRm9yQ29kZVZlcmlmaWNhdGlvbigpIHtcbiAgICAgICAgY29uc3QgY29kZVZlcmlmaWVyID0gJ0MnICsgTWF0aC5yYW5kb20oKSArICcnICsgRGF0ZS5ub3coKSArICcnICsgRGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCk7XG4gICAgICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSB0aGlzLnNoYTI1NmJ0b2EoY29kZVZlcmlmaWVyKTtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gJ1MyNTYnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZVZlcmlmaWVyLFxuICAgICAgICAgICAgY29kZUNoYWxsZW5nZSxcbiAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==