angular-simple-oidc
Version:
Angular Library implementing Open Id Connect specification. Code Flow, Refresh Tokens, Session Management, Discovery Document.
37 lines • 4.95 kB
JavaScript
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==