diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ee1a4fa..7c4d6a29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,5 @@ # Changelog -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - ## 9.1.0 (2020-03-23) @@ -26,4 +24,8 @@ All notable changes to this project will be documented in this file. See [standa * run tokensetup outside ngzone ([07bb62d](https://github.com/manfredsteyer/angular-oauth2-oidc/commit/07bb62d06abb84ef2da010977d07bfd2a3805b16)) * typo ([3d331f2](https://github.com/manfredsteyer/angular-oauth2-oidc/commit/3d331f2166340db43f0aaca42ce8abc4913cd027)) -### [9.0.2](https://github.com/manfredsteyer/angular-oauth2-oidc/compare/v9.0.1...v9.0.2) (2020-03-23) +### Thanks + +Big Thanks to all contributers: Brecht Carlier, Daniel Moos, Jie Lin, Manfred Steyer, Phil McCloghry-Laing, robin labat, vdveer + +Also, big thanks to jeroenheijmans for doing an awesome job with moderating and analyzing the issues! \ No newline at end of file diff --git a/docs/additional-documentation/popup-based-login.html b/docs/additional-documentation/popup-based-login.html index 94a7182c..a99d369a 100644 --- a/docs/additional-documentation/popup-based-login.html +++ b/docs/additional-documentation/popup-based-login.html @@ -55,6 +55,9 @@

Logging in With a Popup

  • Create and configure a silent-refresh.html as described here *.
  • * Please note this does not mean that you have to use silent refresh too.

    +

    Also, for your silent-regfesh.html, make sure you are also targeting +window.opener and fall back to window.parent:

    +

    Please note: IE sets opener to null under specific security settings. This prevents making this work.

    diff --git a/docs/additional-documentation/session-checks.html b/docs/additional-documentation/session-checks.html index 13192180..40ae4cb0 100644 --- a/docs/additional-documentation/session-checks.html +++ b/docs/additional-documentation/session-checks.html @@ -69,7 +69,10 @@

    Configuration

    // Activate Session Checks: sessionChecksEnabled: true, -}

    Events

    +}

    Refresh

    +

    Please note that the lib performs a token refresh when the session changes to get the newest information about the current session. When using implicit flow, this means you have to configure silent refresh; when using code flow you either need silent refresh or a refresh token.

    +

    If using refresh tokens, your Auth Server needs to bind them to the current session's lifetime. Unfortunately, the used version of Identity Server 4, shown in the docs and in the example applications, does not support this at the moment.

    +

    Events

    To get notified, you can hook up for the event session_terminated:

    this.oauthService.events.pipe(filter(e => e.type === 'session_terminated')).subscribe(e => {
       console.debug('Your session has been terminated!');
    diff --git a/docs/additional-documentation/silent-refresh.html b/docs/additional-documentation/silent-refresh.html
    index c5ad8b51..181ddf41 100644
    --- a/docs/additional-documentation/silent-refresh.html
    +++ b/docs/additional-documentation/silent-refresh.html
    @@ -88,6 +88,26 @@ 

    Refresh (window.opener || window.parent).postMessage(location.hash || ('#' + location.search), location.origin); </script> </body> +</html>

    This simple implementation within silent-refresh.html is sufficient in most cases. It takes care of the hash fragment as well as of the query string (property search). For edge cases you need to check if the received hash fragment is a token response. For this, please go with the following more advanced implementation:

    +
    <html>
    +    <body>
    +        <script>
    +            var checks = [/[\?|&|#]code=/, /[\?|&|#]error=/, /[\?|&|#]token=/, /[\?|&|#]id_token=/];
    +
    +            function isResponse(str) {
    +                var count = 0;
    +                if (!str) return false;
    +                for(var i=0; i<checks.length; i++) {
    +                    if (str.match(checks[i])) return true;
    +                }
    +                return false;
    +            }
    +
    +            var message = isResponse(location.hash) ? location.hash : '#' + location.search;
    +
    +            (window.opener || window.parent).postMessage(message, location.origin);
    +        </script>
    +    </body>
     </html>

    Please make sure that this file is copied to your output directory by your build task. When using the CLI you can define it as an asset for this. For this, you have to add the following line to the file .angular-cli.json:

    "assets": [
         [...],
    diff --git a/docs/changelog.html b/docs/changelog.html
    index de48ef02..c2eba1df 100644
    --- a/docs/changelog.html
    +++ b/docs/changelog.html
    @@ -30,15 +30,31 @@
                    
    -

    Change Log

    -

    Lates features

    -

    See Release Notes for details on each release.

    -

    Older versions

    -

    Since Angular 5, versions of this library matched up with the Angular version. -So versions 5.x were released while Angular 5 was out, the 6.x versions during Angular 6, etc. -If you need to support a specific old version of Angular, you can consider using a version of the library that lines up.

    -

    For older release notes check the repository version history, or above-linked release notes. -For even older versions, check out the old change log.

    +

    Changelog

    +

    9.1.0 (2020-03-23)

    +

    Features

    +
      +
    • remove jsrsasign dependancy (77cb37a)
    • +
    • Upgrade to angular 8 (31c6273)
    • +
    • automatic silent refresh: stopAutomaticRefresh stops all timers. (8ab853b)
    • +
    • code-flow: allow using implicit flow by setting useSilentRefresh to true (93902a5)
    • +
    • sample: also use new idsvr 4 for implicit flow demo to prevent issues with same site cookies (58c6354)
    • +
    • session checks: Session checks work now for code flow too. Pls see Docs for details. (4bf8901)
    • +
    +

    Bug Fixes

    +
      +
    • code flow: Fixed code flow for IE 11 (0f03d39)
    • +
    • sample: use hash-based routing (3f44eca)
    • +
    • session state: save session_state also when using code flow (8fa99ff)
    • +
    • state: passing an url with a querystring as the state, e. g. url?x=1 (71b705c)
    • +
    • #687 (e2599e0)
    • +
    • missing HttpModule dependency (7eac8ae)
    • +
    • run tokensetup outside ngzone (07bb62d)
    • +
    • typo (3d331f2)
    • +
    +

    Thanks

    +

    Big Thanks to all contributers: Brecht Carlier, Daniel Moos, Jie Lin, Manfred Steyer, Phil McCloghry-Laing, robin labat, vdveer

    +

    Also, big thanks to jeroenheijmans for doing an awesome job with moderating and analyzing the issues!

    diff --git a/docs/classes/AbstractValidationHandler.html b/docs/classes/AbstractValidationHandler.html index 457beb22..efea2a6d 100644 --- a/docs/classes/AbstractValidationHandler.html +++ b/docs/classes/AbstractValidationHandler.html @@ -156,8 +156,8 @@

    - + @@ -243,8 +243,8 @@

    - + @@ -323,8 +323,8 @@

    - + @@ -397,8 +397,8 @@

    - + @@ -483,7 +483,9 @@

    /** * Validates the at_hash in an id_token against the received access_token. */ - public abstract validateAtHash(validationParams: ValidationParams): Promise<boolean>; + public abstract validateAtHash( + validationParams: ValidationParams + ): Promise<boolean>; } /** @@ -542,7 +544,10 @@

    * @param valueToHash * @param algorithm */ - protected abstract calcHash(valueToHash: string, algorithm: string): Promise<string>; + protected abstract calcHash( + valueToHash: string, + algorithm: string + ): Promise<string>; }

    diff --git a/docs/classes/AuthConfig.html b/docs/classes/AuthConfig.html index 63b758cc..61cd6f67 100644 --- a/docs/classes/AuthConfig.html +++ b/docs/classes/AuthConfig.html @@ -972,6 +972,12 @@

    + + + Type : function + + + Default value : () => {...} @@ -1914,7 +1920,7 @@

    -

    Set this to true to use HTTP BASIC auth for password flow

    +

    Set this to true to use HTTP BASIC auth for AJAX calls

    @@ -2157,7 +2163,7 @@

    * the verbosity of the console needs to be explicitly set * to include Debug level messages. */ - public showDebugInformation? = false; + public showDebugInformation? = false; /** * The redirect uri used when doing silent refresh. @@ -2292,7 +2298,7 @@

    public nonceStateSeparator? = ';'; /** - * Set this to true to use HTTP BASIC auth for password flow + * Set this to true to use HTTP BASIC auth for AJAX calls */ public useHttpBasicAuth? = false; @@ -2303,7 +2309,7 @@

    /** * The interceptors waits this time span if there is no token - */ + */ public waitForTokenInMsec? = 0; /** @@ -2332,11 +2338,9 @@

    * allowing a way for implementations to specify their own method of routing to new * urls. */ - public openUri?: ((uri: string) => void) = uri => { + public openUri?: (uri: string) => void = uri => { location.href = uri; - } - - + }; }

    diff --git a/docs/classes/HashHandler.html b/docs/classes/HashHandler.html index 4ec7bb1f..5b6b54d7 100644 --- a/docs/classes/HashHandler.html +++ b/docs/classes/HashHandler.html @@ -134,8 +134,8 @@

    -
    Defined in projects/lib/src/token-validation/hash-handler.ts:7
    +
    Defined in projects/lib/src/token-validation/hash-handler.ts:9
    @@ -206,54 +206,68 @@

    import { Injectable } from '@angular/core';
     
    +import { sha256 } from 'js-sha256';
    +
     /**
      * Abstraction for crypto algorithms
    -*/
    + */
     export abstract class HashHandler {
    -    abstract calcHash(valueToHash: string, algorithm: string): Promise<string>;
    +  abstract calcHash(valueToHash: string, algorithm: string): Promise<string>;
     }
     
     @Injectable()
     export class DefaultHashHandler implements HashHandler {
    -
    -    async calcHash(valueToHash: string, algorithm: string): Promise<string> {
    -        const encoder = new TextEncoder();
    -        const data = encoder.encode(valueToHash);
    -        const hashArray = await window.crypto.subtle.digest(algorithm, data);
    -        return this.toHashString(hashArray);
    +  async calcHash(valueToHash: string, algorithm: string): Promise<string> {
    +    // const encoder = new TextEncoder();
    +    // const hashArray = await window.crypto.subtle.digest(algorithm, data);
    +    // const data = encoder.encode(valueToHash);
    +
    +    const hashArray = sha256.array(valueToHash);
    +    // const hashString = this.toHashString(hashArray);
    +    const hashString = this.toHashString2(hashArray);
    +
    +    return hashString;
    +  }
    +
    +  toHashString2(byteArray: number[]) {
    +    let result = '';
    +    for (let e of byteArray) {
    +      result += String.fromCharCode(e);
         }
    -
    -    toHashString(buffer: ArrayBuffer) {
    -      const byteArray = new Uint8Array(buffer);
    -      let result = '';
    -      for (let e of byteArray) {
    -        result += String.fromCharCode(e);
    -      }
    -      return result;
    +    return result;
    +  }
    +
    +  toHashString(buffer: ArrayBuffer) {
    +    const byteArray = new Uint8Array(buffer);
    +    let result = '';
    +    for (let e of byteArray) {
    +      result += String.fromCharCode(e);
         }
    -
    -    // hexString(buffer) {
    -    //     const byteArray = new Uint8Array(buffer);
    -    //     const hexCodes = [...byteArray].map(value => {
    -    //       const hexCode = value.toString(16);
    -    //       const paddedHexCode = hexCode.padStart(2, '0');
    -    //       return paddedHexCode;
    -    //     });
    -      
    -    //     return hexCodes.join('');
    -    //   }
    -    
    -      // toHashString(hexString: string) {
    -      //   let result = '';
    -      //   for (let i = 0; i < hexString.length; i += 2) {
    -      //     let hexDigit = hexString.charAt(i) + hexString.charAt(i + 1);
    -      //     let num = parseInt(hexDigit, 16);
    -      //     result += String.fromCharCode(num);
    -      //   }
    -      //   return result;
    -      // }
    -
    -}
    + return result; + } + + // hexString(buffer) { + // const byteArray = new Uint8Array(buffer); + // const hexCodes = [...byteArray].map(value => { + // const hexCode = value.toString(16); + // const paddedHexCode = hexCode.padStart(2, '0'); + // return paddedHexCode; + // }); + + // return hexCodes.join(''); + // } + + // toHashString(hexString: string) { + // let result = ''; + // for (let i = 0; i < hexString.length; i += 2) { + // let hexDigit = hexString.charAt(i) + hexString.charAt(i + 1); + // let num = parseInt(hexDigit, 16); + // result += String.fromCharCode(num); + // } + // return result; + // } +} +
    diff --git a/docs/classes/JwksValidationHandler.html b/docs/classes/JwksValidationHandler.html index 99fa7a4b..afc12e58 100644 --- a/docs/classes/JwksValidationHandler.html +++ b/docs/classes/JwksValidationHandler.html @@ -325,13 +325,12 @@

    * to an library of its own, namely angular-oauth2-oidc-utils */ export class JwksValidationHandler extends NullValidationHandler { - constructor() { super(); console.error(err); } - -} +} + diff --git a/docs/classes/LoginOptions.html b/docs/classes/LoginOptions.html index 8ac02b89..1baee6c8 100644 --- a/docs/classes/LoginOptions.html +++ b/docs/classes/LoginOptions.html @@ -404,7 +404,7 @@

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -512,7 +512,6 @@ 

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -544,7 +543,7 @@

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/classes/OAuthLogger.html b/docs/classes/OAuthLogger.html index e1087a2e..0e98bbaf 100644 --- a/docs/classes/OAuthLogger.html +++ b/docs/classes/OAuthLogger.html @@ -559,7 +559,7 @@

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -667,7 +667,6 @@ 

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -699,7 +698,7 @@

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/classes/OAuthStorage.html b/docs/classes/OAuthStorage.html index 13d2a8f6..68bfe198 100644 --- a/docs/classes/OAuthStorage.html +++ b/docs/classes/OAuthStorage.html @@ -359,7 +359,7 @@

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -467,7 +467,6 @@ 

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -499,7 +498,7 @@

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/classes/ReceivedTokens.html b/docs/classes/ReceivedTokens.html index 99cbe568..0d6512b1 100644 --- a/docs/classes/ReceivedTokens.html +++ b/docs/classes/ReceivedTokens.html @@ -140,7 +140,7 @@

    - + @@ -168,7 +168,7 @@

    - + @@ -195,7 +195,7 @@

    - + @@ -223,7 +223,7 @@

    - + @@ -242,7 +242,7 @@

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -350,7 +350,6 @@ 

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -382,7 +381,7 @@

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/classes/ValidationHandler.html b/docs/classes/ValidationHandler.html index 813cca05..e6bc5064 100644 --- a/docs/classes/ValidationHandler.html +++ b/docs/classes/ValidationHandler.html @@ -303,7 +303,9 @@

    /** * Validates the at_hash in an id_token against the received access_token. */ - public abstract validateAtHash(validationParams: ValidationParams): Promise<boolean>; + public abstract validateAtHash( + validationParams: ValidationParams + ): Promise<boolean>; } /** @@ -362,7 +364,10 @@

    * @param valueToHash * @param algorithm */ - protected abstract calcHash(valueToHash: string, algorithm: string): Promise<string>; + protected abstract calcHash( + valueToHash: string, + algorithm: string + ): Promise<string>; }

    diff --git a/docs/dependencies.html b/docs/dependencies.html index 2179524c..316eb126 100644 --- a/docs/dependencies.html +++ b/docs/dependencies.html @@ -48,23 +48,23 @@
    • - @angular/animations : 9.0.5
    • + @angular/animations : 9.0.7
    • - @angular/common : 9.0.5
    • + @angular/common : 9.0.7
    • - @angular/compiler : 9.0.5
    • + @angular/compiler : 9.0.7
    • - @angular/core : 9.0.5
    • + @angular/core : 9.0.7
    • - @angular/elements : 9.0.5
    • + @angular/elements : 9.0.7
    • - @angular/forms : 9.0.5
    • + @angular/forms : 9.0.7
    • - @angular/platform-browser : 9.0.5
    • + @angular/platform-browser : 9.0.7
    • - @angular/platform-browser-dynamic : 9.0.5
    • + @angular/platform-browser-dynamic : 9.0.7
    • - @angular/router : 9.0.5
    • + @angular/router : 9.0.7
    • @webcomponents/custom-elements : ^1.2.4
    • @@ -75,8 +75,12 @@ base64-js : ^1.3.0
    • bootstrap : ^3.3.7
    • +
    • + js-sha256 : ^0.9.0
    • jsrsasign : ^8.0.12
    • +
    • + ngx-semantic-version : ^1.2.1
    • rxjs : 6.5.4
    • @@ -84,7 +88,7 @@
    • text-encoder-lite : ^1.0.1
    • - tsickle : ^0.35.0
    • + tsickle : ^0.38.1
    • tslib : ^1.11.1
    • diff --git a/docs/index.html b/docs/index.html index f73e209f..c56ca996 100644 --- a/docs/index.html +++ b/docs/index.html @@ -31,7 +31,7 @@

      angular-oauth2-oidc

      -

      Support for OAuth 2 and OpenId Connect (OIDC) in Angular.

      +

      Support for OAuth 2 and OpenId Connect (OIDC) in Angular. Already prepared for the upcoming OAuth 2.1.

      OIDC Certified Logo

      Credits

        @@ -52,7 +52,7 @@

        Breaking Change in Version 9

        import { JwksValidationHandler } from 'angular-oauth2-oidc';

        Please note, that this dependency is not needed for the code flow, which is nowadays the recommended flow for single page applications. This also results in smaller bundle sizes.

        Tested Environment

        Successfully tested with Angular 9 and its Router, PathLocationStrategy as well as HashLocationStrategy and CommonJS-Bundling via webpack. At server side we've used IdentityServer (.NET / .NET Core) and Redhat's Keycloak (Java).

        -

        Angular 9: Use 9.x versions of this library.

        +

        Angular 9: Use 9.x versions of this library (should also work with older Angular versions!).

        Angular 8: Use 8.x versions of this library.

        Angular 7: Use 7.x versions of this library.

        Angular 6: Use Version 4.x of this library. Version 4.x was tested with Angular 6. You can also try the newer version 5.x of this library which has a much smaller bundle size.

        @@ -78,7 +78,7 @@

        Contributions

      Features

        -
      • Logging in via Code Flow + PKCE
          +
        • Logging in via Code Flow + PKCE
          • Hence, you are safe for the upcoming OAuth 2.1
        • @@ -91,10 +91,11 @@

          Features

        • Validating claims of the id_token regarding the specs
        • Hook for further custom validations
        • Single-Sign-Out by redirecting to the auth-server's logout-endpoint
        • +
        • Tested with all modern browsers and IE

        Sample-Auth-Server

        You can use the OIDC-Sample-Server used in our examples. It assumes, that your Web-App runs on http://localhost:4200

        -

        Username/Password:

        +

        Username/Password:

        • max/geheim
        • bob/bob
        • @@ -136,40 +137,40 @@

          Installing

          }

    Logging in

    Since Version 8, this library supports code flow and PKCE to align with the current draft of the OAuth 2.0 Security Best Current Practice document. This is also the foundation of the upcoming OAuth 2.1.

    To configure your solution for code flow + PKCE you have to set the responseType to code:

    -
        import { AuthConfig } from 'angular-oauth2-oidc';
    +
      import { AuthConfig } from 'angular-oauth2-oidc';
     
    -    export const authCodeFlowConfig: AuthConfig = {
    -      // Url of the Identity Provider
    -      issuer: 'https://demo.identityserver.io',
    +  export const authCodeFlowConfig: AuthConfig = {
    +    // Url of the Identity Provider
    +    issuer: 'https://demo.identityserver.io',
     
    -      // URL of the SPA to redirect the user to after login
    -      redirectUri: window.location.origin + '/index.html',
    +    // URL of the SPA to redirect the user to after login
    +    redirectUri: window.location.origin + '/index.html',
     
    -      // The SPA's id. The SPA is registerd with this id at the auth-server
    -      // clientId: 'server.code',
    -      clientId: 'spa',
    +    // The SPA's id. The SPA is registerd with this id at the auth-server
    +    // clientId: 'server.code',
    +    clientId: 'spa',
     
    -      // Just needed if your auth server demands a secret. In general, this
    -      // is a sign that the auth server is not configured with SPAs in mind
    -      // and it might not enforce further best practices vital for security
    -      // such applications.
    -      // dummyClientSecret: 'secret',
    +    // Just needed if your auth server demands a secret. In general, this
    +    // is a sign that the auth server is not configured with SPAs in mind
    +    // and it might not enforce further best practices vital for security
    +    // such applications.
    +    // dummyClientSecret: 'secret',
     
    -      responseType: 'code',
    +    responseType: 'code',
     
    -      // set the scope for the permissions the client should request
    -      // The first four are defined by OIDC. 
    -      // Important: Request offline_access to get a refresh token
    -      // The api scope is a usecase specific one
    -      scope: 'openid profile email offline_access api',
    +    // set the scope for the permissions the client should request
    +    // The first four are defined by OIDC.
    +    // Important: Request offline_access to get a refresh token
    +    // The api scope is a usecase specific one
    +    scope: 'openid profile email offline_access api',
     
    -      showDebugInformation: true,
    +    showDebugInformation: true,
     
    -      // Not recommented:
    -      // disablePKCI: true,
    -    };

    After this, you can initialize the code flow using:

    -
      this.oauthService.initCodeFlow();

    There is also a convenience method initLoginFlow which initializes either the code flow or the implicit flow depending on your configuration.

    -
      this.oauthService.initLoginFlow();

    Also -- as shown in the readme -- you have to execute the following code when bootstrapping to make the library to fetch the token:

    + // Not recommented: + // disablePKCI: true, + };

    After this, you can initialize the code flow using:

    +
    this.oauthService.initCodeFlow();

    There is also a convenience method initLoginFlow which initializes either the code flow or the implicit flow depending on your configuration.

    +
    this.oauthService.initLoginFlow();

    Also -- as shown in the readme -- you have to execute the following code when bootstrapping to make the library to fetch the token:

    this.oauthService.configure(authCodeFlowConfig);
     this.oauthService.loadDiscoveryDocumentAndTryLogin();

    Skipping the Login Form

    If you don't want to display a login form that tells the user that they are redirected to the identity server, you can use the convenience function this.oauthService.loadDiscoveryDocumentAndLogin(); instead of this.oauthService.loadDiscoveryDocumentAndTryLogin(); when setting up the library.

    diff --git a/docs/injectables/DefaultHashHandler.html b/docs/injectables/DefaultHashHandler.html index 98e1b8d6..28209354 100644 --- a/docs/injectables/DefaultHashHandler.html +++ b/docs/injectables/DefaultHashHandler.html @@ -82,6 +82,9 @@
    Methods
  • toHashString
  • +
  • + toHashString2 +
  • @@ -124,8 +127,8 @@

    - + @@ -206,8 +209,8 @@

    - + @@ -249,6 +252,76 @@

    +
    + + + + + + + + + + + + + + + + + + + + + @@ -262,54 +335,68 @@

    import { Injectable } from '@angular/core';
     
    +import { sha256 } from 'js-sha256';
    +
     /**
      * Abstraction for crypto algorithms
    -*/
    + */
     export abstract class HashHandler {
    -    abstract calcHash(valueToHash: string, algorithm: string): Promise<string>;
    +  abstract calcHash(valueToHash: string, algorithm: string): Promise<string>;
     }
     
     @Injectable()
     export class DefaultHashHandler implements HashHandler {
    -
    -    async calcHash(valueToHash: string, algorithm: string): Promise<string> {
    -        const encoder = new TextEncoder();
    -        const data = encoder.encode(valueToHash);
    -        const hashArray = await window.crypto.subtle.digest(algorithm, data);
    -        return this.toHashString(hashArray);
    +  async calcHash(valueToHash: string, algorithm: string): Promise<string> {
    +    // const encoder = new TextEncoder();
    +    // const hashArray = await window.crypto.subtle.digest(algorithm, data);
    +    // const data = encoder.encode(valueToHash);
    +
    +    const hashArray = sha256.array(valueToHash);
    +    // const hashString = this.toHashString(hashArray);
    +    const hashString = this.toHashString2(hashArray);
    +
    +    return hashString;
    +  }
    +
    +  toHashString2(byteArray: number[]) {
    +    let result = '';
    +    for (let e of byteArray) {
    +      result += String.fromCharCode(e);
         }
    -
    -    toHashString(buffer: ArrayBuffer) {
    -      const byteArray = new Uint8Array(buffer);
    -      let result = '';
    -      for (let e of byteArray) {
    -        result += String.fromCharCode(e);
    -      }
    -      return result;
    +    return result;
    +  }
    +
    +  toHashString(buffer: ArrayBuffer) {
    +    const byteArray = new Uint8Array(buffer);
    +    let result = '';
    +    for (let e of byteArray) {
    +      result += String.fromCharCode(e);
         }
    -
    -    // hexString(buffer) {
    -    //     const byteArray = new Uint8Array(buffer);
    -    //     const hexCodes = [...byteArray].map(value => {
    -    //       const hexCode = value.toString(16);
    -    //       const paddedHexCode = hexCode.padStart(2, '0');
    -    //       return paddedHexCode;
    -    //     });
    -      
    -    //     return hexCodes.join('');
    -    //   }
    -    
    -      // toHashString(hexString: string) {
    -      //   let result = '';
    -      //   for (let i = 0; i < hexString.length; i += 2) {
    -      //     let hexDigit = hexString.charAt(i) + hexString.charAt(i + 1);
    -      //     let num = parseInt(hexDigit, 16);
    -      //     result += String.fromCharCode(num);
    -      //   }
    -      //   return result;
    -      // }
    -
    -}
    + return result; + } + + // hexString(buffer) { + // const byteArray = new Uint8Array(buffer); + // const hexCodes = [...byteArray].map(value => { + // const hexCode = value.toString(16); + // const paddedHexCode = hexCode.padStart(2, '0'); + // return paddedHexCode; + // }); + + // return hexCodes.join(''); + // } + + // toHashString(hexString: string) { + // let result = ''; + // for (let i = 0; i < hexString.length; i += 2) { + // let hexDigit = hexString.charAt(i) + hexString.charAt(i + 1); + // let num = parseInt(hexDigit, 16); + // result += String.fromCharCode(num); + // } + // return result; + // } +} +
    diff --git a/docs/injectables/MemoryStorage.html b/docs/injectables/MemoryStorage.html index c3f99547..5ae8b533 100644 --- a/docs/injectables/MemoryStorage.html +++ b/docs/injectables/MemoryStorage.html @@ -330,7 +330,7 @@

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -438,7 +438,6 @@ 

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -470,7 +469,7 @@

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/injectables/OAuthService.html b/docs/injectables/OAuthService.html index 15cbd716..cbea576f 100644 --- a/docs/injectables/OAuthService.html +++ b/docs/injectables/OAuthService.html @@ -125,6 +125,10 @@

    Properties
    Protected jwksUri +
  • + Protected + saveNoncesInLocalStorage +
  • Protected sessionCheckEventListener @@ -421,7 +425,7 @@
    Methods
    checkAtHash
  • - Protected + Public checkSession
  • @@ -665,6 +669,10 @@
    Methods
    Protected startSessionCheckTimer
  • +
  • + Public + stopAutomaticRefresh +
  • Protected stopSessionCheckTimer @@ -740,7 +748,7 @@

    Constructor

  • @@ -903,8 +911,8 @@

    @@ -987,8 +995,8 @@

    @@ -1031,8 +1039,8 @@

    @@ -1115,8 +1123,8 @@

    @@ -1187,8 +1195,8 @@

    @@ -1259,8 +1267,8 @@

    @@ -1301,8 +1309,8 @@

    @@ -1356,7 +1364,7 @@

    - Protected + Public checkSession @@ -1373,8 +1381,8 @@

    @@ -1414,8 +1422,8 @@

    @@ -1486,8 +1494,8 @@

    @@ -1527,8 +1535,8 @@

    @@ -1568,8 +1576,8 @@

    @@ -1609,8 +1617,8 @@

    @@ -1689,8 +1697,8 @@

    @@ -1731,8 +1739,8 @@

    @@ -1866,8 +1874,8 @@

    @@ -1907,8 +1915,8 @@

    @@ -1979,8 +1987,8 @@

    @@ -2094,8 +2102,8 @@

    @@ -2215,8 +2223,8 @@

    @@ -2258,8 +2266,8 @@

    @@ -2302,8 +2310,8 @@

    @@ -2343,8 +2351,8 @@

    @@ -2417,8 +2425,8 @@

    @@ -2460,8 +2468,8 @@

    @@ -2503,8 +2511,8 @@

    @@ -2546,8 +2554,8 @@

    @@ -2590,8 +2598,8 @@

    @@ -2631,8 +2639,8 @@

    @@ -2672,8 +2680,8 @@

    @@ -2713,8 +2721,8 @@

    @@ -2797,8 +2805,8 @@

    @@ -2838,8 +2846,8 @@

    @@ -2879,8 +2887,8 @@

    @@ -2920,8 +2928,8 @@

    @@ -2963,8 +2971,8 @@

    @@ -3006,8 +3014,8 @@

    @@ -3100,8 +3108,8 @@

    @@ -3205,8 +3213,8 @@

    @@ -3279,8 +3287,8 @@

    @@ -3370,8 +3378,8 @@

    @@ -3464,8 +3472,8 @@

    @@ -3536,8 +3544,8 @@

    @@ -3577,8 +3585,8 @@

    @@ -3659,8 +3667,8 @@

    @@ -3740,8 +3748,8 @@

    @@ -3825,8 +3833,8 @@

    @@ -3866,8 +3874,8 @@

    @@ -3911,8 +3919,8 @@

    @@ -4005,8 +4013,8 @@

    @@ -4073,8 +4081,8 @@

    @@ -4145,8 +4153,8 @@

    @@ -4222,8 +4230,8 @@

    @@ -4269,8 +4277,8 @@

    @@ -4310,8 +4318,8 @@

    @@ -4351,8 +4359,8 @@

    @@ -4394,8 +4402,8 @@

    @@ -4435,8 +4443,8 @@

    @@ -4476,8 +4484,8 @@

    @@ -4517,8 +4525,8 @@

    @@ -4637,8 +4645,8 @@

    @@ -4678,8 +4686,8 @@

    @@ -4719,8 +4727,8 @@

    @@ -4760,8 +4768,8 @@

    @@ -4801,8 +4809,8 @@

    @@ -4842,8 +4850,8 @@

    @@ -4883,8 +4891,8 @@

    @@ -4977,14 +4985,58 @@

    + + + + + + + +
    + + + + toHashString2 + + + +
    +toHashString2(byteArray: number[]) +
    + +
    + +
    + Parameters : + + + + + + + + + + + + + + + + + + +
    NameTypeOptional
    byteArray + number[] + + No +
    +
    +
    +
    +
    + Returns : string + +
    +
    +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - + +
    + +
    + Returns : void + +
    +
    + + + + + + + + + + + + @@ -5059,8 +5111,8 @@

    @@ -5179,8 +5231,8 @@

    @@ -5251,8 +5303,8 @@

    @@ -5323,8 +5375,8 @@

    @@ -5406,8 +5458,8 @@

    @@ -5482,8 +5534,8 @@

    @@ -5568,8 +5620,8 @@

    @@ -5640,8 +5692,8 @@

    @@ -5712,8 +5764,8 @@

    @@ -5784,8 +5836,8 @@

    @@ -5856,8 +5908,8 @@

    @@ -5928,8 +5980,8 @@

    @@ -5972,7 +6024,7 @@

    @@ -6000,7 +6052,7 @@

    @@ -6033,7 +6085,7 @@

    @@ -6061,7 +6113,7 @@

    @@ -6101,7 +6153,7 @@

    @@ -6134,7 +6186,7 @@

    @@ -6162,7 +6214,7 @@

    @@ -6189,7 +6241,7 @@

    @@ -6217,7 +6269,34 @@

    + + + + +
    + + + + Public + stopAutomaticRefresh + + + +
    + + stopAutomaticRefresh() +
    +
    +

    Stops timers for automatic refresh. +To restart it, call setupAutomaticSilentRefresh again.

    +
    Returns : void @@ -5018,8 +5070,8 @@

    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    - + +
    + + + + + + + + + + @@ -6245,7 +6324,7 @@

    @@ -6273,7 +6352,7 @@

    @@ -6301,7 +6380,7 @@

    @@ -6329,7 +6408,7 @@

    @@ -6363,7 +6442,7 @@

    @@ -6398,7 +6477,7 @@

    @@ -6426,7 +6505,7 @@

    @@ -7146,6 +7225,12 @@

    +

    + + @@ -8454,28 +8539,36 @@

    import { Injectable, NgZone, Optional, OnDestroy, Inject } from '@angular/core';
     import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
     import { Observable, Subject, Subscription, of, race, from } from 'rxjs';
    -import { filter, delay, first, tap, map, switchMap, debounceTime } from 'rxjs/operators';
    +import {
    +  filter,
    +  delay,
    +  first,
    +  tap,
    +  map,
    +  switchMap,
    +  debounceTime
    +} from 'rxjs/operators';
     import { DOCUMENT } from '@angular/common';
     
     import {
    -    ValidationHandler,
    -    ValidationParams
    +  ValidationHandler,
    +  ValidationParams
     } from './token-validation/validation-handler';
     import { UrlHelperService } from './url-helper.service';
     import {
    -    OAuthEvent,
    -    OAuthInfoEvent,
    -    OAuthErrorEvent,
    -    OAuthSuccessEvent
    +  OAuthEvent,
    +  OAuthInfoEvent,
    +  OAuthErrorEvent,
    +  OAuthSuccessEvent
     } from './events';
     import {
    -    OAuthLogger,
    -    OAuthStorage,
    -    LoginOptions,
    -    ParsedIdToken,
    -    OidcDiscoveryDoc,
    -    TokenResponse,
    -    UserInfo
    +  OAuthLogger,
    +  OAuthStorage,
    +  LoginOptions,
    +  ParsedIdToken,
    +  OidcDiscoveryDoc,
    +  TokenResponse,
    +  UserInfo
     } from './types';
     import { b64DecodeUnicode, base64UrlEncode } from './base64-helper';
     import { AuthConfig } from './auth.config';
    @@ -8489,2320 +8582,2500 @@ 

    */ @Injectable() export class OAuthService extends AuthConfig implements OnDestroy { - // Extending AuthConfig ist just for LEGACY reasons - // to not break existing code. - - /** - * The ValidationHandler used to validate received - * id_tokens. - */ - public tokenValidationHandler: ValidationHandler; - - /** - * @internal - * Deprecated: use property events instead - */ - public discoveryDocumentLoaded = false; + // Extending AuthConfig ist just for LEGACY reasons + // to not break existing code. + + /** + * The ValidationHandler used to validate received + * id_tokens. + */ + public tokenValidationHandler: ValidationHandler; + + /** + * @internal + * Deprecated: use property events instead + */ + public discoveryDocumentLoaded = false; + + /** + * @internal + * Deprecated: use property events instead + */ + public discoveryDocumentLoaded$: Observable<OidcDiscoveryDoc>; + + /** + * Informs about events, like token_received or token_expires. + * See the string enum EventType for a full list of event types. + */ + public events: Observable<OAuthEvent>; + + /** + * The received (passed around) state, when logging + * in with implicit flow. + */ + public state? = ''; + + protected eventsSubject: Subject<OAuthEvent> = new Subject<OAuthEvent>(); + protected discoveryDocumentLoadedSubject: Subject< + OidcDiscoveryDoc + > = new Subject<OidcDiscoveryDoc>(); + protected silentRefreshPostMessageEventListener: EventListener; + protected grantTypesSupported: Array<string> = []; + protected _storage: OAuthStorage; + protected accessTokenTimeoutSubscription: Subscription; + protected idTokenTimeoutSubscription: Subscription; + protected tokenReceivedSubscription: Subscription; + protected sessionCheckEventListener: EventListener; + protected jwksUri: string; + protected sessionCheckTimer: any; + protected silentRefreshSubject: string; + protected inImplicitFlow = false; + + protected saveNoncesInLocalStorage = false; + + constructor( + protected ngZone: NgZone, + protected http: HttpClient, + @Optional() storage: OAuthStorage, + @Optional() tokenValidationHandler: ValidationHandler, + @Optional() protected config: AuthConfig, + protected urlHelper: UrlHelperService, + protected logger: OAuthLogger, + @Optional() protected crypto: HashHandler, + @Inject(DOCUMENT) private document: Document + ) { + super(); + + this.debug('angular-oauth2-oidc v8-beta'); + + this.discoveryDocumentLoaded$ = this.discoveryDocumentLoadedSubject.asObservable(); + this.events = this.eventsSubject.asObservable(); + + if (tokenValidationHandler) { + this.tokenValidationHandler = tokenValidationHandler; + } - /** - * @internal - * Deprecated: use property events instead - */ - public discoveryDocumentLoaded$: Observable<OidcDiscoveryDoc>; + if (config) { + this.configure(config); + } - /** - * Informs about events, like token_received or token_expires. - * See the string enum EventType for a full list of event types. - */ - public events: Observable<OAuthEvent>; + try { + if (storage) { + this.setStorage(storage); + } else if (typeof sessionStorage !== 'undefined') { + this.setStorage(sessionStorage); + } + } catch (e) { + console.error( + 'No OAuthStorage provided and cannot access default (sessionStorage).' + + 'Consider providing a custom OAuthStorage implementation in your module.', + e + ); + } - /** - * The received (passed around) state, when logging - * in with implicit flow. - */ - public state?= ''; - - protected eventsSubject: Subject<OAuthEvent> = new Subject<OAuthEvent>(); - protected discoveryDocumentLoadedSubject: Subject<OidcDiscoveryDoc> = new Subject<OidcDiscoveryDoc>(); - protected silentRefreshPostMessageEventListener: EventListener; - protected grantTypesSupported: Array<string> = []; - protected _storage: OAuthStorage; - protected accessTokenTimeoutSubscription: Subscription; - protected idTokenTimeoutSubscription: Subscription; - protected tokenReceivedSubscription: Subscription; - protected sessionCheckEventListener: EventListener; - protected jwksUri: string; - protected sessionCheckTimer: any; - protected silentRefreshSubject: string; - protected inImplicitFlow = false; - - constructor( - protected ngZone: NgZone, - protected http: HttpClient, - @Optional() storage: OAuthStorage, - @Optional() tokenValidationHandler: ValidationHandler, - @Optional() protected config: AuthConfig, - protected urlHelper: UrlHelperService, - protected logger: OAuthLogger, - @Optional() protected crypto: HashHandler, - @Inject(DOCUMENT) private document: Document, + // in IE, sessionStorage does not always survive a redirect + if ( + typeof window !== 'undefined' && + typeof window['localStorage'] !== 'undefined' ) { - super(); + const ua = window?.navigator?.userAgent; + const msie = ua?.includes('MSIE ') || ua?.includes('Trident'); - this.debug('angular-oauth2-oidc v8-beta'); - - this.discoveryDocumentLoaded$ = this.discoveryDocumentLoadedSubject.asObservable(); - this.events = this.eventsSubject.asObservable(); - - if (tokenValidationHandler) { - this.tokenValidationHandler = tokenValidationHandler; - } + if (msie) { + this.saveNoncesInLocalStorage = true; + } + } - if (config) { - this.configure(config); - } + this.setupRefreshTimer(); + } - try { - if (storage) { - this.setStorage(storage); - } else if (typeof sessionStorage !== 'undefined') { - this.setStorage(sessionStorage); - } - } catch (e) { + /** + * Use this method to configure the service + * @param config the configuration + */ + public configure(config: AuthConfig): void { + // For the sake of downward compatibility with + // original configuration API + Object.assign(this, new AuthConfig(), config); - console.error( - 'No OAuthStorage provided and cannot access default (sessionStorage).' - + 'Consider providing a custom OAuthStorage implementation in your module.', - e - ); - } + this.config = Object.assign({} as AuthConfig, new AuthConfig(), config); - this.setupRefreshTimer(); + if (this.sessionChecksEnabled) { + this.setupSessionCheck(); } - /** - * Use this method to configure the service - * @param config the configuration - */ - public configure(config: AuthConfig): void { - // For the sake of downward compatibility with - // original configuration API - Object.assign(this, new AuthConfig(), config); + this.configChanged(); + } - this.config = Object.assign({} as AuthConfig, new AuthConfig(), config); + protected configChanged(): void { + this.setupRefreshTimer(); + } - if (this.sessionChecksEnabled) { - this.setupSessionCheck(); + public restartSessionChecksIfStillLoggedIn(): void { + if (this.hasValidIdToken()) { + this.initSessionCheck(); + } + } + + protected restartRefreshTimerIfStillLoggedIn(): void { + this.setupExpirationTimers(); + } + + protected setupSessionCheck(): void { + this.events.pipe(filter(e => e.type === 'token_received')).subscribe(e => { + this.initSessionCheck(); + }); + } + + /** + * Will setup up silent refreshing for when the token is + * about to expire. When the user is logged out via this.logOut method, the + * silent refreshing will pause and not refresh the tokens until the user is + * logged back in via receiving a new token. + * @param params Additional parameter to pass + * @param listenTo Setup automatic refresh of a specific token type + */ + public setupAutomaticSilentRefresh( + params: object = {}, + listenTo?: 'access_token' | 'id_token' | 'any', + noPrompt = true + ): void { + let shouldRunSilentRefresh = true; + this.events + .pipe( + tap(e => { + if (e.type === 'token_received') { + shouldRunSilentRefresh = true; + } else if (e.type === 'logout') { + shouldRunSilentRefresh = false; + } + }), + filter(e => e.type === 'token_expires'), + debounceTime(1000) + ) + .subscribe(e => { + const event = e as OAuthInfoEvent; + if ( + (listenTo == null || listenTo === 'any' || event.info === listenTo) && + shouldRunSilentRefresh + ) { + // this.silentRefresh(params, noPrompt).catch(_ => { + this.refreshInternal(params, noPrompt).catch(_ => { + this.debug('Automatic silent refresh did not work'); + }); } + }); - this.configChanged(); + this.restartRefreshTimerIfStillLoggedIn(); + } + + protected refreshInternal( + params, + noPrompt + ): Promise<TokenResponse | OAuthEvent> { + if (!this.useSilentRefresh && this.responseType === 'code') { + return this.refreshToken(); + } else { + return this.silentRefresh(params, noPrompt); } - - protected configChanged(): void { - this.setupRefreshTimer(); + } + + /** + * Convenience method that first calls `loadDiscoveryDocument(...)` and + * directly chains using the `then(...)` part of the promise to call + * the `tryLogin(...)` method. + * + * @param options LoginOptions to pass through to `tryLogin(...)` + */ + public loadDiscoveryDocumentAndTryLogin( + options: LoginOptions = null + ): Promise<boolean> { + return this.loadDiscoveryDocument().then(doc => { + return this.tryLogin(options); + }); + } + + /** + * Convenience method that first calls `loadDiscoveryDocumentAndTryLogin(...)` + * and if then chains to `initLoginFlow()`, but only if there is no valid + * IdToken or no valid AccessToken. + * + * @param options LoginOptions to pass through to `tryLogin(...)` + */ + public loadDiscoveryDocumentAndLogin( + options: LoginOptions & { state?: string } = null + ): Promise<boolean> { + if (!options) { + options = { state: '' }; } - - public restartSessionChecksIfStillLoggedIn(): void { - if (this.hasValidIdToken()) { - this.initSessionCheck(); + return this.loadDiscoveryDocumentAndTryLogin(options).then(_ => { + if (!this.hasValidIdToken() || !this.hasValidAccessToken()) { + if (this.responseType === 'code') { + this.initCodeFlow(); + } else { + this.initImplicitFlow(); } - } + return false; + } else { + return true; + } + }); + } - protected restartRefreshTimerIfStillLoggedIn(): void { - this.setupExpirationTimers(); + protected debug(...args): void { + if (this.showDebugInformation) { + this.logger.debug.apply(this.logger, args); } + } - protected setupSessionCheck(): void { - this.events.pipe(filter(e => e.type === 'token_received')).subscribe(e => { - this.initSessionCheck(); - }); - } + protected validateUrlFromDiscoveryDocument(url: string): string[] { + const errors: string[] = []; + const httpsCheck = this.validateUrlForHttps(url); + const issuerCheck = this.validateUrlAgainstIssuer(url); - /** - * Will setup up silent refreshing for when the token is - * about to expire. When the user is logged out via this.logOut method, the - * silent refreshing will pause and not refresh the tokens until the user is - * logged back in via receiving a new token. - * @param params Additional parameter to pass - * @param listenTo Setup automatic refresh of a specific token type - */ - public setupAutomaticSilentRefresh(params: object = {}, listenTo?: 'access_token' | 'id_token' | 'any', noPrompt = true): void { - let shouldRunSilentRefresh = true; - this.events.pipe( - tap((e) => { - if (e.type === 'token_received') { - shouldRunSilentRefresh = true; - } else if (e.type === 'logout') { - shouldRunSilentRefresh = false; - } - }), - filter(e => e.type === 'token_expires'), - debounceTime(1000), - ).subscribe(e => { - const event = e as OAuthInfoEvent; - if ((listenTo == null || listenTo === 'any' || event.info === listenTo) && shouldRunSilentRefresh) { - // this.silentRefresh(params, noPrompt).catch(_ => { - this.refreshInternal(params, noPrompt).catch(_ => { - this.debug('Automatic silent refresh did not work'); - }); - } - }); + if (!httpsCheck) { + errors.push( + 'https for all urls required. Also for urls received by discovery.' + ); + } - this.restartRefreshTimerIfStillLoggedIn(); + if (!issuerCheck) { + errors.push( + 'Every url in discovery document has to start with the issuer url.' + + 'Also see property strictDiscoveryDocumentValidation.' + ); } - protected refreshInternal(params, noPrompt): Promise<TokenResponse | OAuthEvent> { + return errors; + } - if (!this.useSilentRefresh && this.responseType === 'code') { - return this.refreshToken(); - } else { - return this.silentRefresh(params, noPrompt); - } + protected validateUrlForHttps(url: string): boolean { + if (!url) { + return true; } - /** - * Convenience method that first calls `loadDiscoveryDocument(...)` and - * directly chains using the `then(...)` part of the promise to call - * the `tryLogin(...)` method. - * - * @param options LoginOptions to pass through to `tryLogin(...)` - */ - public loadDiscoveryDocumentAndTryLogin(options: LoginOptions = null): Promise<boolean> { - return this.loadDiscoveryDocument().then(doc => { - return this.tryLogin(options); - }); - } + const lcUrl = url.toLowerCase(); - /** - * Convenience method that first calls `loadDiscoveryDocumentAndTryLogin(...)` - * and if then chains to `initLoginFlow()`, but only if there is no valid - * IdToken or no valid AccessToken. - * - * @param options LoginOptions to pass through to `tryLogin(...)` - */ - public loadDiscoveryDocumentAndLogin(options: LoginOptions & { state?: string } = null): Promise<boolean> { - if (!options) { - options = { state: '' }; - } - return this.loadDiscoveryDocumentAndTryLogin(options).then(_ => { - if (!this.hasValidIdToken() || !this.hasValidAccessToken()) { - if (this.responseType === 'code') { - this.initCodeFlow(); - } else { - this.initImplicitFlow(); - } - return false; - } else { - return true; - } - }); + if (this.requireHttps === false) { + return true; } - protected debug(...args): void { - if (this.showDebugInformation) { - this.logger.debug.apply(this.logger, args); - } + if ( + (lcUrl.match(/^http:\/\/localhost($|[:\/])/) || + lcUrl.match(/^http:\/\/localhost($|[:\/])/)) && + this.requireHttps === 'remoteOnly' + ) { + return true; } - protected validateUrlFromDiscoveryDocument(url: string): string[] { - const errors: string[] = []; - const httpsCheck = this.validateUrlForHttps(url); - const issuerCheck = this.validateUrlAgainstIssuer(url); - - if (!httpsCheck) { - errors.push( - 'https for all urls required. Also for urls received by discovery.' - ); - } - - if (!issuerCheck) { - errors.push( - 'Every url in discovery document has to start with the issuer url.' + - 'Also see property strictDiscoveryDocumentValidation.' - ); - } + return lcUrl.startsWith('https://'); + } - return errors; + protected assertUrlNotNullAndCorrectProtocol( + url: string | undefined, + description: string + ) { + if (!url) { + throw new Error(`'${description}' should not be null`); } + if (!this.validateUrlForHttps(url)) { + throw new Error( + `'${description}' must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).` + ); + } + } - protected validateUrlForHttps(url: string): boolean { - if (!url) { - return true; - } - - const lcUrl = url.toLowerCase(); - - if (this.requireHttps === false) { - return true; - } - - if ( - (lcUrl.match(/^http:\/\/localhost($|[:\/])/) || - lcUrl.match(/^http:\/\/localhost($|[:\/])/)) && - this.requireHttps === 'remoteOnly' - ) { - return true; - } - - return lcUrl.startsWith('https://'); + protected validateUrlAgainstIssuer(url: string) { + if (!this.strictDiscoveryDocumentValidation) { + return true; + } + if (!url) { + return true; } + return url.toLowerCase().startsWith(this.issuer.toLowerCase()); + } - protected assertUrlNotNullAndCorrectProtocol(url: string | undefined, description: string) { - if (!url) { - throw new Error(`'${description}' should not be null`); - } - if (!this.validateUrlForHttps(url)) { - throw new Error(`'${description}' must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS).`); - } + protected setupRefreshTimer(): void { + if (typeof window === 'undefined') { + this.debug('timer not supported on this plattform'); + return; } - protected validateUrlAgainstIssuer(url: string) { - if (!this.strictDiscoveryDocumentValidation) { - return true; - } - if (!url) { - return true; - } - return url.toLowerCase().startsWith(this.issuer.toLowerCase()); + if (this.hasValidIdToken() || this.hasValidAccessToken()) { + this.clearAccessTokenTimer(); + this.clearIdTokenTimer(); + this.setupExpirationTimers(); } - protected setupRefreshTimer(): void { - if (typeof window === 'undefined') { - this.debug('timer not supported on this plattform'); - return; - } + if (this.tokenReceivedSubscription) + this.tokenReceivedSubscription.unsubscribe(); - if (this.hasValidIdToken() || this.hasValidAccessToken()) { - this.clearAccessTokenTimer(); - this.clearIdTokenTimer(); - this.setupExpirationTimers(); - } + this.tokenReceivedSubscription = this.events + .pipe(filter(e => e.type === 'token_received')) + .subscribe(_ => { + this.clearAccessTokenTimer(); + this.clearIdTokenTimer(); + this.setupExpirationTimers(); + }); + } - if (this.tokenReceivedSubscription) - this.tokenReceivedSubscription.unsubscribe(); + protected setupExpirationTimers(): void { + if (this.hasValidAccessToken()) { + this.setupAccessTokenTimer(); + } - this.tokenReceivedSubscription = this.events.pipe(filter(e => e.type === 'token_received')).subscribe(_ => { - this.clearAccessTokenTimer(); - this.clearIdTokenTimer(); - this.setupExpirationTimers(); + if (this.hasValidIdToken()) { + this.setupIdTokenTimer(); + } + } + + protected setupAccessTokenTimer(): void { + const expiration = this.getAccessTokenExpiration(); + const storedAt = this.getAccessTokenStoredAt(); + const timeout = this.calcTimeout(storedAt, expiration); + + this.ngZone.runOutsideAngular(() => { + this.accessTokenTimeoutSubscription = of( + new OAuthInfoEvent('token_expires', 'access_token') + ) + .pipe(delay(timeout)) + .subscribe(e => { + this.ngZone.run(() => { + this.eventsSubject.next(e); + }); + }); + }); + } + + protected setupIdTokenTimer(): void { + const expiration = this.getIdTokenExpiration(); + const storedAt = this.getIdTokenStoredAt(); + const timeout = this.calcTimeout(storedAt, expiration); + + this.ngZone.runOutsideAngular(() => { + this.idTokenTimeoutSubscription = of( + new OAuthInfoEvent('token_expires', 'id_token') + ) + .pipe(delay(timeout)) + .subscribe(e => { + this.ngZone.run(() => { + this.eventsSubject.next(e); + }); }); + }); + } + + /** + * Stops timers for automatic refresh. + * To restart it, call setupAutomaticSilentRefresh again. + */ + public stopAutomaticRefresh() { + this.clearAccessTokenTimer(); + this.clearIdTokenTimer(); + } + + protected clearAccessTokenTimer(): void { + if (this.accessTokenTimeoutSubscription) { + this.accessTokenTimeoutSubscription.unsubscribe(); } + } - protected setupExpirationTimers(): void { - if (this.hasValidAccessToken()) { - this.setupAccessTokenTimer(); - } - - - if (this.hasValidIdToken()) { - this.setupIdTokenTimer(); - } + protected clearIdTokenTimer(): void { + if (this.idTokenTimeoutSubscription) { + this.idTokenTimeoutSubscription.unsubscribe(); } + } + + protected calcTimeout(storedAt: number, expiration: number): number { + const now = Date.now(); + const delta = + (expiration - storedAt) * this.timeoutFactor - (now - storedAt); + return Math.max(0, delta); + } + + /** + * DEPRECATED. Use a provider for OAuthStorage instead: + * + * { provide: OAuthStorage, useFactory: oAuthStorageFactory } + * export function oAuthStorageFactory(): OAuthStorage { return localStorage; } + * Sets a custom storage used to store the received + * tokens on client side. By default, the browser's + * sessionStorage is used. + * @ignore + * + * @param storage + */ + public setStorage(storage: OAuthStorage): void { + this._storage = storage; + this.configChanged(); + } + + /** + * Loads the discovery document to configure most + * properties of this service. The url of the discovery + * document is infered from the issuer's url according + * to the OpenId Connect spec. To use another url you + * can pass it to to optional parameter fullUrl. + * + * @param fullUrl + */ + public loadDiscoveryDocument( + fullUrl: string = null + ): Promise<OAuthSuccessEvent> { + return new Promise((resolve, reject) => { + if (!fullUrl) { + fullUrl = this.issuer || ''; + if (!fullUrl.endsWith('/')) { + fullUrl += '/'; + } + fullUrl += '.well-known/openid-configuration'; + } + + if (!this.validateUrlForHttps(fullUrl)) { + reject( + "issuer must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS)." + ); + return; + } - protected setupAccessTokenTimer(): void { + this.http.get<OidcDiscoveryDoc>(fullUrl).subscribe( + doc => { + if (!this.validateDiscoveryDocument(doc)) { + this.eventsSubject.next( + new OAuthErrorEvent('discovery_document_validation_error', null) + ); + reject('discovery_document_validation_error'); + return; + } - const expiration = this.getAccessTokenExpiration(); - const storedAt = this.getAccessTokenStoredAt(); - const timeout = this.calcTimeout(storedAt, expiration); + this.loginUrl = doc.authorization_endpoint; + this.logoutUrl = doc.end_session_endpoint || this.logoutUrl; + this.grantTypesSupported = doc.grant_types_supported; + this.issuer = doc.issuer; + this.tokenEndpoint = doc.token_endpoint; + this.userinfoEndpoint = + doc.userinfo_endpoint || this.userinfoEndpoint; + this.jwksUri = doc.jwks_uri; + this.sessionCheckIFrameUrl = + doc.check_session_iframe || this.sessionCheckIFrameUrl; + + this.discoveryDocumentLoaded = true; + this.discoveryDocumentLoadedSubject.next(doc); + + if (this.sessionChecksEnabled) { + this.restartSessionChecksIfStillLoggedIn(); + } - this.ngZone.runOutsideAngular(() => { - this.accessTokenTimeoutSubscription = of( - new OAuthInfoEvent('token_expires', 'access_token') - ) - .pipe(delay(timeout)) - .subscribe(e => { - this.ngZone.run(() => { - this.eventsSubject.next(e); - }); - }); - }); + this.loadJwks() + .then(jwks => { + const result: object = { + discoveryDocument: doc, + jwks: jwks + }; + + const event = new OAuthSuccessEvent( + 'discovery_document_loaded', + result + ); + this.eventsSubject.next(event); + resolve(event); + return; + }) + .catch(err => { + this.eventsSubject.next( + new OAuthErrorEvent('discovery_document_load_error', err) + ); + reject(err); + return; + }); + }, + err => { + this.logger.error('error loading discovery document', err); + this.eventsSubject.next( + new OAuthErrorEvent('discovery_document_load_error', err) + ); + reject(err); + } + ); + }); + } + + protected loadJwks(): Promise<object> { + return new Promise<object>((resolve, reject) => { + if (this.jwksUri) { + this.http.get(this.jwksUri).subscribe( + jwks => { + this.jwks = jwks; + this.eventsSubject.next( + new OAuthSuccessEvent('discovery_document_loaded') + ); + resolve(jwks); + }, + err => { + this.logger.error('error loading jwks', err); + this.eventsSubject.next( + new OAuthErrorEvent('jwks_load_error', err) + ); + reject(err); + } + ); + } else { + resolve(null); + } + }); + } + + protected validateDiscoveryDocument(doc: OidcDiscoveryDoc): boolean { + let errors: string[]; + + if (!this.skipIssuerCheck && doc.issuer !== this.issuer) { + this.logger.error( + 'invalid issuer in discovery document', + 'expected: ' + this.issuer, + 'current: ' + doc.issuer + ); + return false; } - protected setupIdTokenTimer(): void { + errors = this.validateUrlFromDiscoveryDocument(doc.authorization_endpoint); + if (errors.length > 0) { + this.logger.error( + 'error validating authorization_endpoint in discovery document', + errors + ); + return false; + } - const expiration = this.getIdTokenExpiration(); - const storedAt = this.getIdTokenStoredAt(); - const timeout = this.calcTimeout(storedAt, expiration); + errors = this.validateUrlFromDiscoveryDocument(doc.end_session_endpoint); + if (errors.length > 0) { + this.logger.error( + 'error validating end_session_endpoint in discovery document', + errors + ); + return false; + } - this.ngZone.runOutsideAngular(() => { - this.idTokenTimeoutSubscription = of( - new OAuthInfoEvent('token_expires', 'id_token') - ) - .pipe(delay(timeout)) - .subscribe(e => { - this.ngZone.run(() => { - this.eventsSubject.next(e); - }); - }); - }); + errors = this.validateUrlFromDiscoveryDocument(doc.token_endpoint); + if (errors.length > 0) { + this.logger.error( + 'error validating token_endpoint in discovery document', + errors + ); } - protected clearAccessTokenTimer(): void { - if (this.accessTokenTimeoutSubscription) { - this.accessTokenTimeoutSubscription.unsubscribe(); - } + errors = this.validateUrlFromDiscoveryDocument(doc.userinfo_endpoint); + if (errors.length > 0) { + this.logger.error( + 'error validating userinfo_endpoint in discovery document', + errors + ); + return false; } - protected clearIdTokenTimer(): void { - if (this.idTokenTimeoutSubscription) { - this.idTokenTimeoutSubscription.unsubscribe(); - } + errors = this.validateUrlFromDiscoveryDocument(doc.jwks_uri); + if (errors.length > 0) { + this.logger.error( + 'error validating jwks_uri in discovery document', + errors + ); + return false; } - protected calcTimeout(storedAt: number, expiration: number): number { - const now = Date.now(); - const delta = (expiration - storedAt) * this.timeoutFactor - (now - storedAt); - return Math.max(0, delta); + if (this.sessionChecksEnabled && !doc.check_session_iframe) { + this.logger.warn( + 'sessionChecksEnabled is activated but discovery document' + + ' does not contain a check_session_iframe field' + ); } - /** - * DEPRECATED. Use a provider for OAuthStorage instead: - * - * { provide: OAuthStorage, useFactory: oAuthStorageFactory } - * export function oAuthStorageFactory(): OAuthStorage { return localStorage; } - * Sets a custom storage used to store the received - * tokens on client side. By default, the browser's - * sessionStorage is used. - * @ignore - * - * @param storage - */ - public setStorage(storage: OAuthStorage): void { - this._storage = storage; - this.configChanged(); - } - - /** - * Loads the discovery document to configure most - * properties of this service. The url of the discovery - * document is infered from the issuer's url according - * to the OpenId Connect spec. To use another url you - * can pass it to to optional parameter fullUrl. - * - * @param fullUrl - */ - public loadDiscoveryDocument(fullUrl: string = null): Promise<OAuthSuccessEvent> { - return new Promise((resolve, reject) => { - if (!fullUrl) { - fullUrl = this.issuer || ''; - if (!fullUrl.endsWith('/')) { - fullUrl += '/'; - } - fullUrl += '.well-known/openid-configuration'; - } + return true; + } + + /** + * Uses password flow to exchange userName and password for an + * access_token. After receiving the access_token, this method + * uses it to query the userinfo endpoint in order to get information + * about the user in question. + * + * When using this, make sure that the property oidc is set to false. + * Otherwise stricter validations take place that make this operation + * fail. + * + * @param userName + * @param password + * @param headers Optional additional http-headers. + */ + public fetchTokenUsingPasswordFlowAndLoadUserProfile( + userName: string, + password: string, + headers: HttpHeaders = new HttpHeaders() + ): Promise<UserInfo> { + return this.fetchTokenUsingPasswordFlow( + userName, + password, + headers + ).then(() => this.loadUserProfile()); + } + + /** + * Loads the user profile by accessing the user info endpoint defined by OpenId Connect. + * + * When using this with OAuth2 password flow, make sure that the property oidc is set to false. + * Otherwise stricter validations take place that make this operation fail. + */ + public loadUserProfile(): Promise<UserInfo> { + if (!this.hasValidAccessToken()) { + throw new Error('Can not load User Profile without access_token'); + } + if (!this.validateUrlForHttps(this.userinfoEndpoint)) { + throw new Error( + "userinfoEndpoint must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS)." + ); + } - if (!this.validateUrlForHttps(fullUrl)) { - reject('issuer must use HTTPS (with TLS), or config value for property \'requireHttps\' must be set to \'false\' and allow HTTP (without TLS).'); + return new Promise((resolve, reject) => { + const headers = new HttpHeaders().set( + 'Authorization', + 'Bearer ' + this.getAccessToken() + ); + + this.http + .get<UserInfo>(this.userinfoEndpoint, { headers }) + .subscribe( + info => { + this.debug('userinfo received', info); + + const existingClaims = this.getIdentityClaims() || {}; + + if (!this.skipSubjectCheck) { + if ( + this.oidc && + (!existingClaims['sub'] || info.sub !== existingClaims['sub']) + ) { + const err = + 'if property oidc is true, the received user-id (sub) has to be the user-id ' + + 'of the user that has logged in with oidc.\n' + + 'if you are not using oidc but just oauth2 password flow set oidc to false'; + + reject(err); return; + } } - this.http.get<OidcDiscoveryDoc>(fullUrl).subscribe( - doc => { - if (!this.validateDiscoveryDocument(doc)) { - this.eventsSubject.next( - new OAuthErrorEvent('discovery_document_validation_error', null) - ); - reject('discovery_document_validation_error'); - return; - } - - this.loginUrl = doc.authorization_endpoint; - this.logoutUrl = doc.end_session_endpoint || this.logoutUrl; - this.grantTypesSupported = doc.grant_types_supported; - this.issuer = doc.issuer; - this.tokenEndpoint = doc.token_endpoint; - this.userinfoEndpoint = doc.userinfo_endpoint || this.userinfoEndpoint; - this.jwksUri = doc.jwks_uri; - this.sessionCheckIFrameUrl = doc.check_session_iframe || this.sessionCheckIFrameUrl; - - this.discoveryDocumentLoaded = true; - this.discoveryDocumentLoadedSubject.next(doc); - - if (this.sessionChecksEnabled) { - this.restartSessionChecksIfStillLoggedIn(); - } - - this.loadJwks() - .then(jwks => { - const result: object = { - discoveryDocument: doc, - jwks: jwks - }; - - const event = new OAuthSuccessEvent( - 'discovery_document_loaded', - result - ); - this.eventsSubject.next(event); - resolve(event); - return; - }) - .catch(err => { - this.eventsSubject.next( - new OAuthErrorEvent('discovery_document_load_error', err) - ); - reject(err); - return; - }); - }, - err => { - this.logger.error('error loading discovery document', err); - this.eventsSubject.next( - new OAuthErrorEvent('discovery_document_load_error', err) - ); - reject(err); - } + info = Object.assign({}, existingClaims, info); + + this._storage.setItem('id_token_claims_obj', JSON.stringify(info)); + this.eventsSubject.next( + new OAuthSuccessEvent('user_profile_loaded') ); - }); - } + resolve(info); + }, + err => { + this.logger.error('error loading user info', err); + this.eventsSubject.next( + new OAuthErrorEvent('user_profile_load_error', err) + ); + reject(err); + } + ); + }); + } + + /** + * Uses password flow to exchange userName and password for an access_token. + * @param userName + * @param password + * @param headers Optional additional http-headers. + */ + public fetchTokenUsingPasswordFlow( + userName: string, + password: string, + headers: HttpHeaders = new HttpHeaders() + ): Promise<TokenResponse> { + this.assertUrlNotNullAndCorrectProtocol( + this.tokenEndpoint, + 'tokenEndpoint' + ); + + return new Promise((resolve, reject) => { + /** + * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to + * serialize and parse URL parameter keys and values. + * + * @stable + */ + let params = new HttpParams({ encoder: new WebHttpUrlEncodingCodec() }) + .set('grant_type', 'password') + .set('scope', this.scope) + .set('username', userName) + .set('password', password); + + if (this.useHttpBasicAuth) { + const header = btoa(`${this.clientId}:${this.dummyClientSecret}`); + headers = headers.set('Authorization', 'Basic ' + header); + } - protected loadJwks(): Promise<object> { - return new Promise<object>((resolve, reject) => { - if (this.jwksUri) { - this.http.get(this.jwksUri).subscribe( - jwks => { - this.jwks = jwks; - this.eventsSubject.next( - new OAuthSuccessEvent('discovery_document_loaded') - ); - resolve(jwks); - }, - err => { - this.logger.error('error loading jwks', err); - this.eventsSubject.next( - new OAuthErrorEvent('jwks_load_error', err) - ); - reject(err); - } - ); - } else { - resolve(null); - } - }); - } + if (!this.useHttpBasicAuth) { + params = params.set('client_id', this.clientId); + } - protected validateDiscoveryDocument(doc: OidcDiscoveryDoc): boolean { - let errors: string[]; + if (!this.useHttpBasicAuth && this.dummyClientSecret) { + params = params.set('client_secret', this.dummyClientSecret); + } - if (!this.skipIssuerCheck && doc.issuer !== this.issuer) { - this.logger.error( - 'invalid issuer in discovery document', - 'expected: ' + this.issuer, - 'current: ' + doc.issuer - ); - return false; + if (this.customQueryParams) { + for (const key of Object.getOwnPropertyNames(this.customQueryParams)) { + params = params.set(key, this.customQueryParams[key]); } + } - errors = this.validateUrlFromDiscoveryDocument(doc.authorization_endpoint); - if (errors.length > 0) { - this.logger.error( - 'error validating authorization_endpoint in discovery document', - errors - ); - return false; - } + headers = headers.set( + 'Content-Type', + 'application/x-www-form-urlencoded' + ); - errors = this.validateUrlFromDiscoveryDocument(doc.end_session_endpoint); - if (errors.length > 0) { - this.logger.error( - 'error validating end_session_endpoint in discovery document', - errors + this.http + .post<TokenResponse>(this.tokenEndpoint, params, { headers }) + .subscribe( + tokenResponse => { + this.debug('tokenResponse', tokenResponse); + this.storeAccessTokenResponse( + tokenResponse.access_token, + tokenResponse.refresh_token, + tokenResponse.expires_in, + tokenResponse.scope, + this.extractRecognizedCustomParameters(tokenResponse) ); - return false; - } - errors = this.validateUrlFromDiscoveryDocument(doc.token_endpoint); - if (errors.length > 0) { - this.logger.error( - 'error validating token_endpoint in discovery document', - errors - ); - } + this.eventsSubject.next(new OAuthSuccessEvent('token_received')); + resolve(tokenResponse); + }, + err => { + this.logger.error('Error performing password flow', err); + this.eventsSubject.next(new OAuthErrorEvent('token_error', err)); + reject(err); + } + ); + }); + } + + /** + * Refreshes the token using a refresh_token. + * This does not work for implicit flow, b/c + * there is no refresh_token in this flow. + * A solution for this is provided by the + * method silentRefresh. + */ + public refreshToken(): Promise<TokenResponse> { + this.assertUrlNotNullAndCorrectProtocol( + this.tokenEndpoint, + 'tokenEndpoint' + ); + + return new Promise((resolve, reject) => { + let params = new HttpParams() + .set('grant_type', 'refresh_token') + .set('scope', this.scope) + .set('refresh_token', this._storage.getItem('refresh_token')); + + let headers = new HttpHeaders().set( + 'Content-Type', + 'application/x-www-form-urlencoded' + ); + + if (this.useHttpBasicAuth) { + const header = btoa(`${this.clientId}:${this.dummyClientSecret}`); + headers = headers.set('Authorization', 'Basic ' + header); + } - errors = this.validateUrlFromDiscoveryDocument(doc.userinfo_endpoint); - if (errors.length > 0) { - this.logger.error( - 'error validating userinfo_endpoint in discovery document', - errors - ); - return false; - } + if (!this.useHttpBasicAuth) { + params = params.set('client_id', this.clientId); + } - errors = this.validateUrlFromDiscoveryDocument(doc.jwks_uri); - if (errors.length > 0) { - this.logger.error('error validating jwks_uri in discovery document', errors); - return false; - } + if (!this.useHttpBasicAuth && this.dummyClientSecret) { + params = params.set('client_secret', this.dummyClientSecret); + } - if (this.sessionChecksEnabled && !doc.check_session_iframe) { - this.logger.warn( - 'sessionChecksEnabled is activated but discovery document' + - ' does not contain a check_session_iframe field' - ); + if (this.customQueryParams) { + for (const key of Object.getOwnPropertyNames(this.customQueryParams)) { + params = params.set(key, this.customQueryParams[key]); } + } - return true; - } - - /** - * Uses password flow to exchange userName and password for an - * access_token. After receiving the access_token, this method - * uses it to query the userinfo endpoint in order to get information - * about the user in question. - * - * When using this, make sure that the property oidc is set to false. - * Otherwise stricter validations take place that make this operation - * fail. - * - * @param userName - * @param password - * @param headers Optional additional http-headers. - */ - public fetchTokenUsingPasswordFlowAndLoadUserProfile( - userName: string, - password: string, - headers: HttpHeaders = new HttpHeaders() - ): Promise<UserInfo> { - return this.fetchTokenUsingPasswordFlow(userName, password, headers).then( - () => this.loadUserProfile() - ); - } - - /** - * Loads the user profile by accessing the user info endpoint defined by OpenId Connect. - * - * When using this with OAuth2 password flow, make sure that the property oidc is set to false. - * Otherwise stricter validations take place that make this operation fail. - */ - public loadUserProfile(): Promise<UserInfo> { - if (!this.hasValidAccessToken()) { - throw new Error('Can not load User Profile without access_token'); - } - if (!this.validateUrlForHttps(this.userinfoEndpoint)) { - throw new Error('userinfoEndpoint must use HTTPS (with TLS), or config value for property \'requireHttps\' must be set to \'false\' and allow HTTP (without TLS).'); - } - - return new Promise((resolve, reject) => { - const headers = new HttpHeaders().set( - 'Authorization', - 'Bearer ' + this.getAccessToken() + this.http + .post<TokenResponse>(this.tokenEndpoint, params, { headers }) + .pipe( + switchMap(tokenResponse => { + if (tokenResponse.id_token) { + return from( + this.processIdToken( + tokenResponse.id_token, + tokenResponse.access_token, + true + ) + ).pipe( + tap(result => this.storeIdToken(result)), + map(_ => tokenResponse) + ); + } else { + return of(tokenResponse); + } + }) + ) + .subscribe( + tokenResponse => { + this.debug('refresh tokenResponse', tokenResponse); + this.storeAccessTokenResponse( + tokenResponse.access_token, + tokenResponse.refresh_token, + tokenResponse.expires_in, + tokenResponse.scope, + this.extractRecognizedCustomParameters(tokenResponse) ); - this.http.get<UserInfo>(this.userinfoEndpoint, { headers }).subscribe( - info => { - this.debug('userinfo received', info); - - const existingClaims = this.getIdentityClaims() || {}; - - if (!this.skipSubjectCheck) { - if ( - this.oidc && - (!existingClaims['sub'] || info.sub !== existingClaims['sub']) - ) { - const err = - 'if property oidc is true, the received user-id (sub) has to be the user-id ' + - 'of the user that has logged in with oidc.\n' + - 'if you are not using oidc but just oauth2 password flow set oidc to false'; - - reject(err); - return; - } - } - - info = Object.assign({}, existingClaims, info); - - this._storage.setItem('id_token_claims_obj', JSON.stringify(info)); - this.eventsSubject.next(new OAuthSuccessEvent('user_profile_loaded')); - resolve(info); - }, - err => { - this.logger.error('error loading user info', err); - this.eventsSubject.next( - new OAuthErrorEvent('user_profile_load_error', err) - ); - reject(err); - } + this.eventsSubject.next(new OAuthSuccessEvent('token_received')); + this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed')); + resolve(tokenResponse); + }, + err => { + this.logger.error('Error refreshing token', err); + this.eventsSubject.next( + new OAuthErrorEvent('token_refresh_error', err) ); - }); + reject(err); + } + ); + }); + } + + protected removeSilentRefreshEventListener(): void { + if (this.silentRefreshPostMessageEventListener) { + window.removeEventListener( + 'message', + this.silentRefreshPostMessageEventListener + ); + this.silentRefreshPostMessageEventListener = null; } - - /** - * Uses password flow to exchange userName and password for an access_token. - * @param userName - * @param password - * @param headers Optional additional http-headers. - */ - public fetchTokenUsingPasswordFlow( - userName: string, - password: string, - headers: HttpHeaders = new HttpHeaders() - - ): Promise<TokenResponse> { - this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, 'tokenEndpoint'); - - return new Promise((resolve, reject) => { - /** - * A `HttpParameterCodec` that uses `encodeURIComponent` and `decodeURIComponent` to - * serialize and parse URL parameter keys and values. - * - * @stable - */ - let params = new HttpParams({ encoder: new WebHttpUrlEncodingCodec() }) - .set('grant_type', 'password') - .set('scope', this.scope) - .set('username', userName) - .set('password', password); - - if (this.useHttpBasicAuth) { - const header = btoa(`${this.clientId}:${this.dummyClientSecret}`); - headers = headers.set( - 'Authorization', - 'Basic ' + header); - } - - if (!this.useHttpBasicAuth) { - params = params.set('client_id', this.clientId); - } - - if (!this.useHttpBasicAuth && this.dummyClientSecret) { - params = params.set('client_secret', this.dummyClientSecret); - } - - if (this.customQueryParams) { - for (const key of Object.getOwnPropertyNames(this.customQueryParams)) { - params = params.set(key, this.customQueryParams[key]); - } - } - - headers = headers.set( - 'Content-Type', - 'application/x-www-form-urlencoded' - ); - - this.http - .post<TokenResponse>(this.tokenEndpoint, params, { headers }) - .subscribe( - tokenResponse => { - this.debug('tokenResponse', tokenResponse); - this.storeAccessTokenResponse( - tokenResponse.access_token, - tokenResponse.refresh_token, - tokenResponse.expires_in, - tokenResponse.scope, - this.extractRecognizedCustomParameters(tokenResponse) - ); - - this.eventsSubject.next(new OAuthSuccessEvent('token_received')); - resolve(tokenResponse); - }, - err => { - this.logger.error('Error performing password flow', err); - this.eventsSubject.next(new OAuthErrorEvent('token_error', err)); - reject(err); - } - ); - }); + } + + protected setupSilentRefreshEventListener(): void { + this.removeSilentRefreshEventListener(); + + this.silentRefreshPostMessageEventListener = (e: MessageEvent) => { + const message = this.processMessageEventMessage(e); + + this.tryLogin({ + customHashFragment: message, + preventClearHashAfterLogin: true, + customRedirectUri: this.silentRefreshRedirectUri || this.redirectUri + }).catch(err => this.debug('tryLogin during silent refresh failed', err)); + }; + + window.addEventListener( + 'message', + this.silentRefreshPostMessageEventListener + ); + } + + /** + * Performs a silent refresh for implicit flow. + * Use this method to get new tokens when/before + * the existing tokens expire. + */ + public silentRefresh( + params: object = {}, + noPrompt = true + ): Promise<OAuthEvent> { + const claims: object = this.getIdentityClaims() || {}; + + if (this.useIdTokenHintForSilentRefresh && this.hasValidIdToken()) { + params['id_token_hint'] = this.getIdToken(); } - /** - * Refreshes the token using a refresh_token. - * This does not work for implicit flow, b/c - * there is no refresh_token in this flow. - * A solution for this is provided by the - * method silentRefresh. - */ - public refreshToken(): Promise<TokenResponse> { - this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, 'tokenEndpoint'); - - return new Promise((resolve, reject) => { - let params = new HttpParams() - .set('grant_type', 'refresh_token') - .set('scope', this.scope) - .set('refresh_token', this._storage.getItem('refresh_token')); - - let headers = new HttpHeaders().set( - 'Content-Type', - 'application/x-www-form-urlencoded' - ); - - if (this.useHttpBasicAuth) { - const header = btoa(`${this.clientId}:${this.dummyClientSecret}`); - headers = headers.set( - 'Authorization', - 'Basic ' + header); - } - - if (!this.useHttpBasicAuth) { - params = params.set('client_id', this.clientId); - } - - if (!this.useHttpBasicAuth && this.dummyClientSecret) { - params = params.set('client_secret', this.dummyClientSecret); - } - - if (this.customQueryParams) { - for (const key of Object.getOwnPropertyNames(this.customQueryParams)) { - params = params.set(key, this.customQueryParams[key]); - } - } - - this.http - .post<TokenResponse>(this.tokenEndpoint, params, { headers }) - .pipe(switchMap(tokenResponse => { - if (tokenResponse.id_token) { - return from(this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, true)) - .pipe( - tap(result => this.storeIdToken(result)), - map(_ => tokenResponse) - ); - } else { - return of(tokenResponse); - } - })) - .subscribe( - tokenResponse => { - this.debug('refresh tokenResponse', tokenResponse); - this.storeAccessTokenResponse( - tokenResponse.access_token, - tokenResponse.refresh_token, - tokenResponse.expires_in, - tokenResponse.scope, - this.extractRecognizedCustomParameters(tokenResponse) - ); - - this.eventsSubject.next(new OAuthSuccessEvent('token_received')); - this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed')); - resolve(tokenResponse); - }, - err => { - this.logger.error('Error refreshing token', err); - this.eventsSubject.next( - new OAuthErrorEvent('token_refresh_error', err) - ); - reject(err); - } - ); - }); + if (!this.validateUrlForHttps(this.loginUrl)) { + throw new Error( + "loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS)." + ); } - protected removeSilentRefreshEventListener(): void { - if (this.silentRefreshPostMessageEventListener) { - window.removeEventListener( - 'message', - this.silentRefreshPostMessageEventListener - ); - this.silentRefreshPostMessageEventListener = null; - } + if (typeof document === 'undefined') { + throw new Error('silent refresh is not supported on this platform'); } - protected setupSilentRefreshEventListener(): void { - this.removeSilentRefreshEventListener(); + const existingIframe = document.getElementById( + this.silentRefreshIFrameName + ); - this.silentRefreshPostMessageEventListener = (e: MessageEvent) => { - const message = this.processMessageEventMessage(e); - - this.tryLogin({ - customHashFragment: message, - preventClearHashAfterLogin: true, - customRedirectUri: this.silentRefreshRedirectUri || this.redirectUri - }).catch(err => this.debug('tryLogin during silent refresh failed', err)); - }; - - window.addEventListener( - 'message', - this.silentRefreshPostMessageEventListener - ); + if (existingIframe) { + document.body.removeChild(existingIframe); } - /** - * Performs a silent refresh for implicit flow. - * Use this method to get new tokens when/before - * the existing tokens expire. - */ - public silentRefresh(params: object = {}, noPrompt = true): Promise<OAuthEvent> { - const claims: object = this.getIdentityClaims() || {}; + this.silentRefreshSubject = claims['sub']; - if (this.useIdTokenHintForSilentRefresh && this.hasValidIdToken()) { - params['id_token_hint'] = this.getIdToken(); - } + const iframe = document.createElement('iframe'); + iframe.id = this.silentRefreshIFrameName; - if (!this.validateUrlForHttps(this.loginUrl)) { - throw new Error('loginUrl must use HTTPS (with TLS), or config value for property \'requireHttps\' must be set to \'false\' and allow HTTP (without TLS).'); - } + this.setupSilentRefreshEventListener(); - if (typeof document === 'undefined') { - throw new Error('silent refresh is not supported on this platform'); - } + const redirectUri = this.silentRefreshRedirectUri || this.redirectUri; + this.createLoginUrl(null, null, redirectUri, noPrompt, params).then(url => { + iframe.setAttribute('src', url); - const existingIframe = document.getElementById( - this.silentRefreshIFrameName + if (!this.silentRefreshShowIFrame) { + iframe.style['display'] = 'none'; + } + document.body.appendChild(iframe); + }); + + const errors = this.events.pipe( + filter(e => e instanceof OAuthErrorEvent), + first() + ); + const success = this.events.pipe( + filter(e => e.type === 'token_received'), + first() + ); + const timeout = of( + new OAuthErrorEvent('silent_refresh_timeout', null) + ).pipe(delay(this.silentRefreshTimeout)); + + return race([errors, success, timeout]) + .pipe( + map(e => { + if (e instanceof OAuthErrorEvent) { + if (e.type === 'silent_refresh_timeout') { + this.eventsSubject.next(e); + } else { + e = new OAuthErrorEvent('silent_refresh_error', e); + this.eventsSubject.next(e); + } + throw e; + } else if (e.type === 'token_received') { + e = new OAuthSuccessEvent('silently_refreshed'); + this.eventsSubject.next(e); + } + return e; + }) + ) + .toPromise(); + } + + /** + * This method exists for backwards compatibility. + * {@link OAuthService#initLoginFlowInPopup} handles both code + * and implicit flows. + */ + public initImplicitFlowInPopup(options?: { + height?: number; + width?: number; + }) { + return this.initLoginFlowInPopup(options); + } + + public initLoginFlowInPopup(options?: { height?: number; width?: number }) { + options = options || {}; + return this.createLoginUrl( + null, + null, + this.silentRefreshRedirectUri, + false, + { + display: 'popup' + } + ).then(url => { + return new Promise((resolve, reject) => { + /** + * Error handling section + */ + const checkForPopupClosedInterval = 500; + let windowRef = window.open( + url, + '_blank', + this.calculatePopupFeatures(options) ); - - if (existingIframe) { - document.body.removeChild(existingIframe); + let checkForPopupClosedTimer: any; + const checkForPopupClosed = () => { + if (!windowRef || windowRef.closed) { + cleanup(); + reject(new OAuthErrorEvent('popup_closed', {})); + } + }; + if (!windowRef) { + reject(new OAuthErrorEvent('popup_blocked', {})); + } else { + checkForPopupClosedTimer = window.setInterval( + checkForPopupClosed, + checkForPopupClosedInterval + ); } - this.silentRefreshSubject = claims['sub']; - - const iframe = document.createElement('iframe'); - iframe.id = this.silentRefreshIFrameName; - - this.setupSilentRefreshEventListener(); + const cleanup = () => { + window.clearInterval(checkForPopupClosedTimer); + window.removeEventListener('message', listener); + if (windowRef !== null) { + windowRef.close(); + } + windowRef = null; + }; - const redirectUri = this.silentRefreshRedirectUri || this.redirectUri; - this.createLoginUrl(null, null, redirectUri, noPrompt, params).then(url => { - iframe.setAttribute('src', url); + const listener = (e: MessageEvent) => { + const message = this.processMessageEventMessage(e); - if (!this.silentRefreshShowIFrame) { - iframe.style['display'] = 'none'; - } - document.body.appendChild(iframe); - }); + if (message && message !== null) { + this.tryLogin({ + customHashFragment: message, + preventClearHashAfterLogin: true, + customRedirectUri: this.silentRefreshRedirectUri + }).then( + () => { + cleanup(); + resolve(); + }, + err => { + cleanup(); + reject(err); + } + ); + } else { + console.log('false event firing'); + } + }; - const errors = this.events.pipe( - filter(e => e instanceof OAuthErrorEvent), - first() - ); - const success = this.events.pipe( - filter(e => e.type === 'token_received'), - first() - ); - const timeout = of( - new OAuthErrorEvent('silent_refresh_timeout', null) - ).pipe(delay(this.silentRefreshTimeout)); - - return race([errors, success, timeout]) - .pipe( - map(e => { - if (e instanceof OAuthErrorEvent) { - if (e.type === 'silent_refresh_timeout') { - this.eventsSubject.next(e); - } else { - e = new OAuthErrorEvent('silent_refresh_error', e); - this.eventsSubject.next(e); - } - throw e; - } else if (e.type === 'token_received') { - e = new OAuthSuccessEvent('silently_refreshed'); - this.eventsSubject.next(e); - } - return e; - }) - ) - .toPromise(); + window.addEventListener('message', listener); + }); + }); + } + + protected calculatePopupFeatures(options: { + height?: number; + width?: number; + }): string { + // Specify an static height and width and calculate centered position + + const height = options.height || 470; + const width = options.width || 500; + const left = window.screenLeft + (window.outerWidth - width) / 2; + const top = window.screenTop + (window.outerHeight - height) / 2; + return `location=no,toolbar=no,width=${width},height=${height},top=${top},left=${left}`; + } + + protected processMessageEventMessage(e: MessageEvent): string { + let expectedPrefix = '#'; + + if (this.silentRefreshMessagePrefix) { + expectedPrefix += this.silentRefreshMessagePrefix; } - /** - * This method exists for backwards compatibility. - * {@link OAuthService#initLoginFlowInPopup} handles both code - * and implicit flows. - */ - public initImplicitFlowInPopup(options?: { height?: number, width?: number }) { - return this.initLoginFlowInPopup(options); - } - - public initLoginFlowInPopup(options?: { height?: number, width?: number }) { - options = options || {}; - return this.createLoginUrl(null, null, this.silentRefreshRedirectUri, false, { - display: 'popup' - }).then(url => { - return new Promise((resolve, reject) => { - /** - * Error handling section - */ - const checkForPopupClosedInterval = 500; - let windowRef = window.open(url, '_blank', this.calculatePopupFeatures(options)); - let checkForPopupClosedTimer: any; - const checkForPopupClosed = () => { - if (!windowRef || windowRef.closed) { - cleanup(); - reject(new OAuthErrorEvent('popup_closed', {})); - } - }; - if (!windowRef) { - reject(new OAuthErrorEvent('popup_blocked', {})); - } else { - checkForPopupClosedTimer = window.setInterval(checkForPopupClosed, checkForPopupClosedInterval); - } - - const cleanup = () => { - window.clearInterval(checkForPopupClosedTimer); - window.removeEventListener('message', listener); - if (windowRef !== null) { - windowRef.close(); - } - windowRef = null; - }; - - const listener = (e: MessageEvent) => { - const message = this.processMessageEventMessage(e); - - if (message && message !== null) { - this.tryLogin({ - customHashFragment: message, - preventClearHashAfterLogin: true, - customRedirectUri: this.silentRefreshRedirectUri, - }).then(() => { - cleanup(); - resolve(); - }, err => { - cleanup(); - reject(err); - }); - } else { - console.log('false event firing'); - } - - }; - - window.addEventListener('message', listener); - }); - }); + if (!e || !e.data || typeof e.data !== 'string') { + return; } - protected calculatePopupFeatures(options: { height?: number, width?: number }): string { - // Specify an static height and width and calculate centered position + const prefixedMessage: string = e.data; - const height = options.height || 470; - const width = options.width || 500; - const left = window.screenLeft + ((window.outerWidth - width) / 2); - const top = window.screenTop + ((window.outerHeight - height) / 2); - return `location=no,toolbar=no,width=${width},height=${height},top=${top},left=${left}`; + if (!prefixedMessage.startsWith(expectedPrefix)) { + return; } - protected processMessageEventMessage(e: MessageEvent): string { - let expectedPrefix = '#'; + return '#' + prefixedMessage.substr(expectedPrefix.length); + } - if (this.silentRefreshMessagePrefix) { - expectedPrefix += this.silentRefreshMessagePrefix; - } - - if (!e || !e.data || typeof e.data !== 'string') { - return; - } - - const prefixedMessage: string = e.data; - - if (!prefixedMessage.startsWith(expectedPrefix)) { - return; - } - - return '#' + prefixedMessage.substr(expectedPrefix.length); + protected canPerformSessionCheck(): boolean { + if (!this.sessionChecksEnabled) { + return false; } - - protected canPerformSessionCheck(): boolean { - if (!this.sessionChecksEnabled) { - return false; - } - if (!this.sessionCheckIFrameUrl) { - console.warn( - 'sessionChecksEnabled is activated but there is no sessionCheckIFrameUrl' - ); - return false; - } - const sessionState = this.getSessionState(); - if (!sessionState) { - console.warn( - 'sessionChecksEnabled is activated but there is no session_state' - ); - return false; - } - if (typeof document === 'undefined') { - return false; - } - - return true; + if (!this.sessionCheckIFrameUrl) { + console.warn( + 'sessionChecksEnabled is activated but there is no sessionCheckIFrameUrl' + ); + return false; + } + const sessionState = this.getSessionState(); + if (!sessionState) { + console.warn( + 'sessionChecksEnabled is activated but there is no session_state' + ); + return false; + } + if (typeof document === 'undefined') { + return false; } - protected setupSessionCheckEventListener(): void { - this.removeSessionCheckEventListener(); + return true; + } - this.sessionCheckEventListener = (e: MessageEvent) => { - const origin = e.origin.toLowerCase(); - const issuer = this.issuer.toLowerCase(); + protected setupSessionCheckEventListener(): void { + this.removeSessionCheckEventListener(); - this.debug('sessionCheckEventListener'); + this.sessionCheckEventListener = (e: MessageEvent) => { + const origin = e.origin.toLowerCase(); + const issuer = this.issuer.toLowerCase(); - if (!issuer.startsWith(origin)) { - this.debug( - 'sessionCheckEventListener', - 'wrong origin', - origin, - 'expected', - issuer - ); + this.debug('sessionCheckEventListener'); - return; - } + if (!issuer.startsWith(origin)) { + this.debug( + 'sessionCheckEventListener', + 'wrong origin', + origin, + 'expected', + issuer, + 'event', + e + ); - // only run in Angular zone if it is 'changed' or 'error' - switch (e.data) { - case 'unchanged': - this.handleSessionUnchanged(); - break; - case 'changed': - this.ngZone.run(() => { - this.handleSessionChange(); - }); - break; - case 'error': - this.ngZone.run(() => { - this.handleSessionError(); - }); - break; - } + return; + } - this.debug('got info from session check inframe', e); - }; + // only run in Angular zone if it is 'changed' or 'error' + switch (e.data) { + case 'unchanged': + this.handleSessionUnchanged(); + break; + case 'changed': + this.ngZone.run(() => { + this.handleSessionChange(); + }); + break; + case 'error': + this.ngZone.run(() => { + this.handleSessionError(); + }); + break; + } - // prevent Angular from refreshing the view on every message (runs in intervals) - this.ngZone.runOutsideAngular(() => { - window.addEventListener('message', this.sessionCheckEventListener); + this.debug('got info from session check inframe', e); + }; + + // prevent Angular from refreshing the view on every message (runs in intervals) + this.ngZone.runOutsideAngular(() => { + window.addEventListener('message', this.sessionCheckEventListener); + }); + } + + protected handleSessionUnchanged(): void { + this.debug('session check', 'session unchanged'); + } + + protected handleSessionChange(): void { + this.eventsSubject.next(new OAuthInfoEvent('session_changed')); + this.stopSessionCheckTimer(); + + if (!this.useSilentRefresh && this.responseType === 'code') { + this.refreshToken() + .then(_ => { + this.debug('token refresh after session change worked'); + }) + .catch(_ => { + this.debug('token refresh did not work after session changed'); + this.eventsSubject.next(new OAuthInfoEvent('session_terminated')); + this.logOut(true); }); + } else if (this.silentRefreshRedirectUri) { + this.silentRefresh().catch(_ => + this.debug('silent refresh failed after session changed') + ); + this.waitForSilentRefreshAfterSessionChange(); + } else { + this.eventsSubject.next(new OAuthInfoEvent('session_terminated')); + this.logOut(true); } + } + + protected waitForSilentRefreshAfterSessionChange(): void { + this.events + .pipe( + filter( + (e: OAuthEvent) => + e.type === 'silently_refreshed' || + e.type === 'silent_refresh_timeout' || + e.type === 'silent_refresh_error' + ), + first() + ) + .subscribe(e => { + if (e.type !== 'silently_refreshed') { + this.debug('silent refresh did not work after session changed'); + this.eventsSubject.next(new OAuthInfoEvent('session_terminated')); + this.logOut(true); + } + }); + } - protected handleSessionUnchanged(): void { - this.debug('session check', 'session unchanged'); - } + protected handleSessionError(): void { + this.stopSessionCheckTimer(); + this.eventsSubject.next(new OAuthInfoEvent('session_error')); + } - protected handleSessionChange(): void { - /* events: session_changed, relogin, stopTimer, logged_out*/ - this.eventsSubject.next(new OAuthInfoEvent('session_changed')); - this.stopSessionCheckTimer(); - if (this.silentRefreshRedirectUri) { - this.silentRefresh().catch(_ => - this.debug('silent refresh failed after session changed') - ); - this.waitForSilentRefreshAfterSessionChange(); - } else { - this.eventsSubject.next(new OAuthInfoEvent('session_terminated')); - this.logOut(true); - } + protected removeSessionCheckEventListener(): void { + if (this.sessionCheckEventListener) { + window.removeEventListener('message', this.sessionCheckEventListener); + this.sessionCheckEventListener = null; } + } - protected waitForSilentRefreshAfterSessionChange(): void { - this.events - .pipe( - filter( - (e: OAuthEvent) => - e.type === 'silently_refreshed' || - e.type === 'silent_refresh_timeout' || - e.type === 'silent_refresh_error' - ), - first() - ) - .subscribe(e => { - if (e.type !== 'silently_refreshed') { - this.debug('silent refresh did not work after session changed'); - this.eventsSubject.next(new OAuthInfoEvent('session_terminated')); - this.logOut(true); - } - }); + protected initSessionCheck(): void { + if (!this.canPerformSessionCheck()) { + return; } - protected handleSessionError(): void { - this.stopSessionCheckTimer(); - this.eventsSubject.next(new OAuthInfoEvent('session_error')); + const existingIframe = document.getElementById(this.sessionCheckIFrameName); + if (existingIframe) { + document.body.removeChild(existingIframe); } - protected removeSessionCheckEventListener(): void { - if (this.sessionCheckEventListener) { - window.removeEventListener('message', this.sessionCheckEventListener); - this.sessionCheckEventListener = null; - } + const iframe = document.createElement('iframe'); + iframe.id = this.sessionCheckIFrameName; + + this.setupSessionCheckEventListener(); + + const url = this.sessionCheckIFrameUrl; + iframe.setAttribute('src', url); + iframe.style.display = 'none'; + document.body.appendChild(iframe); + + this.startSessionCheckTimer(); + } + + protected startSessionCheckTimer(): void { + this.stopSessionCheckTimer(); + this.ngZone.runOutsideAngular(() => { + this.sessionCheckTimer = setInterval( + this.checkSession.bind(this), + this.sessionCheckIntervall + ); + }); + } + + protected stopSessionCheckTimer(): void { + if (this.sessionCheckTimer) { + clearInterval(this.sessionCheckTimer); + this.sessionCheckTimer = null; } + } - protected initSessionCheck(): void { - if (!this.canPerformSessionCheck()) { - return; - } - - const existingIframe = document.getElementById(this.sessionCheckIFrameName); - if (existingIframe) { - document.body.removeChild(existingIframe); - } + public checkSession(): void { + const iframe: any = document.getElementById(this.sessionCheckIFrameName); - const iframe = document.createElement('iframe'); - iframe.id = this.sessionCheckIFrameName; - - this.setupSessionCheckEventListener(); - - const url = this.sessionCheckIFrameUrl; - iframe.setAttribute('src', url); - iframe.style.display = 'none'; - document.body.appendChild(iframe); - - this.startSessionCheckTimer(); + if (!iframe) { + this.logger.warn( + 'checkSession did not find iframe', + this.sessionCheckIFrameName + ); } - protected startSessionCheckTimer(): void { - this.stopSessionCheckTimer(); - this.ngZone.runOutsideAngular(() => { - this.sessionCheckTimer = setInterval( - this.checkSession.bind(this), - this.sessionCheckIntervall - ); - }); - } + const sessionState = this.getSessionState(); - protected stopSessionCheckTimer(): void { - if (this.sessionCheckTimer) { - clearInterval(this.sessionCheckTimer); - this.sessionCheckTimer = null; - } + if (!sessionState) { + this.stopSessionCheckTimer(); } - protected checkSession(): void { - const iframe: any = document.getElementById(this.sessionCheckIFrameName); - - if (!iframe) { - this.logger.warn( - 'checkSession did not find iframe', - this.sessionCheckIFrameName - ); - } - - const sessionState = this.getSessionState(); - - if (!sessionState) { - this.stopSessionCheckTimer(); - } - - const message = this.clientId + ' ' + sessionState; - iframe.contentWindow.postMessage(message, this.issuer); + const message = this.clientId + ' ' + sessionState; + iframe.contentWindow.postMessage(message, this.issuer); + } + + protected async createLoginUrl( + state = '', + loginHint = '', + customRedirectUri = '', + noPrompt = false, + params: object = {} + ): Promise<string> { + const that = this; + + let redirectUri: string; + + if (customRedirectUri) { + redirectUri = customRedirectUri; + } else { + redirectUri = this.redirectUri; } - protected async createLoginUrl( - state = '', - loginHint = '', - customRedirectUri = '', - noPrompt = false, - params: object = {} - ): Promise<string> { - const that = this; - - let redirectUri: string; - - if (customRedirectUri) { - redirectUri = customRedirectUri; - } else { - redirectUri = this.redirectUri; - } - - const nonce = await this.createAndSaveNonce(); + const nonce = await this.createAndSaveNonce(); - if (state) { - state = nonce + this.config.nonceStateSeparator + state; - } else { - state = nonce; - } - - if (!this.requestAccessToken && !this.oidc) { - throw new Error( - 'Either requestAccessToken or oidc or both must be true' - ); - } - - if (this.config.responseType) { - this.responseType = this.config.responseType; - } else { - if (this.oidc && this.requestAccessToken) { - this.responseType = 'id_token token'; - } else if (this.oidc && !this.requestAccessToken) { - this.responseType = 'id_token'; - } else { - this.responseType = 'token'; - } - } - - const seperationChar = that.loginUrl.indexOf('?') > -1 ? '&' : '?'; + if (state) { + state = + nonce + this.config.nonceStateSeparator + encodeURIComponent(state); + } else { + state = nonce; + } - let scope = that.scope; + if (!this.requestAccessToken && !this.oidc) { + throw new Error('Either requestAccessToken or oidc or both must be true'); + } - if (this.oidc && !scope.match(/(^|\s)openid($|\s)/)) { - scope = 'openid ' + scope; - } + if (this.config.responseType) { + this.responseType = this.config.responseType; + } else { + if (this.oidc && this.requestAccessToken) { + this.responseType = 'id_token token'; + } else if (this.oidc && !this.requestAccessToken) { + this.responseType = 'id_token'; + } else { + this.responseType = 'token'; + } + } - let url = - that.loginUrl + - seperationChar + - 'response_type=' + - encodeURIComponent(that.responseType) + - '&client_id=' + - encodeURIComponent(that.clientId) + - '&state=' + - encodeURIComponent(state) + - '&redirect_uri=' + - encodeURIComponent(redirectUri) + - '&scope=' + - encodeURIComponent(scope); - - if (this.responseType === 'code' && !this.disablePKCE) { - const [challenge, verifier] = await this.createChallangeVerifierPairForPKCE(); - this._storage.setItem('PKCI_verifier', verifier); - url += '&code_challenge=' + challenge; - url += '&code_challenge_method=S256'; - } + const seperationChar = that.loginUrl.indexOf('?') > -1 ? '&' : '?'; - if (loginHint) { - url += '&login_hint=' + encodeURIComponent(loginHint); - } + let scope = that.scope; - if (that.resource) { - url += '&resource=' + encodeURIComponent(that.resource); - } + if (this.oidc && !scope.match(/(^|\s)openid($|\s)/)) { + scope = 'openid ' + scope; + } - if (that.oidc) { - url += '&nonce=' + encodeURIComponent(nonce); - } + let url = + that.loginUrl + + seperationChar + + 'response_type=' + + encodeURIComponent(that.responseType) + + '&client_id=' + + encodeURIComponent(that.clientId) + + '&state=' + + encodeURIComponent(state) + + '&redirect_uri=' + + encodeURIComponent(redirectUri) + + '&scope=' + + encodeURIComponent(scope); + + if (this.responseType === 'code' && !this.disablePKCE) { + const [ + challenge, + verifier + ] = await this.createChallangeVerifierPairForPKCE(); + + if ( + this.saveNoncesInLocalStorage && + typeof window['localStorage'] !== 'undefined' + ) { + localStorage.setItem('PKCI_verifier', verifier); + } else { + this._storage.setItem('PKCI_verifier', verifier); + } - if (noPrompt) { - url += '&prompt=none'; - } + url += '&code_challenge=' + challenge; + url += '&code_challenge_method=S256'; + } - for (const key of Object.keys(params)) { - url += - '&' + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]); - } + if (loginHint) { + url += '&login_hint=' + encodeURIComponent(loginHint); + } - if (this.customQueryParams) { - for (const key of Object.getOwnPropertyNames(this.customQueryParams)) { - url += - '&' + key + '=' + encodeURIComponent(this.customQueryParams[key]); - } - } + if (that.resource) { + url += '&resource=' + encodeURIComponent(that.resource); + } - return url; + if (that.oidc) { + url += '&nonce=' + encodeURIComponent(nonce); + } + if (noPrompt) { + url += '&prompt=none'; } - initImplicitFlowInternal( - additionalState = '', - params: string | object = '' - ): void { - if (this.inImplicitFlow) { - return; - } + for (const key of Object.keys(params)) { + url += + '&' + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]); + } - this.inImplicitFlow = true; + if (this.customQueryParams) { + for (const key of Object.getOwnPropertyNames(this.customQueryParams)) { + url += + '&' + key + '=' + encodeURIComponent(this.customQueryParams[key]); + } + } - if (!this.validateUrlForHttps(this.loginUrl)) { - throw new Error( - 'loginUrl must use HTTPS (with TLS), or config value for property \'requireHttps\' must be set to \'false\' and allow HTTP (without TLS).' - ); - } + return url; + } - let addParams: object = {}; - let loginHint: string = null; + initImplicitFlowInternal( + additionalState = '', + params: string | object = '' + ): void { + if (this.inImplicitFlow) { + return; + } - if (typeof params === 'string') { - loginHint = params; - } else if (typeof params === 'object') { - addParams = params; - } + this.inImplicitFlow = true; - this.createLoginUrl(additionalState, loginHint, null, false, addParams) - .then(this.config.openUri) - .catch(error => { - console.error('Error in initImplicitFlow', error); - this.inImplicitFlow = false; - }); + if (!this.validateUrlForHttps(this.loginUrl)) { + throw new Error( + "loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS)." + ); } - /** - * Starts the implicit flow and redirects to user to - * the auth servers' login url. - * - * @param additionalState Optional state that is passed around. - * You'll find this state in the property `state` after `tryLogin` logged in the user. - * @param params Hash with additional parameter. If it is a string, it is used for the - * parameter loginHint (for the sake of compatibility with former versions) - */ - public initImplicitFlow( - additionalState = '', - params: string | object = '' - ): void { - if (this.loginUrl !== '') { - this.initImplicitFlowInternal(additionalState, params); - } else { - this.events - .pipe(filter(e => e.type === 'discovery_document_loaded')) - .subscribe(_ => this.initImplicitFlowInternal(additionalState, params)); - } + let addParams: object = {}; + let loginHint: string = null; + + if (typeof params === 'string') { + loginHint = params; + } else if (typeof params === 'object') { + addParams = params; } - /** - * Reset current implicit flow - * - * @description This method allows resetting the current implict flow in order to be initialized again. - */ - public resetImplicitFlow(): void { + this.createLoginUrl(additionalState, loginHint, null, false, addParams) + .then(this.config.openUri) + .catch(error => { + console.error('Error in initImplicitFlow', error); this.inImplicitFlow = false; + }); + } + + /** + * Starts the implicit flow and redirects to user to + * the auth servers' login url. + * + * @param additionalState Optional state that is passed around. + * You'll find this state in the property `state` after `tryLogin` logged in the user. + * @param params Hash with additional parameter. If it is a string, it is used for the + * parameter loginHint (for the sake of compatibility with former versions) + */ + public initImplicitFlow( + additionalState = '', + params: string | object = '' + ): void { + if (this.loginUrl !== '') { + this.initImplicitFlowInternal(additionalState, params); + } else { + this.events + .pipe(filter(e => e.type === 'discovery_document_loaded')) + .subscribe(_ => this.initImplicitFlowInternal(additionalState, params)); } - - protected callOnTokenReceivedIfExists(options: LoginOptions): void { - const that = this; - if (options.onTokenReceived) { - const tokenParams = { - idClaims: that.getIdentityClaims(), - idToken: that.getIdToken(), - accessToken: that.getAccessToken(), - state: that.state - }; - options.onTokenReceived(tokenParams); - } + } + + /** + * Reset current implicit flow + * + * @description This method allows resetting the current implict flow in order to be initialized again. + */ + public resetImplicitFlow(): void { + this.inImplicitFlow = false; + } + + protected callOnTokenReceivedIfExists(options: LoginOptions): void { + const that = this; + if (options.onTokenReceived) { + const tokenParams = { + idClaims: that.getIdentityClaims(), + idToken: that.getIdToken(), + accessToken: that.getAccessToken(), + state: that.state + }; + options.onTokenReceived(tokenParams); } - - protected storeAccessTokenResponse( - accessToken: string, - refreshToken: string, - expiresIn: number, - grantedScopes: String, - customParameters?: Map<string, string> - ): void { - this._storage.setItem('access_token', accessToken); - if (grantedScopes) { - this._storage.setItem('granted_scopes', JSON.stringify(grantedScopes.split('+'))); - } - this._storage.setItem('access_token_stored_at', '' + Date.now()); - if (expiresIn) { - const expiresInMilliSeconds = expiresIn * 1000; - const now = new Date(); - const expiresAt = now.getTime() + expiresInMilliSeconds; - this._storage.setItem('expires_at', '' + expiresAt); - } - - if (refreshToken) { - this._storage.setItem('refresh_token', refreshToken); - } - if (customParameters) { - customParameters.forEach((value : string, key: string) => { - this._storage.setItem(key, value); - }); - } + } + + protected storeAccessTokenResponse( + accessToken: string, + refreshToken: string, + expiresIn: number, + grantedScopes: String, + customParameters?: Map<string, string> + ): void { + this._storage.setItem('access_token', accessToken); + if (grantedScopes && !Array.isArray(grantedScopes)) { + this._storage.setItem( + 'granted_scopes', + JSON.stringify(grantedScopes.split('+')) + ); + } else if (grantedScopes && Array.isArray(grantedScopes)) { + this._storage.setItem('granted_scopes', JSON.stringify(grantedScopes)); } - /** - * Delegates to tryLoginImplicitFlow for the sake of competability - * @param options Optional options. - */ - public tryLogin(options: LoginOptions = null): Promise<boolean> { - if (this.config.responseType === 'code') { - return this.tryLoginCodeFlow(options).then(_ => true); - } - else { - return this.tryLoginImplicitFlow(options); - } + this._storage.setItem('access_token_stored_at', '' + Date.now()); + if (expiresIn) { + const expiresInMilliSeconds = expiresIn * 1000; + const now = new Date(); + const expiresAt = now.getTime() + expiresInMilliSeconds; + this._storage.setItem('expires_at', '' + expiresAt); } - - - private parseQueryString(queryString: string): object { - if (!queryString || queryString.length === 0) { - return {}; - } - - if (queryString.charAt(0) === '?') { - queryString = queryString.substr(1); - } - - return this.urlHelper.parseQueryString(queryString); - - + if (refreshToken) { + this._storage.setItem('refresh_token', refreshToken); } + if (customParameters) { + customParameters.forEach((value: string, key: string) => { + this._storage.setItem(key, value); + }); + } + } + + /** + * Delegates to tryLoginImplicitFlow for the sake of competability + * @param options Optional options. + */ + public tryLogin(options: LoginOptions = null): Promise<boolean> { + if (this.config.responseType === 'code') { + return this.tryLoginCodeFlow(options).then(_ => true); + } else { + return this.tryLoginImplicitFlow(options); + } + } - public tryLoginCodeFlow(options: LoginOptions = null): Promise<void> { - options = options || {}; - - const querySource = options.customHashFragment ? - options.customHashFragment.substring(1) : - window.location.search; + private parseQueryString(queryString: string): object { + if (!queryString || queryString.length === 0) { + return {}; + } - const parts = this.getCodePartsFromUrl(querySource); + if (queryString.charAt(0) === '?') { + queryString = queryString.substr(1); + } - const code = parts['code']; - const state = parts['state']; + return this.urlHelper.parseQueryString(queryString); + } - if (!options.preventClearHashAfterLogin) { - const href = location.href - .replace(/[&\?]code=[^&\$]*/, '') - .replace(/[&\?]scope=[^&\$]*/, '') - .replace(/[&\?]state=[^&\$]*/, '') - .replace(/[&\?]session_state=[^&\$]*/, ''); + public tryLoginCodeFlow(options: LoginOptions = null): Promise<void> { + options = options || {}; - history.replaceState(null, window.name, href); - } + const querySource = options.customHashFragment + ? options.customHashFragment.substring(1) + : window.location.search; - let [nonceInState, userState] = this.parseState(state); - this.state = userState; + const parts = this.getCodePartsFromUrl(querySource); - if (parts['error']) { - this.debug('error trying to login'); - this.handleLoginError({}, parts); - const err = new OAuthErrorEvent('code_error', {}, parts); - this.eventsSubject.next(err); - return Promise.reject(err); - } + const code = parts['code']; + const state = parts['state']; - if (!nonceInState) { - return Promise.resolve(); - } + const sessionState = parts['session_state']; - const success = this.validateNonce(nonceInState); - if (!success) { - const event = new OAuthErrorEvent('invalid_nonce_in_state', null); - this.eventsSubject.next(event); - return Promise.reject(event); - } + if (!options.preventClearHashAfterLogin) { + const href = location.href + .replace(/[&\?]code=[^&\$]*/, '') + .replace(/[&\?]scope=[^&\$]*/, '') + .replace(/[&\?]state=[^&\$]*/, '') + .replace(/[&\?]session_state=[^&\$]*/, ''); - if (code) { - return new Promise((resolve, reject) => { - this.getTokenFromCode(code, options).then(result => { - resolve(); - }).catch(err => { - reject(err); - }); - }); - } else { - return Promise.resolve(); - } + history.replaceState(null, window.name, href); } - /** - * Retrieve the returned auth code from the redirect uri that has been called. - * If required also check hash, as we could use hash location strategy. - */ - private getCodePartsFromUrl(queryString: string): object { - if (!queryString || queryString.length === 0) { - return this.urlHelper.getHashFragmentParams(); - } - - // normalize query string - if (queryString.charAt(0) === '?') { - queryString = queryString.substr(1); - } + let [nonceInState, userState] = this.parseState(state); + this.state = userState; - return this.urlHelper.parseQueryString(queryString); + if (parts['error']) { + this.debug('error trying to login'); + this.handleLoginError({}, parts); + const err = new OAuthErrorEvent('code_error', {}, parts); + this.eventsSubject.next(err); + return Promise.reject(err); } - /** - * Get token using an intermediate code. Works for the Authorization Code flow. - */ - private getTokenFromCode(code: string, options: LoginOptions): Promise<object> { - let params = new HttpParams() - .set('grant_type', 'authorization_code') - .set('code', code) - .set('redirect_uri', options.customRedirectUri || this.redirectUri); - - if (!this.disablePKCE) { - const pkciVerifier = this._storage.getItem('PKCI_verifier'); - - if (!pkciVerifier) { - console.warn('No PKCI verifier found in oauth storage!'); - } else { - params = params.set('code_verifier', pkciVerifier); - } - } - - return this.fetchAndProcessToken(params); + if (!nonceInState) { + return Promise.resolve(); } - private fetchAndProcessToken(params: HttpParams): Promise<TokenResponse> { - - this.assertUrlNotNullAndCorrectProtocol(this.tokenEndpoint, 'tokenEndpoint'); - let headers = new HttpHeaders() - .set('Content-Type', 'application/x-www-form-urlencoded'); - - if (this.useHttpBasicAuth) { - const header = btoa(`${this.clientId}:${this.dummyClientSecret}`); - headers = headers.set( - 'Authorization', - 'Basic ' + header); - } - - if (!this.useHttpBasicAuth) { - params = params.set('client_id', this.clientId); - } - - if (!this.useHttpBasicAuth && this.dummyClientSecret) { - params = params.set('client_secret', this.dummyClientSecret); - } - - return new Promise((resolve, reject) => { + const success = this.validateNonce(nonceInState); + if (!success) { + const event = new OAuthErrorEvent('invalid_nonce_in_state', null); + this.eventsSubject.next(event); + return Promise.reject(event); + } - if (this.customQueryParams) { - for (let key of Object.getOwnPropertyNames(this.customQueryParams)) { - params = params.set(key, this.customQueryParams[key]); - } - } + this.storeSessionState(sessionState); - this.http.post<TokenResponse>(this.tokenEndpoint, params, { headers }).subscribe( - (tokenResponse) => { - this.debug('refresh tokenResponse', tokenResponse); - this.storeAccessTokenResponse( - tokenResponse.access_token, - tokenResponse.refresh_token, - tokenResponse.expires_in, - tokenResponse.scope, - this.extractRecognizedCustomParameters(tokenResponse)); - - if (this.oidc && tokenResponse.id_token) { - this.processIdToken(tokenResponse.id_token, tokenResponse.access_token). - then(result => { - this.storeIdToken(result); - - this.eventsSubject.next(new OAuthSuccessEvent('token_received')); - this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed')); - - resolve(tokenResponse); - }) - .catch(reason => { - this.eventsSubject.next(new OAuthErrorEvent('token_validation_error', reason)); - console.error('Error validating tokens'); - console.error(reason); - - reject(reason); - }); - } else { - this.eventsSubject.next(new OAuthSuccessEvent('token_received')); - this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed')); - - resolve(tokenResponse); - } - }, - (err) => { - console.error('Error getting token', err); - this.eventsSubject.next(new OAuthErrorEvent('token_refresh_error', err)); - reject(err); - } - ); - }); + if (code) { + return this.getTokenFromCode(code, options).then(_ => null); + } else { + return Promise.resolve(); + } + } + + /** + * Retrieve the returned auth code from the redirect uri that has been called. + * If required also check hash, as we could use hash location strategy. + */ + private getCodePartsFromUrl(queryString: string): object { + if (!queryString || queryString.length === 0) { + return this.urlHelper.getHashFragmentParams(); } - /** - * Checks whether there are tokens in the hash fragment - * as a result of the implicit flow. These tokens are - * parsed, validated and used to sign the user in to the - * current client. - * - * @param options Optional options. - */ - public tryLoginImplicitFlow(options: LoginOptions = null): Promise<boolean> { - options = options || {}; + // normalize query string + if (queryString.charAt(0) === '?') { + queryString = queryString.substr(1); + } - let parts: object; + return this.urlHelper.parseQueryString(queryString); + } + + /** + * Get token using an intermediate code. Works for the Authorization Code flow. + */ + private getTokenFromCode( + code: string, + options: LoginOptions + ): Promise<object> { + let params = new HttpParams() + .set('grant_type', 'authorization_code') + .set('code', code) + .set('redirect_uri', options.customRedirectUri || this.redirectUri); + + if (!this.disablePKCE) { + let pkciVerifier; + + if ( + this.saveNoncesInLocalStorage && + typeof window['localStorage'] !== 'undefined' + ) { + pkciVerifier = localStorage.getItem('PKCI_verifier'); + } else { + pkciVerifier = this._storage.getItem('PKCI_verifier'); + } - if (options.customHashFragment) { - parts = this.urlHelper.getHashFragmentParams(options.customHashFragment); - } else { - parts = this.urlHelper.getHashFragmentParams(); - } + if (!pkciVerifier) { + console.warn('No PKCI verifier found in oauth storage!'); + } else { + params = params.set('code_verifier', pkciVerifier); + } + } - this.debug('parsed url', parts); + return this.fetchAndProcessToken(params); + } + + private fetchAndProcessToken(params: HttpParams): Promise<TokenResponse> { + this.assertUrlNotNullAndCorrectProtocol( + this.tokenEndpoint, + 'tokenEndpoint' + ); + let headers = new HttpHeaders().set( + 'Content-Type', + 'application/x-www-form-urlencoded' + ); + + if (this.useHttpBasicAuth) { + const header = btoa(`${this.clientId}:${this.dummyClientSecret}`); + headers = headers.set('Authorization', 'Basic ' + header); + } - const state = parts['state']; + if (!this.useHttpBasicAuth) { + params = params.set('client_id', this.clientId); + } - let [nonceInState, userState] = this.parseState(state); - this.state = userState; + if (!this.useHttpBasicAuth && this.dummyClientSecret) { + params = params.set('client_secret', this.dummyClientSecret); + } - if (parts['error']) { - this.debug('error trying to login'); - this.handleLoginError(options, parts); - const err = new OAuthErrorEvent('token_error', {}, parts); - this.eventsSubject.next(err); - return Promise.reject(err); + return new Promise((resolve, reject) => { + if (this.customQueryParams) { + for (let key of Object.getOwnPropertyNames(this.customQueryParams)) { + params = params.set(key, this.customQueryParams[key]); } + } - const accessToken = parts['access_token']; - const idToken = parts['id_token']; - const sessionState = parts['session_state']; - const grantedScopes = parts['scope']; - - if (!this.requestAccessToken && !this.oidc) { - return Promise.reject( - 'Either requestAccessToken or oidc (or both) must be true.' + this.http + .post<TokenResponse>(this.tokenEndpoint, params, { headers }) + .subscribe( + tokenResponse => { + this.debug('refresh tokenResponse', tokenResponse); + this.storeAccessTokenResponse( + tokenResponse.access_token, + tokenResponse.refresh_token, + tokenResponse.expires_in, + tokenResponse.scope, + this.extractRecognizedCustomParameters(tokenResponse) ); - } - if (this.requestAccessToken && !accessToken) { - return Promise.resolve(false); - } - if (this.requestAccessToken && !options.disableOAuth2StateCheck && !state) { - return Promise.resolve(false); - } - if (this.oidc && !idToken) { - return Promise.resolve(false); - } - - if (this.sessionChecksEnabled && !sessionState) { - this.logger.warn( - 'session checks (Session Status Change Notification) ' + - 'were activated in the configuration but the id_token ' + - 'does not contain a session_state claim' - ); - } + if (this.oidc && tokenResponse.id_token) { + this.processIdToken( + tokenResponse.id_token, + tokenResponse.access_token + ) + .then(result => { + this.storeIdToken(result); + + this.eventsSubject.next( + new OAuthSuccessEvent('token_received') + ); + this.eventsSubject.next( + new OAuthSuccessEvent('token_refreshed') + ); + + resolve(tokenResponse); + }) + .catch(reason => { + this.eventsSubject.next( + new OAuthErrorEvent('token_validation_error', reason) + ); + console.error('Error validating tokens'); + console.error(reason); - if (this.requestAccessToken && !options.disableOAuth2StateCheck) { - const success = this.validateNonce(nonceInState); + reject(reason); + }); + } else { + this.eventsSubject.next(new OAuthSuccessEvent('token_received')); + this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed')); - if (!success) { - const event = new OAuthErrorEvent('invalid_nonce_in_state', null); - this.eventsSubject.next(event); - return Promise.reject(event); + resolve(tokenResponse); } - } - - if (this.requestAccessToken) { - this.storeAccessTokenResponse( - accessToken, - null, - parts['expires_in'] || this.fallbackAccessTokenExpirationTimeInSec, - grantedScopes + }, + err => { + console.error('Error getting token', err); + this.eventsSubject.next( + new OAuthErrorEvent('token_refresh_error', err) ); - } - - if (!this.oidc) { - this.eventsSubject.next(new OAuthSuccessEvent('token_received')); - if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) { - location.hash = ''; - } - - this.callOnTokenReceivedIfExists(options); - return Promise.resolve(true); + reject(err); + } + ); + }); + } + + /** + * Checks whether there are tokens in the hash fragment + * as a result of the implicit flow. These tokens are + * parsed, validated and used to sign the user in to the + * current client. + * + * @param options Optional options. + */ + public tryLoginImplicitFlow(options: LoginOptions = null): Promise<boolean> { + options = options || {}; + + let parts: object; + + if (options.customHashFragment) { + parts = this.urlHelper.getHashFragmentParams(options.customHashFragment); + } else { + parts = this.urlHelper.getHashFragmentParams(); + } - } + this.debug('parsed url', parts); - return this.processIdToken(idToken, accessToken) - .then(result => { - if (options.validationHandler) { - return options - .validationHandler({ - accessToken: accessToken, - idClaims: result.idTokenClaims, - idToken: result.idToken, - state: state - }) - .then(_ => result); - } - return result; - }) - .then(result => { - this.storeIdToken(result); - this.storeSessionState(sessionState); - if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) { - location.hash = ''; - } - this.eventsSubject.next(new OAuthSuccessEvent('token_received')); - this.callOnTokenReceivedIfExists(options); - this.inImplicitFlow = false; - return true; - }) - .catch(reason => { - this.eventsSubject.next( - new OAuthErrorEvent('token_validation_error', reason) - ); - this.logger.error('Error validating tokens'); - this.logger.error(reason); - return Promise.reject(reason); - }); - } + const state = parts['state']; - private parseState(state: string): [string, string] { - let nonce = state; - let userState = ''; + let [nonceInState, userState] = this.parseState(state); + this.state = userState; - if (state) { - const idx = state.indexOf(this.config.nonceStateSeparator); - if (idx > -1) { - nonce = state.substr(0, idx); - userState = state.substr(idx + this.config.nonceStateSeparator.length); - } - } - return [nonce, userState]; + if (parts['error']) { + this.debug('error trying to login'); + this.handleLoginError(options, parts); + const err = new OAuthErrorEvent('token_error', {}, parts); + this.eventsSubject.next(err); + return Promise.reject(err); } - protected validateNonce( - nonceInState: string - ): boolean { - const savedNonce = this._storage.getItem('nonce'); - if (savedNonce !== nonceInState) { + const accessToken = parts['access_token']; + const idToken = parts['id_token']; + const sessionState = parts['session_state']; + const grantedScopes = parts['scope']; - const err = 'Validating access_token failed, wrong state/nonce.'; - console.error(err, savedNonce, nonceInState); - return false; - } - return true; + if (!this.requestAccessToken && !this.oidc) { + return Promise.reject( + 'Either requestAccessToken or oidc (or both) must be true.' + ); } - protected storeIdToken(idToken: ParsedIdToken): void { - this._storage.setItem('id_token', idToken.idToken); - this._storage.setItem('id_token_claims_obj', idToken.idTokenClaimsJson); - this._storage.setItem('id_token_expires_at', '' + idToken.idTokenExpiresAt); - this._storage.setItem('id_token_stored_at', '' + Date.now()); + if (this.requestAccessToken && !accessToken) { + return Promise.resolve(false); } - - protected storeSessionState(sessionState: string): void { - this._storage.setItem('session_state', sessionState); + if (this.requestAccessToken && !options.disableOAuth2StateCheck && !state) { + return Promise.resolve(false); } - - protected getSessionState(): string { - return this._storage.getItem('session_state'); + if (this.oidc && !idToken) { + return Promise.resolve(false); } - protected handleLoginError(options: LoginOptions, parts: object): void { - if (options.onLoginError) { - options.onLoginError(parts); - } - if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) { - location.hash = ''; - } + if (this.sessionChecksEnabled && !sessionState) { + this.logger.warn( + 'session checks (Session Status Change Notification) ' + + 'were activated in the configuration but the id_token ' + + 'does not contain a session_state claim' + ); } - /** - * @ignore - */ - public processIdToken( - idToken: string, - accessToken: string, - skipNonceCheck = false - ): Promise<ParsedIdToken> { - const tokenParts = idToken.split('.'); - const headerBase64 = this.padBase64(tokenParts[0]); - const headerJson = b64DecodeUnicode(headerBase64); - const header = JSON.parse(headerJson); - const claimsBase64 = this.padBase64(tokenParts[1]); - const claimsJson = b64DecodeUnicode(claimsBase64); - const claims = JSON.parse(claimsJson); - const savedNonce = this._storage.getItem('nonce'); - - if (Array.isArray(claims.aud)) { - if (claims.aud.every(v => v !== this.clientId)) { - const err = 'Wrong audience: ' + claims.aud.join(','); - this.logger.warn(err); - return Promise.reject(err); - } - } else { - if (claims.aud !== this.clientId) { - const err = 'Wrong audience: ' + claims.aud; - this.logger.warn(err); - return Promise.reject(err); - } - } + if (this.requestAccessToken && !options.disableOAuth2StateCheck) { + const success = this.validateNonce(nonceInState); - if (!claims.sub) { - const err = 'No sub claim in id_token'; - this.logger.warn(err); - return Promise.reject(err); - } + if (!success) { + const event = new OAuthErrorEvent('invalid_nonce_in_state', null); + this.eventsSubject.next(event); + return Promise.reject(event); + } + } - /* For now, we only check whether the sub against - * silentRefreshSubject when sessionChecksEnabled is on - * We will reconsider in a later version to do this - * in every other case too. - */ - if ( - this.sessionChecksEnabled && - this.silentRefreshSubject && - this.silentRefreshSubject !== claims['sub'] - ) { - const err = - 'After refreshing, we got an id_token for another user (sub). ' + - `Expected sub: ${this.silentRefreshSubject}, received sub: ${ - claims['sub'] - }`; - - this.logger.warn(err); - return Promise.reject(err); - } + if (this.requestAccessToken) { + this.storeAccessTokenResponse( + accessToken, + null, + parts['expires_in'] || this.fallbackAccessTokenExpirationTimeInSec, + grantedScopes + ); + } - if (!claims.iat) { - const err = 'No iat claim in id_token'; - this.logger.warn(err); - return Promise.reject(err); - } + if (!this.oidc) { + this.eventsSubject.next(new OAuthSuccessEvent('token_received')); + if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) { + location.hash = ''; + } - if (!this.skipIssuerCheck && claims.iss !== this.issuer) { - const err = 'Wrong issuer: ' + claims.iss; - this.logger.warn(err); - return Promise.reject(err); - } + this.callOnTokenReceivedIfExists(options); + return Promise.resolve(true); + } - if (!skipNonceCheck && claims.nonce !== savedNonce) { - const err = 'Wrong nonce: ' + claims.nonce; - this.logger.warn(err); - return Promise.reject(err); - } - // at_hash is not applicable to authorization code flow - // addressing https://github.com/manfredsteyer/angular-oauth2-oidc/issues/661 - // i.e. Based on spec the at_hash check is only true for implicit code flow on Ping Federate - // https://www.pingidentity.com/developer/en/resources/openid-connect-developers-guide.html - if (this.hasOwnProperty('responseType') && this.responseType === 'code') { - this.disableAtHashCheck = true; + return this.processIdToken(idToken, accessToken) + .then(result => { + if (options.validationHandler) { + return options + .validationHandler({ + accessToken: accessToken, + idClaims: result.idTokenClaims, + idToken: result.idToken, + state: state + }) + .then(_ => result); } - if ( - !this.disableAtHashCheck && - this.requestAccessToken && - !claims['at_hash'] - ) { - const err = 'An at_hash is needed!'; - this.logger.warn(err); - return Promise.reject(err); + return result; + }) + .then(result => { + this.storeIdToken(result); + this.storeSessionState(sessionState); + if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) { + location.hash = ''; } + this.eventsSubject.next(new OAuthSuccessEvent('token_received')); + this.callOnTokenReceivedIfExists(options); + this.inImplicitFlow = false; + return true; + }) + .catch(reason => { + this.eventsSubject.next( + new OAuthErrorEvent('token_validation_error', reason) + ); + this.logger.error('Error validating tokens'); + this.logger.error(reason); + return Promise.reject(reason); + }); + } - const now = Date.now(); - const issuedAtMSec = claims.iat * 1000; - const expiresAtMSec = claims.exp * 1000; - const clockSkewInMSec = (this.clockSkewInSec || 600) * 1000; - - if ( - issuedAtMSec - clockSkewInMSec >= now || - expiresAtMSec + clockSkewInMSec <= now - ) { - const err = 'Token has expired'; - console.error(err); - console.error({ - now: now, - issuedAtMSec: issuedAtMSec, - expiresAtMSec: expiresAtMSec - }); - return Promise.reject(err); - } + private parseState(state: string): [string, string] { + let nonce = state; + let userState = ''; - const validationParams: ValidationParams = { - accessToken: accessToken, - idToken: idToken, - jwks: this.jwks, - idTokenClaims: claims, - idTokenHeader: header, - loadKeys: () => this.loadJwks() - }; + if (state) { + const idx = state.indexOf(this.config.nonceStateSeparator); + if (idx > -1) { + nonce = state.substr(0, idx); + userState = state.substr(idx + this.config.nonceStateSeparator.length); + } + } + return [nonce, userState]; + } - if (this.disableAtHashCheck) { - return this.checkSignature(validationParams).then(_ => { - const result: ParsedIdToken = { - idToken: idToken, - idTokenClaims: claims, - idTokenClaimsJson: claimsJson, - idTokenHeader: header, - idTokenHeaderJson: headerJson, - idTokenExpiresAt: expiresAtMSec - }; - return result; - }); - } + protected validateNonce(nonceInState: string): boolean { + let savedNonce; - return this.checkAtHash(validationParams) - .then(atHashValid => { - if ( - !this.disableAtHashCheck && - this.requestAccessToken && - !atHashValid - ) { - const err = 'Wrong at_hash'; - this.logger.warn(err); - return Promise.reject(err); - } - - return this.checkSignature(validationParams).then(_ => { - const atHashCheckEnabled = !this.disableAtHashCheck; - const result: ParsedIdToken = { - idToken: idToken, - idTokenClaims: claims, - idTokenClaimsJson: claimsJson, - idTokenHeader: header, - idTokenHeaderJson: headerJson, - idTokenExpiresAt: expiresAtMSec - }; - if (atHashCheckEnabled) { - return this.checkAtHash(validationParams).then(atHashValid => { - if (this.requestAccessToken && !atHashValid) { - const err = 'Wrong at_hash'; - this.logger.warn(err); - return Promise.reject(err); - } else { - return result; - } - }); - } else { - return result; - } - }); - }); + if ( + this.saveNoncesInLocalStorage && + typeof window['localStorage'] !== 'undefined' + ) { + savedNonce = localStorage.getItem('nonce'); + } else { + savedNonce = this._storage.getItem('nonce'); } - /** - * Returns the received claims about the user. - */ - public getIdentityClaims(): object { - const claims = this._storage.getItem('id_token_claims_obj'); - if (!claims) { - return null; - } - return JSON.parse(claims); + if (savedNonce !== nonceInState) { + const err = 'Validating access_token failed, wrong state/nonce.'; + console.error(err, savedNonce, nonceInState); + return false; } - - /** - * Returns the granted scopes from the server. - */ - public getGrantedScopes(): object { - const scopes = this._storage.getItem('granted_scopes'); - if (!scopes) { - return null; - } - return JSON.parse(scopes); + return true; + } + + protected storeIdToken(idToken: ParsedIdToken): void { + this._storage.setItem('id_token', idToken.idToken); + this._storage.setItem('id_token_claims_obj', idToken.idTokenClaimsJson); + this._storage.setItem('id_token_expires_at', '' + idToken.idTokenExpiresAt); + this._storage.setItem('id_token_stored_at', '' + Date.now()); + } + + protected storeSessionState(sessionState: string): void { + this._storage.setItem('session_state', sessionState); + } + + protected getSessionState(): string { + return this._storage.getItem('session_state'); + } + + protected handleLoginError(options: LoginOptions, parts: object): void { + if (options.onLoginError) { + options.onLoginError(parts); } - - /** - * Returns the current id_token. - */ - public getIdToken(): string { - return this._storage - ? this._storage.getItem('id_token') - : null; + if (this.clearHashAfterLogin && !options.preventClearHashAfterLogin) { + location.hash = ''; } - - protected padBase64(base64data): string { - while (base64data.length % 4 !== 0) { - base64data += '='; - } - return base64data; + } + + /** + * @ignore + */ + public processIdToken( + idToken: string, + accessToken: string, + skipNonceCheck = false + ): Promise<ParsedIdToken> { + const tokenParts = idToken.split('.'); + const headerBase64 = this.padBase64(tokenParts[0]); + const headerJson = b64DecodeUnicode(headerBase64); + const header = JSON.parse(headerJson); + const claimsBase64 = this.padBase64(tokenParts[1]); + const claimsJson = b64DecodeUnicode(claimsBase64); + const claims = JSON.parse(claimsJson); + + let savedNonce; + if ( + this.saveNoncesInLocalStorage && + typeof window['localStorage'] !== 'undefined' + ) { + savedNonce = localStorage.getItem('nonce'); + } else { + savedNonce = this._storage.getItem('nonce'); } - /** - * Returns the current access_token. - */ - public getAccessToken(): string { - return this._storage - ? this._storage.getItem('access_token') - : null; + if (Array.isArray(claims.aud)) { + if (claims.aud.every(v => v !== this.clientId)) { + const err = 'Wrong audience: ' + claims.aud.join(','); + this.logger.warn(err); + return Promise.reject(err); + } + } else { + if (claims.aud !== this.clientId) { + const err = 'Wrong audience: ' + claims.aud; + this.logger.warn(err); + return Promise.reject(err); + } } - public getRefreshToken(): string { - return this._storage - ? this._storage.getItem('refresh_token') - : null; + if (!claims.sub) { + const err = 'No sub claim in id_token'; + this.logger.warn(err); + return Promise.reject(err); } - /** - * Returns the expiration date of the access_token - * as milliseconds since 1970. + /* For now, we only check whether the sub against + * silentRefreshSubject when sessionChecksEnabled is on + * We will reconsider in a later version to do this + * in every other case too. */ - public getAccessTokenExpiration(): number { - if (!this._storage.getItem('expires_at')) { - return null; - } - return parseInt(this._storage.getItem('expires_at'), 10); - } + if ( + this.sessionChecksEnabled && + this.silentRefreshSubject && + this.silentRefreshSubject !== claims['sub'] + ) { + const err = + 'After refreshing, we got an id_token for another user (sub). ' + + `Expected sub: ${this.silentRefreshSubject}, received sub: ${claims['sub']}`; - protected getAccessTokenStoredAt(): number { - return parseInt(this._storage.getItem('access_token_stored_at'), 10); + this.logger.warn(err); + return Promise.reject(err); } - protected getIdTokenStoredAt(): number { - return parseInt(this._storage.getItem('id_token_stored_at'), 10); + if (!claims.iat) { + const err = 'No iat claim in id_token'; + this.logger.warn(err); + return Promise.reject(err); } - /** - * Returns the expiration date of the id_token - * as milliseconds since 1970. - */ - public getIdTokenExpiration(): number { - if (!this._storage.getItem('id_token_expires_at')) { - return null; - } + if (!this.skipIssuerCheck && claims.iss !== this.issuer) { + const err = 'Wrong issuer: ' + claims.iss; + this.logger.warn(err); + return Promise.reject(err); + } - return parseInt(this._storage.getItem('id_token_expires_at'), 10); + if (!skipNonceCheck && claims.nonce !== savedNonce) { + const err = 'Wrong nonce: ' + claims.nonce; + this.logger.warn(err); + return Promise.reject(err); + } + // at_hash is not applicable to authorization code flow + // addressing https://github.com/manfredsteyer/angular-oauth2-oidc/issues/661 + // i.e. Based on spec the at_hash check is only true for implicit code flow on Ping Federate + // https://www.pingidentity.com/developer/en/resources/openid-connect-developers-guide.html + if (this.hasOwnProperty('responseType') && this.responseType === 'code') { + this.disableAtHashCheck = true; + } + if ( + !this.disableAtHashCheck && + this.requestAccessToken && + !claims['at_hash'] + ) { + const err = 'An at_hash is needed!'; + this.logger.warn(err); + return Promise.reject(err); } - /** - * Checkes, whether there is a valid access_token. - */ - public hasValidAccessToken(): boolean { - if (this.getAccessToken()) { - const expiresAt = this._storage.getItem('expires_at'); - const now = new Date(); - if (expiresAt && parseInt(expiresAt, 10) < now.getTime()) { - return false; - } + const now = Date.now(); + const issuedAtMSec = claims.iat * 1000; + const expiresAtMSec = claims.exp * 1000; + const clockSkewInMSec = (this.clockSkewInSec || 600) * 1000; - return true; - } + if ( + issuedAtMSec - clockSkewInMSec >= now || + expiresAtMSec + clockSkewInMSec <= now + ) { + const err = 'Token has expired'; + console.error(err); + console.error({ + now: now, + issuedAtMSec: issuedAtMSec, + expiresAtMSec: expiresAtMSec + }); + return Promise.reject(err); + } - return false; + const validationParams: ValidationParams = { + accessToken: accessToken, + idToken: idToken, + jwks: this.jwks, + idTokenClaims: claims, + idTokenHeader: header, + loadKeys: () => this.loadJwks() + }; + + if (this.disableAtHashCheck) { + return this.checkSignature(validationParams).then(_ => { + const result: ParsedIdToken = { + idToken: idToken, + idTokenClaims: claims, + idTokenClaimsJson: claimsJson, + idTokenHeader: header, + idTokenHeaderJson: headerJson, + idTokenExpiresAt: expiresAtMSec + }; + return result; + }); } - /** - * Checks whether there is a valid id_token. - */ - public hasValidIdToken(): boolean { - if (this.getIdToken()) { - const expiresAt = this._storage.getItem('id_token_expires_at'); - const now = new Date(); - if (expiresAt && parseInt(expiresAt, 10) < now.getTime()) { - return false; - } + return this.checkAtHash(validationParams).then(atHashValid => { + if (!this.disableAtHashCheck && this.requestAccessToken && !atHashValid) { + const err = 'Wrong at_hash'; + this.logger.warn(err); + return Promise.reject(err); + } - return true; + return this.checkSignature(validationParams).then(_ => { + const atHashCheckEnabled = !this.disableAtHashCheck; + const result: ParsedIdToken = { + idToken: idToken, + idTokenClaims: claims, + idTokenClaimsJson: claimsJson, + idTokenHeader: header, + idTokenHeaderJson: headerJson, + idTokenExpiresAt: expiresAtMSec + }; + if (atHashCheckEnabled) { + return this.checkAtHash(validationParams).then(atHashValid => { + if (this.requestAccessToken && !atHashValid) { + const err = 'Wrong at_hash'; + this.logger.warn(err); + return Promise.reject(err); + } else { + return result; + } + }); + } else { + return result; } - - return false; + }); + }); + } + + /** + * Returns the received claims about the user. + */ + public getIdentityClaims(): object { + const claims = this._storage.getItem('id_token_claims_obj'); + if (!claims) { + return null; } - - /** - * Retrieve a saved custom property of the TokenReponse object. Only if predefined in authconfig. - */ - public getCustomTokenResponseProperty(requestedProperty: string): any { - return this._storage && this.config.customTokenParameters - && (this.config.customTokenParameters.indexOf(requestedProperty) >= 0) - && this._storage.getItem(requestedProperty) !== null - ? JSON.parse(this._storage.getItem(requestedProperty)) : null; + return JSON.parse(claims); + } + + /** + * Returns the granted scopes from the server. + */ + public getGrantedScopes(): object { + const scopes = this._storage.getItem('granted_scopes'); + if (!scopes) { + return null; } - - /** - * Returns the auth-header that can be used - * to transmit the access_token to a service - */ - public authorizationHeader(): string { - return 'Bearer ' + this.getAccessToken(); + return JSON.parse(scopes); + } + + /** + * Returns the current id_token. + */ + public getIdToken(): string { + return this._storage ? this._storage.getItem('id_token') : null; + } + + protected padBase64(base64data): string { + while (base64data.length % 4 !== 0) { + base64data += '='; + } + return base64data; + } + + /** + * Returns the current access_token. + */ + public getAccessToken(): string { + return this._storage ? this._storage.getItem('access_token') : null; + } + + public getRefreshToken(): string { + return this._storage ? this._storage.getItem('refresh_token') : null; + } + + /** + * Returns the expiration date of the access_token + * as milliseconds since 1970. + */ + public getAccessTokenExpiration(): number { + if (!this._storage.getItem('expires_at')) { + return null; + } + return parseInt(this._storage.getItem('expires_at'), 10); + } + + protected getAccessTokenStoredAt(): number { + return parseInt(this._storage.getItem('access_token_stored_at'), 10); + } + + protected getIdTokenStoredAt(): number { + return parseInt(this._storage.getItem('id_token_stored_at'), 10); + } + + /** + * Returns the expiration date of the id_token + * as milliseconds since 1970. + */ + public getIdTokenExpiration(): number { + if (!this._storage.getItem('id_token_expires_at')) { + return null; } - /** - * Removes all tokens and logs the user out. - * If a logout url is configured, the user is - * redirected to it with optional state parameter. - * @param noRedirectToLogoutUrl - * @param state - */ - public logOut(noRedirectToLogoutUrl = false, state = ''): void { - const id_token = this.getIdToken(); - this._storage.removeItem('access_token'); - this._storage.removeItem('id_token'); - this._storage.removeItem('refresh_token'); - this._storage.removeItem('nonce'); - this._storage.removeItem('expires_at'); - this._storage.removeItem('id_token_claims_obj'); - this._storage.removeItem('id_token_expires_at'); - this._storage.removeItem('id_token_stored_at'); - this._storage.removeItem('access_token_stored_at'); - this._storage.removeItem('granted_scopes'); - this._storage.removeItem('session_state'); - if (this.config.customTokenParameters) { - this.config.customTokenParameters.forEach(customParam => this._storage.removeItem(customParam)); - } - this.silentRefreshSubject = null; - - this.eventsSubject.next(new OAuthInfoEvent('logout')); - - if (!this.logoutUrl) { - return; - } - if (noRedirectToLogoutUrl) { - return; - } - - if (!id_token && !this.postLogoutRedirectUri) { - return; - } - - let logoutUrl: string; + return parseInt(this._storage.getItem('id_token_expires_at'), 10); + } + + /** + * Checkes, whether there is a valid access_token. + */ + public hasValidAccessToken(): boolean { + if (this.getAccessToken()) { + const expiresAt = this._storage.getItem('expires_at'); + const now = new Date(); + if (expiresAt && parseInt(expiresAt, 10) < now.getTime()) { + return false; + } - if (!this.validateUrlForHttps(this.logoutUrl)) { - throw new Error( - 'logoutUrl must use HTTPS (with TLS), or config value for property \'requireHttps\' must be set to \'false\' and allow HTTP (without TLS).' - ); - } + return true; + } - // For backward compatibility - if (this.logoutUrl.indexOf('{{') > -1) { - logoutUrl = this.logoutUrl - .replace(/\{\{id_token\}\}/, id_token) - .replace(/\{\{client_id\}\}/, this.clientId); - } else { + return false; + } + + /** + * Checks whether there is a valid id_token. + */ + public hasValidIdToken(): boolean { + if (this.getIdToken()) { + const expiresAt = this._storage.getItem('id_token_expires_at'); + const now = new Date(); + if (expiresAt && parseInt(expiresAt, 10) < now.getTime()) { + return false; + } - let params = new HttpParams(); + return true; + } - if (id_token) { - params = params.set('id_token_hint', id_token); - } + return false; + } + + /** + * Retrieve a saved custom property of the TokenReponse object. Only if predefined in authconfig. + */ + public getCustomTokenResponseProperty(requestedProperty: string): any { + return this._storage && + this.config.customTokenParameters && + this.config.customTokenParameters.indexOf(requestedProperty) >= 0 && + this._storage.getItem(requestedProperty) !== null + ? JSON.parse(this._storage.getItem(requestedProperty)) + : null; + } + + /** + * Returns the auth-header that can be used + * to transmit the access_token to a service + */ + public authorizationHeader(): string { + return 'Bearer ' + this.getAccessToken(); + } + + /** + * Removes all tokens and logs the user out. + * If a logout url is configured, the user is + * redirected to it with optional state parameter. + * @param noRedirectToLogoutUrl + * @param state + */ + public logOut(noRedirectToLogoutUrl = false, state = ''): void { + const id_token = this.getIdToken(); + this._storage.removeItem('access_token'); + this._storage.removeItem('id_token'); + this._storage.removeItem('refresh_token'); + + if (this.saveNoncesInLocalStorage) { + localStorage.removeItem('nonce'); + localStorage.removeItem('PKCI_verifier'); + } else { + this._storage.removeItem('nonce'); + this._storage.removeItem('PKCI_verifier'); + } - const postLogoutUrl = this.postLogoutRedirectUri || this.redirectUri; - if (postLogoutUrl) { - params = params.set('post_logout_redirect_uri', postLogoutUrl); + this._storage.removeItem('expires_at'); + this._storage.removeItem('id_token_claims_obj'); + this._storage.removeItem('id_token_expires_at'); + this._storage.removeItem('id_token_stored_at'); + this._storage.removeItem('access_token_stored_at'); + this._storage.removeItem('granted_scopes'); + this._storage.removeItem('session_state'); + if (this.config.customTokenParameters) { + this.config.customTokenParameters.forEach(customParam => + this._storage.removeItem(customParam) + ); + } + this.silentRefreshSubject = null; - if (state) { - params = params.set('state', state); - } - } + this.eventsSubject.next(new OAuthInfoEvent('logout')); - logoutUrl = - this.logoutUrl + - (this.logoutUrl.indexOf('?') > -1 ? '&' : '?') + - params.toString(); - } - this.config.openUri(logoutUrl); + if (!this.logoutUrl) { + return; } - - /** - * @ignore - */ - public createAndSaveNonce(): Promise<string> { - const that = this; - return this.createNonce().then(function (nonce: any) { - that._storage.setItem('nonce', nonce); - return nonce; - }); + if (noRedirectToLogoutUrl) { + return; } - /** - * @ignore - */ - public ngOnDestroy(): void { - this.clearAccessTokenTimer(); - this.clearIdTokenTimer(); + if (!id_token && !this.postLogoutRedirectUri) { + return; + } - this.removeSilentRefreshEventListener(); - const silentRefreshFrame = this.document.getElementById(this.silentRefreshIFrameName); - if (silentRefreshFrame) { - silentRefreshFrame.remove(); - } + let logoutUrl: string; - this.stopSessionCheckTimer(); - this.removeSessionCheckEventListener(); - const sessionCheckFrame = this.document.getElementById(this.sessionCheckIFrameName); - if (sessionCheckFrame) { - sessionCheckFrame.remove(); - } + if (!this.validateUrlForHttps(this.logoutUrl)) { + throw new Error( + "logoutUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS)." + ); } - protected createNonce(): Promise<string> { - return new Promise((resolve) => { - if (this.rngUrl) { - throw new Error( - 'createNonce with rng-web-api has not been implemented so far' - ); - } + // For backward compatibility + if (this.logoutUrl.indexOf('{{') > -1) { + logoutUrl = this.logoutUrl + .replace(/\{\{id_token\}\}/, id_token) + .replace(/\{\{client_id\}\}/, this.clientId); + } else { + let params = new HttpParams(); - /* - * This alphabet is from: - * https://tools.ietf.org/html/rfc7636#section-4.1 - * - * [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" - */ - const unreserved = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'; - let size = 45; - let id = ''; - - const crypto = typeof self === 'undefined' ? null : (self.crypto || self['msCrypto']); - if (crypto) { - let bytes = new Uint8Array(size); - crypto.getRandomValues(bytes); - bytes = bytes.map(x => unreserved.charCodeAt(x % unreserved.length)); - id = String.fromCharCode.apply(null, bytes); - } else { - while (0 < size--) { - id += unreserved[Math.random() * unreserved.length | 0]; - } - } + if (id_token) { + params = params.set('id_token_hint', id_token); + } - resolve(base64UrlEncode(id)); - }); - } + const postLogoutUrl = this.postLogoutRedirectUri || this.redirectUri; + if (postLogoutUrl) { + params = params.set('post_logout_redirect_uri', postLogoutUrl); - protected async checkAtHash(params: ValidationParams): Promise<boolean> { - if (!this.tokenValidationHandler) { - this.logger.warn( - 'No tokenValidationHandler configured. Cannot check at_hash.' - ); - return true; + if (state) { + params = params.set('state', state); } - return this.tokenValidationHandler.validateAtHash(params); - } + } - protected checkSignature(params: ValidationParams): Promise<any> { - if (!this.tokenValidationHandler) { - this.logger.warn( - 'No tokenValidationHandler configured. Cannot check signature.' - ); - return Promise.resolve(null); - } - return this.tokenValidationHandler.validateSignature(params); + logoutUrl = + this.logoutUrl + + (this.logoutUrl.indexOf('?') > -1 ? '&' : '?') + + params.toString(); } - - - /** - * Start the implicit flow or the code flow, - * depending on your configuration. - */ - public initLoginFlow( - additionalState = '', - params = {} - ): void { - if (this.responseType === 'code') { - return this.initCodeFlow(additionalState, params); - } else { - return this.initImplicitFlow(additionalState, params); - } + this.config.openUri(logoutUrl); + } + + /** + * @ignore + */ + public createAndSaveNonce(): Promise<string> { + const that = this; + return this.createNonce().then(function(nonce: any) { + // Use localStorage for nonce if possible + // localStorage is the only storage who survives a + // redirect in ALL browsers (also IE) + // Otherwiese we'd force teams who have to support + // IE into using localStorage for everything + if ( + that.saveNoncesInLocalStorage && + typeof window['localStorage'] !== 'undefined' + ) { + localStorage.setItem('nonce', nonce); + } else { + that._storage.setItem('nonce', nonce); + } + return nonce; + }); + } + + /** + * @ignore + */ + public ngOnDestroy(): void { + this.clearAccessTokenTimer(); + this.clearIdTokenTimer(); + + this.removeSilentRefreshEventListener(); + const silentRefreshFrame = this.document.getElementById( + this.silentRefreshIFrameName + ); + if (silentRefreshFrame) { + silentRefreshFrame.remove(); } - /** - * Starts the authorization code flow and redirects to user to - * the auth servers login url. - */ - public initCodeFlow( - additionalState = '', - params = {} - ): void { - if (this.loginUrl !== '') { - this.initCodeFlowInternal(additionalState, params); - } else { - this.events.pipe(filter(e => e.type === 'discovery_document_loaded')) - .subscribe(_ => this.initCodeFlowInternal(additionalState, params)); - } + this.stopSessionCheckTimer(); + this.removeSessionCheckEventListener(); + const sessionCheckFrame = this.document.getElementById( + this.sessionCheckIFrameName + ); + if (sessionCheckFrame) { + sessionCheckFrame.remove(); } + } - private initCodeFlowInternal( - additionalState = '', - params = {} - ): void { + protected createNonce(): Promise<string> { + return new Promise(resolve => { + if (this.rngUrl) { + throw new Error( + 'createNonce with rng-web-api has not been implemented so far' + ); + } - if (!this.validateUrlForHttps(this.loginUrl)) { - throw new Error('loginUrl must use HTTPS (with TLS), or config value for property \'requireHttps\' must be set to \'false\' and allow HTTP (without TLS).'); + /* + * This alphabet is from: + * https://tools.ietf.org/html/rfc7636#section-4.1 + * + * [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~" + */ + const unreserved = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'; + let size = 45; + let id = ''; + + const crypto = + typeof self === 'undefined' ? null : self.crypto || self['msCrypto']; + if (crypto) { + let bytes = new Uint8Array(size); + crypto.getRandomValues(bytes); + + // Needed for IE + if (!bytes.map) { + (bytes as any).map = Array.prototype.map; + } + + bytes = bytes.map(x => unreserved.charCodeAt(x % unreserved.length)); + id = String.fromCharCode.apply(null, bytes); + } else { + while (0 < size--) { + id += unreserved[(Math.random() * unreserved.length) | 0]; } + } - this.createLoginUrl(additionalState, '', null, false, params) - .then(this.config.openUri) - .catch(error => { - console.error('Error in initAuthorizationCodeFlow'); - console.error(error); - }); - } + resolve(base64UrlEncode(id)); + }); + } - protected async createChallangeVerifierPairForPKCE(): Promise<[string, string]> { + protected async checkAtHash(params: ValidationParams): Promise<boolean> { + if (!this.tokenValidationHandler) { + this.logger.warn( + 'No tokenValidationHandler configured. Cannot check at_hash.' + ); + return true; + } + return this.tokenValidationHandler.validateAtHash(params); + } + + protected checkSignature(params: ValidationParams): Promise<any> { + if (!this.tokenValidationHandler) { + this.logger.warn( + 'No tokenValidationHandler configured. Cannot check signature.' + ); + return Promise.resolve(null); + } + return this.tokenValidationHandler.validateSignature(params); + } + + /** + * Start the implicit flow or the code flow, + * depending on your configuration. + */ + public initLoginFlow(additionalState = '', params = {}): void { + if (this.responseType === 'code') { + return this.initCodeFlow(additionalState, params); + } else { + return this.initImplicitFlow(additionalState, params); + } + } + + /** + * Starts the authorization code flow and redirects to user to + * the auth servers login url. + */ + public initCodeFlow(additionalState = '', params = {}): void { + if (this.loginUrl !== '') { + this.initCodeFlowInternal(additionalState, params); + } else { + this.events + .pipe(filter(e => e.type === 'discovery_document_loaded')) + .subscribe(_ => this.initCodeFlowInternal(additionalState, params)); + } + } - if (!this.crypto) { - throw new Error('PKCI support for code flow needs a CryptoHander. Did you import the OAuthModule using forRoot() ?'); - } + private initCodeFlowInternal(additionalState = '', params = {}): void { + if (!this.validateUrlForHttps(this.loginUrl)) { + throw new Error( + "loginUrl must use HTTPS (with TLS), or config value for property 'requireHttps' must be set to 'false' and allow HTTP (without TLS)." + ); + } + this.createLoginUrl(additionalState, '', null, false, params) + .then(this.config.openUri) + .catch(error => { + console.error('Error in initAuthorizationCodeFlow'); + console.error(error); + }); + } + + protected async createChallangeVerifierPairForPKCE(): Promise< + [string, string] + > { + if (!this.crypto) { + throw new Error( + 'PKCE support for code flow needs a CryptoHander. Did you import the OAuthModule using forRoot() ?' + ); + } - const verifier = await this.createNonce(); - const challengeRaw = await this.crypto.calcHash(verifier, 'sha-256'); - const challenge = base64UrlEncode(challengeRaw); + const verifier = await this.createNonce(); + const challengeRaw = await this.crypto.calcHash(verifier, 'sha-256'); + const challenge = base64UrlEncode(challengeRaw); - return [challenge, verifier]; - } + return [challenge, verifier]; + } - private extractRecognizedCustomParameters(tokenResponse: TokenResponse): Map<string, string> { - let foundParameters: Map<string, string> = new Map<string, string>(); - if (!this.config.customTokenParameters) { - return foundParameters; - } - this.config.customTokenParameters.forEach((recognizedParameter: string) => { - if (tokenResponse[recognizedParameter]) { - foundParameters.set(recognizedParameter, JSON.stringify(tokenResponse[recognizedParameter])); - } - }); + private extractRecognizedCustomParameters( + tokenResponse: TokenResponse + ): Map<string, string> { + let foundParameters: Map<string, string> = new Map<string, string>(); + if (!this.config.customTokenParameters) { return foundParameters; } + this.config.customTokenParameters.forEach((recognizedParameter: string) => { + if (tokenResponse[recognizedParameter]) { + foundParameters.set( + recognizedParameter, + JSON.stringify(tokenResponse[recognizedParameter]) + ); + } + }); + return foundParameters; + } }

    diff --git a/docs/injectables/UrlHelperService.html b/docs/injectables/UrlHelperService.html index 0eca62b0..a8412a79 100644 --- a/docs/injectables/UrlHelperService.html +++ b/docs/injectables/UrlHelperService.html @@ -277,14 +277,7 @@

    public parseQueryString(queryString: string): object { const data = {}; - let - pairs, - pair, - separatorIndex, - escapedKey, - escapedValue, - key, - value; + let pairs, pair, separatorIndex, escapedKey, escapedValue, key, value; if (queryString === null) { return data; @@ -307,7 +300,9 @@

    key = decodeURIComponent(escapedKey); value = decodeURIComponent(escapedValue); - if (key.substr(0, 1) === '/') { key = key.substr(1); } + if (key.substr(0, 1) === '/') { + key = key.substr(1); + } data[key] = value; } diff --git a/docs/interceptors/DefaultOAuthInterceptor.html b/docs/interceptors/DefaultOAuthInterceptor.html index 48e6fbc5..2823b44c 100644 --- a/docs/interceptors/DefaultOAuthInterceptor.html +++ b/docs/interceptors/DefaultOAuthInterceptor.html @@ -102,7 +102,7 @@

    Constructor

    @@ -205,8 +205,8 @@

    @@ -277,10 +277,17 @@

    HttpEvent, HttpHandler, HttpInterceptor, - HttpRequest, + HttpRequest } from '@angular/common/http'; import { Observable, of, merge } from 'rxjs'; -import { catchError, filter, map, take, mergeMap, timeout } from 'rxjs/operators'; +import { + catchError, + filter, + map, + take, + mergeMap, + timeout +} from 'rxjs/operators'; import { OAuthResourceServerErrorHandler } from './resource-server-error-handler'; import { OAuthModuleConfig } from '../oauth-module.config'; import { OAuthStorage } from '../types'; @@ -288,34 +295,38 @@

    @Injectable() export class DefaultOAuthInterceptor implements HttpInterceptor { + constructor( + private authStorage: OAuthStorage, + private oAuthService: OAuthService, + private errorHandler: OAuthResourceServerErrorHandler, + @Optional() private moduleConfig: OAuthModuleConfig + ) {} + + private checkUrl(url: string): boolean { + if (this.moduleConfig.resourceServer.customUrlValidation) { + return this.moduleConfig.resourceServer.customUrlValidation(url); + } - constructor( - private authStorage: OAuthStorage, - private oAuthService: OAuthService, - private errorHandler: OAuthResourceServerErrorHandler, - @Optional() private moduleConfig: OAuthModuleConfig - ) { } - - private checkUrl(url: string): boolean { - if (this.moduleConfig.resourceServer.customUrlValidation) { - return this.moduleConfig.resourceServer.customUrlValidation(url); - } - - if (this.moduleConfig.resourceServer.allowedUrls) { - return !!this.moduleConfig.resourceServer.allowedUrls.find(u => url.startsWith(u)); - } - - return true; + if (this.moduleConfig.resourceServer.allowedUrls) { + return !!this.moduleConfig.resourceServer.allowedUrls.find(u => + url.startsWith(u) + ); } + return true; + } + public intercept( req: HttpRequest<any>, next: HttpHandler ): Observable<HttpEvent<any>> { const url = req.url.toLowerCase(); - - if (!this.moduleConfig || !this.moduleConfig.resourceServer || !this.checkUrl(url)) { + if ( + !this.moduleConfig || + !this.moduleConfig.resourceServer || + !this.checkUrl(url) + ) { return next.handle(req); } @@ -329,14 +340,14 @@

    return merge( of(this.oAuthService.getAccessToken()).pipe( - filter(token => token ? true : false), + filter(token => (token ? true : false)) ), this.oAuthService.events.pipe( filter(e => e.type === 'token_received'), timeout(this.oAuthService.waitForTokenInMsec || 0), catchError(_ => of(null)), // timeout is not an error - map(_ => this.oAuthService.getAccessToken()), - ), + map(_ => this.oAuthService.getAccessToken()) + ) ).pipe( take(1), mergeMap(token => { @@ -349,7 +360,7 @@

    return next .handle(req) .pipe(catchError(err => this.errorHandler.handleError(err))); - }), + }) ); } } diff --git a/docs/interfaces/OidcDiscoveryDoc.html b/docs/interfaces/OidcDiscoveryDoc.html index 8e4ed8f2..d42a1860 100644 --- a/docs/interfaces/OidcDiscoveryDoc.html +++ b/docs/interfaces/OidcDiscoveryDoc.html @@ -1029,7 +1029,7 @@

    Properties

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -1137,7 +1137,6 @@ 

    Properties

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -1169,7 +1168,7 @@

    Properties

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/interfaces/ParsedIdToken.html b/docs/interfaces/ParsedIdToken.html index 206ce37a..ef90b617 100644 --- a/docs/interfaces/ParsedIdToken.html +++ b/docs/interfaces/ParsedIdToken.html @@ -293,7 +293,7 @@

    Properties

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -401,7 +401,6 @@ 

    Properties

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -433,7 +432,7 @@

    Properties

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/interfaces/TokenResponse.html b/docs/interfaces/TokenResponse.html index d087e1eb..d76420b8 100644 --- a/docs/interfaces/TokenResponse.html +++ b/docs/interfaces/TokenResponse.html @@ -332,7 +332,7 @@

    Properties

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -440,7 +440,6 @@ 

    Properties

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -472,7 +471,7 @@

    Properties

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/interfaces/UserInfo.html b/docs/interfaces/UserInfo.html index 34187044..b3fe457c 100644 --- a/docs/interfaces/UserInfo.html +++ b/docs/interfaces/UserInfo.html @@ -109,7 +109,7 @@

    Indexable

    @@ -152,7 +152,7 @@

    Properties

    -
    import { Injectable } from "@angular/core";
    +        
    import { Injectable } from '@angular/core';
     
     /**
      * Additional options that can be passed to tryLogin.
    @@ -260,7 +260,6 @@ 

    Properties

    setItem(key: string, data: string): void { this.data.set(key, data); } - } /** @@ -292,7 +291,7 @@

    Properties

    */ export interface TokenResponse { access_token: string; - id_token: string; + id_token: string; token_type: string; expires_in: number; refresh_token: string; diff --git a/docs/interfaces/ValidationParams.html b/docs/interfaces/ValidationParams.html index 7ca55899..ae2c2615 100644 --- a/docs/interfaces/ValidationParams.html +++ b/docs/interfaces/ValidationParams.html @@ -312,7 +312,9 @@

    Properties

    /** * Validates the at_hash in an id_token against the received access_token. */ - public abstract validateAtHash(validationParams: ValidationParams): Promise<boolean>; + public abstract validateAtHash( + validationParams: ValidationParams + ): Promise<boolean>; } /** @@ -371,7 +373,10 @@

    Properties

    * @param valueToHash * @param algorithm */ - protected abstract calcHash(valueToHash: string, algorithm: string): Promise<string>; + protected abstract calcHash( + valueToHash: string, + algorithm: string + ): Promise<string>; }
    diff --git a/docs/js/search/search_index.js b/docs/js/search/search_index.js index 0f296c7d..5cc7ec4e 100644 --- a/docs/js/search/search_index.js +++ b/docs/js/search/search_index.js @@ -1,4 +1,4 @@ var COMPODOC_SEARCH_INDEX = { - "index": {"version":"2.3.8","fields":["title","body"],"fieldVectors":[["title/classes/AbstractValidationHandler.html",[0,0.116,1,3.042]],["body/classes/AbstractValidationHandler.html",[0,0.111,1,2.931,2,0.851,3,0.482,4,0.533,5,0.482,6,3.105,7,4.125,8,1.326,9,1.598,10,1.753,11,1.451,12,2.042,13,2.931,14,1.587,15,1.741,16,3.561,17,2.349,18,1.259,19,2.931,20,3.561,21,0.587,22,1.522,23,4.742,24,4.182,25,3.22,26,3.22,27,2.702,28,1.814,29,4.234,30,0.942,31,2.821,32,3.217,33,2.244,34,2.329,35,1.966,36,1.204,37,1.447,38,0.018,39,1.475,40,0.942,41,1.04,42,2.702,43,1.824,44,2.215,45,3.217,46,1.859,47,2.821,48,3.217,49,4.24,50,3.217,51,2.169,52,3.217,53,3.217,54,1.767,55,2.702,56,3.217,57,4.15,58,2.821,59,4.32,60,4.125,61,3.492,62,1.574,63,1.729,64,1.027,65,2.702,66,2.821,67,3.22,68,0.458,69,1.977,70,1.977,71,2.17,72,0.545,73,1.321,74,1.192,75,1.192,76,1.192,77,1.192,78,1.403,79,2.17,80,2.17,81,2.17,82,1.133,83,0.891,84,2.207,85,1.823,86,3.217,87,2.17,88,2.17,89,1.823,90,2.17,91,2.17,92,2.17,93,0.741,94,2.17,95,2.17,96,2.17,97,1.977,98,4.24,99,2.17,100,4.24,101,2.17,102,2.17,103,2.17,104,0.912,105,3.834,106,2.17,107,2.17,108,2.17,109,2.17,110,0.707,111,2.17,112,1.823,113,2.17,114,2.17,115,0.007,116,0.01,117,0.007]],["title/injectables/DefaultHashHandler.html",[118,1.436,119,3.042]],["body/injectables/DefaultHashHandler.html",[0,0.141,3,0.673,4,0.744,5,0.673,6,3.157,8,1.852,10,1.328,14,1.134,20,3.422,21,0.819,22,1.928,25,3.866,27,3.866,28,1.919,29,4.134,30,0.905,37,1.39,38,0.018,39,1.268,40,0.905,41,1,42,2.545,43,1.753,44,1.98,68,0.64,72,0.579,89,2.545,104,1.395,110,1.5,115,0.015,116,0.012,117,0.009,118,1.753,119,3.711,120,2.761,121,4.602,122,5.296,123,3.939,124,4.559,125,5.151,126,3.391,127,3.939,128,1.304,129,3.391,130,3.391,131,3.391,132,3.711,133,3.357,134,2.761,135,3.391,136,2.127,137,3.391,138,3.391,139,3.391,140,3.391,141,5.151,142,4.559,143,3.03,144,3.391,145,3.391,146,3.391,147,3.391,148,3.391,149,3.391,150,4.559,151,3.391,152,3.181,153,3.391,154,3.391]],["title/interceptors/DefaultOAuthInterceptor.html",[155,3.737,156,3.042]],["body/interceptors/DefaultOAuthInterceptor.html",[0,0.09,3,0.58,4,0.641,5,0.58,14,0.978,21,0.706,22,1.741,28,0.891,30,0.817,37,1.255,38,0.018,39,1.144,40,0.817,41,1.134,43,1.124,55,3.09,68,1.119,72,0.371,84,2.92,93,1.255,104,1.471,115,0.008,116,0.011,117,0.008,118,1.583,128,1.124,133,2.824,152,2.04,156,3.351,157,2.923,158,5.534,159,3.396,160,5.534,161,2.378,162,3.396,163,2.187,164,2.132,165,4.764,166,3.608,167,4.764,168,3.608,169,3.396,170,4.116,171,2.923,172,5.172,173,4.871,174,5.172,175,3.396,176,4.764,177,3.576,178,2.923,179,4.116,180,1.792,181,4.116,182,2.38,183,3.396,184,3.396,185,1.512,186,2.923,187,3.396,188,4.116,189,3.396,190,2.612,191,0.813,192,1.659,193,2.194,194,2.686,195,2.612,196,2.923,197,2.38,198,2.676,199,2.923,200,1.364,201,3.396,202,3.396,203,2.923,204,2.923,205,2.923,206,0.813,207,2.923,208,2.923,209,2.923,210,2.923,211,2.923,212,3.09,213,2.923,214,4.781,215,4.781,216,4.116,217,3.396,218,3.396,219,1.593,220,1.364,221,3.396,222,3.396,223,2.612,224,1.907,225,3.396,226,3.396,227,3.396,228,3.396,229,3.396,230,3.396,231,3.396,232,3.396,233,2.923,234,4.116,235,3.396,236,2.923]],["title/classes/HashHandler.html",[0,0.116,132,3.042]],["body/classes/HashHandler.html",[0,0.144,2,1.222,3,0.693,4,0.765,5,0.693,6,2.848,8,1.905,9,1.549,10,1.622,14,1.167,20,3.488,21,0.842,22,1.965,25,2.619,27,3.922,28,1.91,29,4.182,30,0.693,37,1.064,38,0.018,39,0.97,40,0.693,41,0.765,42,2.619,43,1.341,44,2.009,68,0.658,72,0.59,89,2.619,104,1.411,110,1.521,115,0.016,116,0.013,117,0.009,118,1.786,119,2.84,121,4.152,124,3.489,125,3.489,128,1.341,129,4.647,130,4.647,131,4.647,132,4.253,133,3.378,134,2.84,135,3.489,136,2.168,137,3.489,138,3.489,139,3.489,140,3.489,141,5.225,142,4.647,143,3.117,144,3.489,145,3.489,146,3.489,147,3.489,148,3.489,149,3.489,150,4.647,151,3.489,152,3.242,153,3.489,154,3.489,237,4.053]],["title/classes/JwksValidationHandler.html",[0,0.116,238,2.607]],["body/classes/JwksValidationHandler.html",[0,0.108,2,1.217,3,0.69,4,0.762,5,0.69,6,2.84,8,1.897,9,1.542,16,3.478,21,0.839,22,1.959,26,3.478,30,1.035,36,1.162,37,1.413,38,0.018,39,1.288,40,0.92,41,1.016,43,1.782,44,1.782,57,4.158,65,2.608,68,0.983,72,0.441,78,2.677,85,2.608,115,0.009,116,0.012,117,0.012,133,1.897,161,3.012,193,2.608,238,4.158,239,4.634,240,3.012,241,4.634,242,5.383,243,4.634,244,5.383,245,1.826,246,4.659,247,1.913,248,5.383,249,2.572,250,1.687,251,1.611,252,5.383,253,3.478,254,4.349,255,4.036,256,5.383,257,4.036,258,4.036,259,1.336,260,2.828,261,2.697,262,1.706,263,3.475,264,2.828,265,2.267,266,3.105,267,2.267,268,2.828,269,2.828,270,1.706,271,1.349,272,3.105,273,4.141,274,3.475,275,2.608,276,1.897,277,1.542,278,2.828,279,1.4,280,2.828,281,3.105,282,2.608,283,0.8,284,3.105,285,3.105,286,3.105,287,3.105,288,4.036,289,4.036]],["title/classes/LoginOptions.html",[0,0.116,290,1.933]],["body/classes/LoginOptions.html",[0,0.13,2,0.571,3,0.525,4,0.358,5,0.324,9,0.724,10,1.527,11,0.658,12,1.343,14,0.546,15,0.97,18,1.195,21,0.394,28,2.008,30,0.942,33,2.312,34,1.297,35,0.891,38,0.018,40,0.894,41,1.267,44,0.627,46,1.474,51,1.016,54,1.297,62,1.653,63,0.658,64,0.69,68,0.308,72,0.648,73,1.544,74,1.297,75,0.801,76,0.801,77,0.801,82,1.233,83,1.405,93,1.374,104,0.413,110,0.475,115,0.004,116,0.007,117,0.004,118,1.016,128,0.627,136,1.787,163,1.118,164,1.74,185,0.844,191,0.735,192,1.065,198,0.801,200,1.554,206,0.735,219,1.281,220,1.233,245,0.926,250,0.77,251,1.065,259,0.627,262,1.297,271,1.312,277,0.724,279,1.991,290,1.367,291,0.943,292,0.552,293,1.443,294,1.981,295,1.297,296,1.819,297,1.925,298,1.925,299,1.925,300,1.635,301,1.925,302,1.895,303,1.473,304,2.697,305,2.137,306,1.991,307,1.527,308,1.701,309,1.527,310,1.367,311,1.527,312,1.981,313,1.981,314,1.367,315,1.527,316,1.675,317,2.213,318,1.527,319,1.443,320,1.443,321,1.527,322,1.527,323,0.926,324,1.895,325,1.065,326,1.367,327,1.527,328,1.925,329,1.065,330,1.895,331,1.443,332,2.066,333,1.88,334,1.297,335,1.297,336,1.443,337,1.297,338,1.527,339,2.213,340,1.443,341,1.527,342,1.527,343,2.501,344,1.895,345,1.88,346,1.527,347,1.065,348,1.443,349,1.527,350,2.33,351,1.905,352,1.88,353,1.895,354,1.367,355,1.819,356,0.891,357,1.895,358,1.527,359,1.233,360,1.527,361,1.367,362,1.297,363,1.527,364,1.527,365,1.527,366,1.527,367,1.367,368,1.527,369,1.895,370,1.297,371,1.527,372,2.298,373,3.099,374,0.801,375,0.69,376,1.527,377,0.844,378,0.69,379,0.801,380,0.844,381,0.891,382,0.844,383,0.943,384,2.431,385,0.943,386,0.943,387,0.943,388,0.943,389,0.943,390,0.801,391,0.943,392,0.627,393,0.761,394,0.801,395,0.801,396,0.891,397,0.891,398,1.527,399,1.527,400,1.527,401,0.891,402,0.943,403,0.943,404,0.943,405,2.431,406,0.801,407,0.599,408,0.943,409,0.891,410,0.943,411,0.943,412,0.943,413,1.527,414,1.527,415,1.297,416,1.527,417,1.635,418,1.443,419,0.943,420,0.891,421,0.943,422,0.943,423,0.844,424,0.599,425,0.571,426,0.943,427,0.844,428,0.943,429,0.891,430,0.599,431,0.627,432,0.599,433,0.891,434,0.69,435,0.943,436,0.943,437,0.943,438,0.943,439,0.943,440,0.943,441,0.943,442,0.943,443,0.943,444,0.943,445,0.943,446,0.943,447,0.943,448,0.943,449,0.943,450,0.943,451,0.943,452,0.943,453,0.943,454,0.943,455,0.943,456,0.943,457,0.943,458,0.943,459,0.943,460,0.943,461,0.943,462,0.943]],["title/injectables/MemoryStorage.html",[118,1.436,401,2.04]],["body/injectables/MemoryStorage.html",[0,0.14,3,0.591,4,0.415,5,0.376,10,1.598,11,0.763,12,0.763,14,0.633,15,0.695,18,0.976,21,0.457,22,1.259,28,2.036,30,0.73,33,2.035,34,0.93,37,1.122,38,0.018,39,1.023,40,0.73,41,0.914,43,1.414,44,0.728,46,1.587,51,1.145,54,1.462,62,1.53,63,0.763,64,0.801,68,0.357,72,0.681,73,1.663,74,1.462,75,0.93,76,0.93,77,0.93,82,0.884,83,1.35,93,1.122,104,0.48,110,0.552,115,0.005,116,0.008,117,0.005,118,1.145,120,1.542,128,0.728,136,2.245,163,1.259,164,1.53,185,0.98,191,0.527,192,0.763,198,0.93,200,1.389,206,0.527,219,1.23,220,0.884,245,0.663,250,0.552,251,0.828,259,0.728,262,0.93,271,1.071,277,0.841,279,1.681,290,0.98,291,1.094,292,0.395,293,1.034,294,1.54,296,1.034,297,1.094,298,1.094,299,1.094,300,0.93,301,1.094,303,1.145,304,2.277,305,1.935,306,1.681,307,1.094,308,1.322,309,1.094,310,0.98,311,1.094,312,1.54,313,1.54,314,0.98,315,1.094,316,1.447,317,1.72,318,1.094,319,1.034,320,1.034,321,1.094,322,1.094,323,0.663,325,0.763,326,0.98,327,1.094,328,1.72,329,0.763,331,1.034,332,2.047,333,1.462,334,0.93,335,0.93,336,1.034,337,0.93,338,1.094,339,2.125,340,1.034,341,1.094,342,1.094,345,1.462,346,1.094,347,0.763,348,1.034,349,1.094,350,1.903,351,1.556,352,1.462,354,0.98,355,1.626,358,1.094,359,0.884,360,1.094,361,0.98,362,0.93,363,1.094,364,1.094,365,1.094,366,1.094,367,0.98,368,1.094,370,0.93,371,1.094,372,2.475,373,3.333,374,0.93,375,0.801,376,1.72,377,0.98,378,0.801,379,0.93,380,0.98,381,1.034,382,0.98,383,1.094,384,2.619,385,1.094,386,1.094,387,1.094,388,1.094,389,1.094,390,0.93,391,1.094,392,0.728,393,0.884,394,0.93,395,0.93,396,1.034,397,1.034,398,2.125,399,2.125,400,2.125,401,1.626,402,1.094,403,1.094,404,1.094,405,2.619,406,0.93,407,0.695,408,1.094,409,1.034,410,1.094,411,1.094,412,1.094,413,1.72,414,1.72,415,1.462,416,1.72,417,1.806,418,1.626,419,1.094,420,1.034,421,1.094,422,1.094,423,0.98,424,0.695,425,0.663,426,1.094,427,0.98,428,1.094,429,2.277,430,0.695,431,0.728,432,0.695,433,1.034,434,0.801,435,1.094,436,1.094,437,1.094,438,1.094,439,1.094,440,1.094,441,1.094,442,1.094,443,1.094,444,1.094,445,1.094,446,1.094,447,1.094,448,1.094,449,1.094,450,1.094,451,1.094,452,1.094,453,1.094,454,1.094,455,1.094,456,1.094,457,1.094,458,1.094,459,1.094,460,1.094,461,1.094,462,1.094,463,2.977,464,2.977,465,2.977,466,2.2,467,2.2,468,2.2]],["title/classes/NullValidationHandler.html",[0,0.116,254,2.805]],["body/classes/NullValidationHandler.html",[0,0.123,2,1.394,3,0.79,4,0.873,5,0.79,6,3.412,8,2.173,9,1.767,12,2.244,14,1.693,16,3.8,21,0.961,22,2.141,26,3.8,30,1.005,37,1.544,38,0.018,39,1.408,40,1.005,41,1.11,43,1.946,44,2.253,57,4.481,65,3.8,68,0.751,72,0.505,85,3.8,104,1.282,115,0.011,116,0.014,117,0.011,193,4.179,240,3.675,254,3.8,305,1.946,469,5.568,470,5.063,471,5.063,472,5.881,473,4.524,474,5.881,475,4.624,476,4.624,477,4.624,478,4.624]],["title/classes/OAuthErrorEvent.html",[0,0.116,479,2.607]],["body/classes/OAuthErrorEvent.html",[0,0.175,2,1.277,3,1.06,4,0.8,5,0.724,10,1.062,30,0.724,37,1.112,38,0.018,39,1.014,40,1.169,41,0.8,46,2.116,64,2.258,72,0.747,115,0.01,116,0.013,117,0.01,161,2.764,224,2.379,253,4.255,259,2.053,479,3.338,480,2.737,481,4.418,482,4.347,483,4.621,484,4.347,485,4.236,486,2.544,487,2.737,488,2.544,489,2.737,490,2.737,491,2.544,492,2.737,493,2.737,494,2.737,495,2.737,496,2.737,497,2.737,498,2.544,499,2.544,500,2.737,501,2.737,502,2.737,503,2.544,504,2.544,505,2.107,506,2.737,507,2.737,508,2.968,509,2.737,510,4.615,511,4.347,512,2.737]],["title/classes/OAuthEvent.html",[0,0.116,481,2.805]],["body/classes/OAuthEvent.html",[0,0.177,2,1.305,3,1.071,4,0.817,5,0.74,10,1.085,30,0.74,37,1.136,38,0.018,39,1.036,40,1.177,41,0.817,46,1.7,64,1.576,72,0.752,115,0.01,116,0.013,117,0.01,161,2.804,224,2.432,253,4.051,259,2.075,479,2.6,480,2.797,481,4.449,482,4.393,483,4.645,484,3.034,486,2.6,487,2.797,488,2.6,489,2.797,490,2.797,491,2.6,492,2.797,493,2.797,494,2.797,495,2.797,496,2.797,497,2.797,498,2.6,499,2.6,500,2.797,501,2.797,502,2.797,503,2.6,504,2.6,505,2.153,506,2.797,507,2.797,508,3.034,509,2.797,510,4.654,511,4.393,512,2.797,513,4.329]],["title/classes/OAuthInfoEvent.html",[0,0.116,512,2.805]],["body/classes/OAuthInfoEvent.html",[0,0.176,2,1.294,3,1.173,4,0.81,5,0.733,10,1.076,30,0.733,37,1.127,38,0.018,39,1.027,40,1.173,41,0.81,46,1.69,64,1.562,72,0.75,115,0.01,116,0.013,117,0.01,161,2.788,224,2.41,253,4.276,259,2.066,479,2.578,480,2.773,481,4.437,482,4.375,483,4.636,484,3.007,486,2.578,487,2.773,488,2.578,489,2.773,490,2.773,491,2.578,492,2.773,493,2.773,494,2.773,495,2.773,496,2.773,497,2.773,498,2.578,499,2.578,500,2.773,501,2.773,502,2.773,503,2.578,504,2.578,505,2.134,506,2.773,507,2.773,508,3.007,509,2.773,510,4.638,511,4.375,512,3.622,514,4.291]],["title/classes/OAuthLogger.html",[0,0.116,382,1.933]],["body/classes/OAuthLogger.html",[0,0.136,2,0.622,3,0.799,4,0.39,5,0.353,9,0.789,10,1.768,11,1.141,12,0.716,14,0.594,15,0.652,18,0.936,21,0.429,22,1.197,28,2.014,30,0.872,33,1.979,34,0.872,37,1.34,38,0.018,39,1.222,40,0.872,41,1.026,43,1.689,44,0.683,46,1.64,51,1.088,54,1.39,62,1.476,63,0.716,64,0.751,68,0.335,72,0.667,73,1.717,74,1.39,75,0.872,76,0.872,77,0.872,82,0.829,83,1.294,93,1.076,104,0.45,110,0.517,115,0.005,116,0.008,117,0.005,118,1.088,128,0.683,136,1.877,163,1.197,164,1.612,185,0.919,191,0.494,192,1.422,198,0.872,200,1.321,206,0.494,219,1.18,220,0.829,245,0.622,250,0.517,251,0.787,259,0.683,262,0.872,271,1.027,277,1.257,279,1.622,290,0.919,291,1.027,292,0.371,293,0.97,294,1.464,296,0.97,297,1.027,298,1.027,299,1.027,300,0.872,301,1.027,303,1.088,304,2.197,305,1.888,306,1.622,307,1.027,308,1.257,309,1.027,310,0.919,311,1.027,312,1.464,313,1.464,314,0.919,315,1.027,316,1.403,317,1.635,318,1.027,319,0.97,320,0.97,321,1.027,322,1.027,323,0.622,325,0.716,326,0.919,327,1.027,328,2.038,329,0.716,331,0.97,332,1.975,333,1.39,334,0.872,335,0.872,336,0.97,337,0.872,338,1.027,339,2.325,340,0.97,341,1.027,342,1.027,345,1.39,346,1.027,347,0.716,348,0.97,349,2.704,350,1.825,351,1.492,352,1.39,354,0.919,355,1.546,358,1.027,359,0.829,360,1.027,361,0.919,362,0.872,363,1.027,364,1.027,365,1.027,366,1.027,367,0.919,368,1.027,370,0.872,371,1.027,372,2.399,373,3.399,374,1.39,375,1.197,376,2.038,377,1.464,378,1.197,379,1.39,380,1.464,381,1.546,382,1.464,383,1.635,384,3.364,385,1.635,386,1.635,387,1.635,388,1.635,389,1.027,390,0.872,391,1.027,392,0.683,393,0.829,394,0.872,395,0.872,396,0.97,397,0.97,398,1.635,399,1.635,400,1.635,401,0.97,402,1.027,403,1.027,404,1.027,405,2.538,406,0.872,407,0.652,408,1.027,409,0.97,410,1.027,411,1.027,412,1.027,413,1.635,414,1.635,415,1.39,416,1.635,417,1.732,418,1.546,419,1.027,420,0.97,421,1.027,422,1.027,423,0.919,424,0.652,425,0.622,426,1.027,427,0.919,428,1.027,429,0.97,430,0.652,431,0.683,432,0.652,433,0.97,434,0.751,435,1.027,436,1.027,437,1.027,438,1.027,439,1.027,440,1.027,441,1.027,442,1.027,443,1.027,444,1.027,445,1.027,446,1.027,447,1.027,448,1.027,449,1.027,450,1.027,451,1.027,452,1.027,453,1.027,454,1.027,455,1.027,456,1.027,457,1.027,458,1.027,459,1.027,460,1.027,461,1.027,462,1.027,515,3.288,516,2.529,517,3.288,518,2.064,519,4.394,520,2.064,521,2.064,522,2.064,523,2.064]],["title/modules/OAuthModule.html",[524,3.339,525,2.805]],["body/modules/OAuthModule.html",[0,0.101,3,0.649,4,0.716,5,0.649,7,2.659,12,1.792,22,1.381,30,0.649,35,1.784,37,0.996,38,0.018,39,0.908,40,0.649,41,0.716,43,1.256,68,1.207,72,0.415,93,0.996,104,0.827,115,0.009,116,0.012,117,0.009,119,3.619,121,2.919,128,1.256,132,3.619,156,3.619,163,1.88,164,1.631,166,3.102,168,3.959,180,2.002,191,0.908,192,1.317,193,4.071,194,3.539,195,2.919,196,3.267,197,2.659,206,0.908,219,1.69,240,1.887,254,3.793,259,1.709,356,1.784,378,2.532,382,2.3,469,3.267,525,3.793,526,2.919,527,5.164,528,3.795,529,5.164,530,5.164,531,3.795,532,6.301,533,3.795,534,3.297,535,5.87,536,4.515,537,5.164,538,3.267,539,5.164,540,3.972,541,3.795,542,3.337,543,3.795,544,3.795,545,3.795,546,4.446,547,4.446,548,3.795,549,2.919,550,2.659,551,3.267,552,2.452,553,4.446,554,5.424,555,3.795,556,3.795]],["title/classes/OAuthModuleConfig.html",[0,0.116,168,2.607]],["body/classes/OAuthModuleConfig.html",[0,0.168,2,1.563,3,0.886,4,0.978,5,0.886,10,1.583,21,1.078,28,1.361,30,0.886,38,0.018,40,0.886,63,1.799,72,0.69,93,1.361,115,0.012,116,0.015,117,0.012,168,3.793,200,2.536,206,1.241,212,4.081,295,2.669,305,1.716,316,1.425,557,5.437,558,4.462,559,4.773,560,5.239,561,5.184,562,3.633,563,4.462,564,4.462,565,4.462,566,3.987,567,3.349,568,3.633,569,3.633,570,4.462]],["title/classes/OAuthNoopResourceServerErrorHandler.html",[0,0.116,542,2.805]],["body/classes/OAuthNoopResourceServerErrorHandler.html",[0,0.165,2,1.519,3,0.861,4,0.951,5,0.861,8,2.368,10,1.556,14,1.786,21,1.047,22,2.259,30,0.861,37,1.323,38,0.018,39,1.206,40,0.861,41,0.951,43,1.667,68,1.008,72,0.678,104,1.098,115,0.012,116,0.014,117,0.012,166,4.04,177,4.536,180,2.658,182,3.53,191,1.485,192,2.153,260,3.53,542,4.01,571,5.342,572,5.342,573,5.174,574,5.545,575,5.038,576,4.337,577,4.337]],["title/classes/OAuthResourceServerConfig.html",[0,0.116,560,3.339]],["body/classes/OAuthResourceServerConfig.html",[0,0.16,2,1.445,3,0.819,4,0.905,5,0.819,10,1.508,21,0.996,28,1.258,30,1.124,38,0.018,40,1.124,41,1.302,63,2.087,72,0.657,93,1.579,115,0.011,116,0.014,117,0.011,168,2.879,200,2.641,206,1.147,212,4.591,295,2.542,305,1.991,316,1.654,343,3.097,557,5.937,558,4.126,559,3.359,560,5.058,562,4.216,563,5.179,564,5.179,565,5.179,566,4.628,567,3.887,568,4.608,569,4.216,570,5.661,578,4.792,579,4.792,580,4.792]],["title/classes/OAuthResourceServerErrorHandler.html",[0,0.116,166,2.607]],["body/classes/OAuthResourceServerErrorHandler.html",[0,0.165,2,1.519,3,0.861,4,0.951,5,0.861,8,2.368,10,1.76,14,1.45,21,1.047,22,2.259,30,0.861,37,1.323,38,0.018,39,1.206,40,0.861,41,0.951,43,1.667,68,1.008,72,0.678,104,1.098,115,0.012,116,0.014,117,0.012,166,4.04,177,4.536,180,2.658,182,3.53,191,1.485,192,2.153,260,3.53,542,3.255,571,5.342,572,5.342,573,5.174,574,5.545,576,4.337,577,4.337,581,5.038]],["title/classes/OAuthStorage.html",[0,0.116,163,1.58]],["body/classes/OAuthStorage.html",[0,0.139,2,0.647,3,0.58,4,0.405,5,0.367,9,0.821,10,1.727,11,0.745,12,0.745,14,0.618,15,0.678,18,0.961,21,0.446,22,1.235,28,2.033,30,0.719,33,2.014,34,0.908,37,1.104,38,0.018,39,1.007,40,0.719,41,0.902,43,1.392,44,0.711,46,1.569,51,1.123,54,1.434,62,1.509,63,0.745,64,0.782,68,0.349,72,0.675,73,1.644,74,1.434,75,0.908,76,0.908,77,0.908,82,0.863,83,1.509,93,1.104,104,0.468,110,0.538,115,0.005,116,0.008,117,0.005,118,1.123,128,0.711,136,2.222,163,1.531,164,1.509,185,0.956,191,0.514,192,0.745,198,0.908,200,1.363,206,0.514,219,1.211,220,0.863,245,0.647,250,0.538,251,0.812,259,1.123,262,0.908,271,1.054,277,0.821,279,1.658,290,0.956,291,1.068,292,0.386,293,1.009,294,1.511,296,1.009,297,1.068,298,1.068,299,1.068,300,0.908,301,1.068,303,1.123,304,2.246,305,1.988,306,1.658,307,1.068,308,1.297,309,1.068,310,0.956,311,1.068,312,1.511,313,1.511,314,0.956,315,1.068,316,1.431,317,1.687,318,1.068,319,1.009,320,1.009,321,1.068,322,1.068,323,0.647,325,0.745,326,0.956,327,1.068,328,1.687,329,0.745,331,1.009,332,2.02,333,1.434,334,0.908,335,0.908,336,1.009,337,0.908,338,1.068,339,2.377,340,1.009,341,1.068,342,1.068,345,1.434,346,1.068,347,0.745,348,1.009,349,1.068,350,1.873,351,1.531,352,1.434,354,0.956,355,1.595,358,1.068,359,0.863,360,1.068,361,0.956,362,0.908,363,1.068,364,1.068,365,1.068,366,1.068,367,0.956,368,1.068,370,0.908,371,1.068,372,2.446,373,3.314,374,0.908,375,0.782,376,2.092,377,0.956,378,0.782,379,0.908,380,0.956,381,1.009,382,0.956,383,1.068,384,2.588,385,1.068,386,1.068,387,1.068,388,1.068,389,1.687,390,1.434,391,1.687,392,1.123,393,1.363,394,1.434,395,1.434,396,1.595,397,1.595,398,2.092,399,2.092,400,2.092,401,1.009,402,1.068,403,1.068,404,1.068,405,2.588,406,0.908,407,0.678,408,1.068,409,1.009,410,1.068,411,1.068,412,1.068,413,1.687,414,1.687,415,1.434,416,1.687,417,1.778,418,1.595,419,1.068,420,1.009,421,1.068,422,1.068,423,0.956,424,0.678,425,0.647,426,1.068,427,0.956,428,1.068,429,2.246,430,0.678,431,0.711,432,0.678,433,1.009,434,0.782,435,1.068,436,1.068,437,1.068,438,1.068,439,1.068,440,1.068,441,1.068,442,1.068,443,1.068,444,1.068,445,1.068,446,1.068,447,1.068,448,1.068,449,1.068,450,1.068,451,1.068,452,1.068,453,1.068,454,1.068,455,1.068,456,1.068,457,1.068,458,1.068,459,1.068,460,1.068,461,1.068,462,1.068,463,2.921,464,2.921,465,2.921,582,2.147,583,2.147,584,2.147]],["title/classes/OAuthSuccessEvent.html",[0,0.116,509,2.805]],["body/classes/OAuthSuccessEvent.html",[0,0.176,2,1.294,3,1.173,4,0.81,5,0.733,10,1.076,30,0.733,37,1.127,38,0.018,39,1.027,40,1.173,41,0.81,46,1.69,64,1.562,72,0.75,115,0.01,116,0.013,117,0.01,161,2.788,224,2.41,253,4.276,259,2.066,479,2.578,480,2.773,481,4.437,482,4.375,483,4.636,484,3.007,486,2.578,487,2.773,488,2.578,489,2.773,490,2.773,491,2.578,492,2.773,493,2.773,494,2.773,495,2.773,496,2.773,497,2.773,498,2.578,499,2.578,500,2.773,501,2.773,502,2.773,503,2.578,504,2.578,505,2.134,506,2.773,507,2.773,508,3.007,509,3.622,510,4.638,511,4.375,512,2.773,585,4.291]],["title/interfaces/OidcDiscoveryDoc.html",[73,1.371,433,2.04]],["body/interfaces/OidcDiscoveryDoc.html",[0,0.129,3,0.519,4,0.353,5,0.32,9,0.715,10,1.521,11,0.65,12,0.65,14,0.539,15,0.591,18,0.877,21,0.389,28,2.059,33,1.894,34,0.791,38,0.018,40,1.239,41,0.353,44,0.62,46,1.464,51,1.006,54,1.284,62,1.395,63,0.65,64,0.681,68,0.304,72,0.645,73,1.534,74,1.284,75,0.791,76,0.791,77,0.791,82,0.752,83,1.212,93,1.007,104,0.408,110,0.469,115,0.004,116,0.007,117,0.004,118,1.006,128,0.62,136,1.774,163,1.106,164,1.395,185,0.834,191,0.448,192,0.65,198,0.791,200,1.774,206,0.448,219,1.105,220,0.752,245,0.564,250,0.469,251,0.727,259,0.62,262,0.791,271,0.962,277,0.715,279,1.533,290,0.834,291,0.931,292,0.336,293,0.88,294,1.353,295,1.284,296,0.88,297,0.931,298,0.931,299,0.931,300,0.791,301,0.931,303,1.006,304,2.076,305,1.814,306,1.533,307,0.931,308,1.162,309,0.931,310,0.834,311,0.931,312,1.353,313,1.353,314,0.834,315,0.931,316,1.335,317,1.512,318,0.931,319,0.88,320,0.88,321,0.931,322,0.931,323,0.564,325,0.65,326,0.834,327,0.931,328,1.512,329,0.65,331,0.88,332,1.867,333,1.284,334,0.791,335,0.791,336,0.88,337,0.791,338,0.931,339,1.908,340,0.88,341,0.931,342,0.931,345,1.284,346,0.931,347,0.65,348,0.88,349,0.931,350,1.709,351,1.397,352,1.284,354,0.834,355,1.429,358,0.931,359,0.752,360,0.931,361,0.834,362,0.791,363,0.931,364,0.931,365,0.931,366,0.931,367,0.834,368,0.931,370,0.791,371,0.931,372,2.283,373,3.087,374,0.791,375,0.681,376,1.512,377,0.834,378,0.681,379,0.791,380,0.834,381,0.88,382,0.834,383,0.931,384,2.416,385,0.931,386,0.931,387,0.931,388,0.931,389,0.931,390,0.791,391,0.931,392,0.62,393,0.752,394,0.791,395,0.791,396,0.88,397,0.88,398,1.512,399,1.512,400,1.512,401,0.88,402,0.931,403,0.931,404,0.931,405,2.588,406,0.791,407,0.591,408,0.931,409,0.88,410,0.931,411,0.931,412,0.931,413,1.512,414,1.512,415,1.284,416,1.512,417,1.867,418,1.429,419,0.931,420,0.88,421,0.931,422,0.931,423,0.834,424,0.591,425,0.564,426,0.931,427,0.834,428,0.931,429,0.88,430,0.96,431,1.006,432,0.96,433,1.429,434,1.608,435,2.197,436,2.197,437,2.197,438,2.197,439,2.197,440,2.197,441,2.197,442,2.197,443,2.197,444,2.197,445,2.197,446,2.197,447,2.197,448,2.197,449,2.197,450,2.197,451,2.197,452,2.197,453,2.197,454,2.197,455,2.197,456,2.197,457,2.197,458,2.197,459,2.197,460,2.197,461,2.197,462,2.197,586,1.124]],["title/interfaces/ParsedIdToken.html",[73,1.371,409,2.04]],["body/interfaces/ParsedIdToken.html",[0,0.141,3,0.594,4,0.418,5,0.378,9,0.846,10,1.601,11,0.768,12,0.768,14,0.637,15,0.699,18,0.98,21,0.46,28,2.033,33,2.04,34,0.935,38,0.018,40,0.958,41,0.418,44,0.732,46,1.881,51,1.419,54,1.812,62,1.534,63,0.768,64,0.805,68,0.359,72,0.682,73,1.667,74,2.231,75,0.935,76,2.053,77,2.053,82,0.889,83,1.355,93,1.126,104,0.482,110,0.555,115,0.005,116,0.008,117,0.005,118,1.15,128,0.732,136,1.951,163,1.265,164,1.534,185,0.985,191,0.53,192,0.768,198,0.935,200,1.395,206,0.53,219,1.235,220,0.889,245,0.667,250,0.555,251,0.831,259,0.732,262,0.935,271,1.075,277,0.846,279,1.686,290,0.985,291,1.1,292,0.398,293,1.04,294,1.547,295,1.468,296,1.04,297,1.1,298,1.1,299,1.1,300,0.935,301,1.1,303,1.15,304,2.284,305,1.939,306,1.686,307,1.1,308,1.328,309,1.1,310,0.985,311,1.1,312,1.547,313,1.547,314,0.985,315,1.1,316,1.451,317,1.728,318,1.1,319,1.04,320,1.04,321,1.1,322,1.1,323,0.667,325,0.768,326,0.985,327,1.1,328,1.728,329,0.768,331,1.04,332,2.053,333,1.468,334,0.935,335,0.935,336,1.04,337,0.935,338,1.1,339,2.133,340,1.04,341,1.1,342,1.1,345,1.468,346,1.1,347,0.768,348,1.04,349,1.1,350,1.91,351,1.561,352,1.468,354,0.985,355,2.016,358,1.1,359,0.889,360,1.1,361,0.985,362,0.935,363,1.1,364,1.1,365,1.1,366,1.1,367,0.985,368,1.1,370,0.935,371,1.1,372,2.482,373,3.237,374,0.935,375,0.805,376,1.728,377,0.985,378,0.805,379,0.935,380,0.985,381,1.04,382,0.985,383,1.1,384,2.626,385,1.1,386,1.1,387,1.1,388,1.1,389,1.1,390,0.935,391,1.1,392,0.732,393,0.889,394,0.935,395,0.935,396,1.04,397,1.04,398,1.728,399,1.728,400,1.728,401,1.04,402,1.1,403,1.1,404,1.1,405,2.787,406,0.935,407,0.699,408,1.1,409,1.633,410,2.416,411,2.416,412,2.416,413,2.416,414,1.728,415,1.468,416,1.728,417,1.812,418,1.633,419,1.1,420,1.04,421,1.1,422,1.1,423,0.985,424,0.699,425,0.667,426,1.1,427,0.985,428,1.1,429,1.04,430,0.699,431,0.732,432,0.699,433,1.04,434,0.805,435,1.1,436,1.1,437,1.1,438,1.1,439,1.1,440,1.1,441,1.1,442,1.1,443,1.1,444,1.1,445,1.1,446,1.1,447,1.1,448,1.1,449,1.1,450,1.1,451,1.1,452,1.1,453,1.1,454,1.1,455,1.1,456,1.1,457,1.1,458,1.1,459,1.1,460,1.1,461,1.1,462,1.1,586,1.329]],["title/classes/ReceivedTokens.html",[0,0.116,372,2.04]],["body/classes/ReceivedTokens.html",[0,0.141,2,0.671,3,0.596,4,0.42,5,0.38,9,0.85,10,1.603,11,0.772,12,0.772,14,0.641,15,0.703,18,0.983,21,0.463,28,2.029,30,0.833,33,2.044,34,0.94,38,0.018,40,0.833,41,0.999,44,0.736,46,1.693,51,1.155,54,1.819,62,1.774,63,0.772,64,0.81,68,0.361,72,0.683,73,1.672,74,2.06,75,1.819,76,0.94,77,0.94,82,0.894,83,1.539,93,1.13,104,0.485,110,0.558,115,0.005,116,0.008,117,0.005,118,1.155,128,0.736,136,1.957,163,1.27,164,1.539,185,0.991,191,0.533,192,0.772,198,0.94,200,1.401,206,0.533,219,1.403,220,0.894,245,0.671,250,0.558,251,0.835,259,0.736,262,0.94,271,1.079,277,0.85,279,1.691,290,0.991,291,1.107,292,0.4,293,1.046,294,1.554,295,1.475,296,1.046,297,1.107,298,1.107,299,1.107,300,0.94,301,1.107,303,1.155,304,2.291,305,1.943,306,1.691,307,1.107,308,1.334,309,1.107,310,0.991,311,1.107,312,1.554,313,1.554,314,0.991,315,1.107,316,1.455,317,1.735,318,1.107,319,1.046,320,1.046,321,1.107,322,1.107,323,0.671,325,0.772,326,0.991,327,1.107,328,1.735,329,0.772,331,1.046,332,2.481,333,1.475,334,0.94,335,0.94,336,1.046,337,0.94,338,1.107,339,2.141,340,1.046,341,1.107,342,1.107,345,1.475,346,1.107,347,0.772,348,1.046,349,1.107,350,1.917,351,1.567,352,1.475,354,0.991,355,1.64,358,1.107,359,0.894,360,1.107,361,0.991,362,0.94,363,1.107,364,1.107,365,1.107,366,1.107,367,0.991,368,1.107,370,0.94,371,1.107,372,2.64,373,3.242,374,0.94,375,0.81,376,1.735,377,0.991,378,0.81,379,0.94,380,0.991,381,1.046,382,0.991,383,1.107,384,2.633,385,1.107,386,1.107,387,1.107,388,1.107,389,1.107,390,0.94,391,1.107,392,0.736,393,0.894,394,0.94,395,0.94,396,1.046,397,1.046,398,1.735,399,1.735,400,1.735,401,1.046,402,1.107,403,1.107,404,1.107,405,2.793,406,1.475,407,1.102,408,2.141,409,1.046,410,1.107,411,1.107,412,1.107,413,1.735,414,1.735,415,1.475,416,1.735,417,1.819,418,1.64,419,1.107,420,1.046,421,1.107,422,1.107,423,0.991,424,0.703,425,0.671,426,1.107,427,0.991,428,1.107,429,1.046,430,0.703,431,0.736,432,0.703,433,1.046,434,0.81,435,1.107,436,1.107,437,1.107,438,1.107,439,1.107,440,1.107,441,1.107,442,1.107,443,1.107,444,1.107,445,1.107,446,1.107,447,1.107,448,1.107,449,1.107,450,1.107,451,1.107,452,1.107,453,1.107,454,1.107,455,1.107,456,1.107,457,1.107,458,1.107,459,1.107,460,1.107,461,1.107,462,1.107,587,2.225,588,2.225,589,2.225,590,2.225]],["title/interfaces/TokenResponse.html",[73,1.371,420,2.04]],["body/interfaces/TokenResponse.html",[0,0.14,3,0.587,4,0.412,5,0.373,9,0.833,10,1.594,11,0.757,12,0.757,14,0.628,15,0.689,18,0.971,21,0.453,28,2.039,33,2.027,34,0.922,38,0.018,40,0.996,41,0.802,44,0.722,46,1.581,51,1.735,54,1.451,62,1.522,63,1.672,64,0.794,68,0.354,72,0.679,73,1.656,74,1.451,75,0.922,76,0.922,77,0.922,82,0.876,83,1.342,93,1.115,104,0.475,110,0.547,115,0.005,116,0.008,117,0.005,118,1.137,128,0.722,136,1.936,163,1.25,164,1.522,185,0.971,191,0.522,192,0.757,198,0.922,200,1.379,206,0.522,219,1.388,220,0.876,245,0.658,250,0.547,251,0.822,259,0.722,262,0.922,271,1.065,277,0.833,279,1.672,290,0.971,291,1.085,292,0.392,293,1.025,294,1.529,295,1.451,296,1.025,297,1.085,298,1.085,299,1.085,300,0.922,301,1.085,303,1.137,304,2.266,305,1.929,306,1.672,307,1.085,308,1.313,309,1.085,310,0.971,311,1.085,312,1.529,313,1.529,314,0.971,315,1.085,316,1.441,317,1.708,318,1.085,319,1.025,320,1.025,321,1.085,322,1.085,323,0.658,325,0.757,326,0.971,327,1.085,328,1.708,329,0.757,331,1.025,332,2.463,333,1.451,334,0.922,335,0.922,336,1.025,337,0.922,338,1.085,339,2.113,340,1.025,341,1.085,342,1.085,345,1.451,346,1.085,347,0.757,348,1.025,349,1.085,350,1.892,351,1.547,352,1.451,354,0.971,355,1.614,358,1.085,359,0.876,360,1.085,361,0.971,362,0.922,363,1.085,364,1.085,365,1.085,366,1.085,367,0.971,368,1.085,370,0.922,371,1.085,372,2.465,373,3.225,374,0.922,375,0.794,376,1.708,377,0.971,378,0.794,379,0.922,380,0.971,381,1.025,382,0.971,383,1.085,384,2.607,385,1.085,386,1.085,387,1.085,388,1.085,389,1.085,390,0.922,391,1.085,392,0.722,393,0.876,394,0.922,395,0.922,396,1.025,397,1.025,398,1.708,399,1.708,400,1.708,401,1.025,402,1.085,403,1.085,404,1.085,405,2.769,406,0.922,407,0.689,408,1.085,409,1.025,410,1.085,411,1.085,412,1.085,413,2.397,414,2.113,415,1.795,416,2.113,417,2.037,418,1.997,419,1.708,420,1.614,421,2.397,422,2.397,423,2.146,424,1.522,425,0.658,426,1.085,427,0.971,428,1.085,429,1.025,430,0.689,431,0.722,432,0.689,433,1.025,434,0.794,435,1.085,436,1.085,437,1.085,438,1.085,439,1.085,440,1.085,441,1.085,442,1.085,443,1.085,444,1.085,445,1.085,446,1.085,447,1.085,448,1.085,449,1.085,450,1.085,451,1.085,452,1.085,453,1.085,454,1.085,455,1.085,456,1.085,457,1.085,458,1.085,459,1.085,460,1.085,461,1.085,462,1.085,586,1.31]],["title/injectables/UrlHelperService.html",[118,1.436,540,3.339]],["body/injectables/UrlHelperService.html",[0,0.116,3,0.745,4,0.823,5,0.745,21,0.906,22,2.061,28,1.857,30,0.968,33,2.423,35,2.048,37,1.486,38,0.018,39,1.355,40,0.968,41,1.069,43,1.874,46,2.007,68,0.708,72,0.476,84,3.731,104,1.371,115,0.01,116,0.013,117,0.01,118,1.874,120,3.054,128,1.442,133,2.661,136,2.274,152,3.401,259,1.442,296,2.661,319,2.661,429,2.048,519,3.751,540,4.355,591,6.289,592,4.358,593,5.661,594,5.661,595,5.661,596,4.358,597,5.661,598,4.358,599,4.358,600,4.358,601,5.661,602,5.661,603,3.968,604,4.358,605,4.358,606,4.358,607,5.661,608,4.358,609,4.358,610,4.358,611,4.358,612,4.358]],["title/interfaces/UserInfo.html",[73,1.371,427,1.933]],["body/interfaces/UserInfo.html",[0,0.143,3,0.746,4,0.43,5,0.389,9,0.87,10,1.614,11,0.79,12,0.79,14,0.655,15,0.719,18,0.998,21,0.473,28,2.032,30,0.389,33,2.064,34,0.962,38,0.018,40,0.389,41,0.43,44,0.753,46,1.613,51,1.176,54,1.501,62,1.559,63,0.79,64,0.829,68,0.37,72,0.688,73,1.69,74,1.501,75,0.962,76,0.962,77,0.962,82,0.914,83,1.38,93,1.147,104,0.496,110,0.571,115,0.005,116,0.008,117,0.005,118,1.176,128,0.753,136,1.982,163,1.293,164,1.559,185,1.014,191,0.545,192,0.79,198,0.962,200,1.427,206,0.545,219,1.257,220,0.914,245,0.686,250,0.571,251,0.85,259,0.753,262,0.962,271,1.095,277,0.87,279,1.712,290,1.014,291,1.132,292,0.409,293,1.07,294,1.582,295,1.501,296,1.07,297,1.132,298,1.132,299,1.132,300,0.962,301,1.132,303,1.176,304,2.32,305,1.96,306,1.712,307,1.132,308,1.358,309,1.132,310,1.014,311,1.132,312,1.582,313,1.582,314,1.014,315,1.132,316,1.471,317,1.767,318,1.132,319,1.07,320,1.07,321,1.132,322,1.132,323,0.686,325,0.79,326,1.014,327,1.132,328,1.767,329,0.79,331,1.07,332,2.085,333,1.501,334,0.962,335,0.962,336,1.07,337,0.962,338,1.132,339,2.172,340,1.07,341,1.132,342,1.132,345,1.501,346,1.132,347,0.79,348,1.07,349,1.132,350,1.945,351,1.59,352,1.501,354,1.014,355,1.67,358,1.132,359,0.914,360,1.132,361,1.014,362,0.962,363,1.132,364,1.132,365,1.132,366,1.132,367,1.014,368,1.132,370,0.962,371,1.132,372,2.515,373,3.262,374,0.962,375,0.829,376,1.767,377,1.014,378,0.829,379,0.962,380,1.014,381,1.07,382,1.014,383,1.132,384,2.661,385,1.132,386,1.132,387,1.132,388,1.132,389,1.132,390,0.962,391,1.132,392,0.753,393,0.914,394,0.962,395,0.962,396,1.07,397,1.07,398,1.767,399,1.767,400,1.767,401,1.07,402,1.132,403,1.132,404,1.132,405,2.82,406,0.962,407,0.719,408,1.132,409,1.07,410,1.132,411,1.132,412,1.132,413,1.767,414,2.172,415,1.846,416,2.172,417,2.085,418,2.053,419,1.132,420,1.07,421,1.132,422,1.132,423,1.014,424,0.719,425,1.071,426,1.767,427,1.582,428,2.454,429,1.67,430,0.719,431,0.753,432,0.719,433,1.07,434,0.829,435,1.132,436,1.132,437,1.132,438,1.132,439,1.132,440,1.132,441,1.132,442,1.132,443,1.132,444,1.132,445,1.132,446,1.132,447,1.132,448,1.132,449,1.132,450,1.132,451,1.132,452,1.132,453,1.132,454,1.132,455,1.132,456,1.132,457,1.132,458,1.132,459,1.132,460,1.132,461,1.132,462,1.132,586,1.368,613,2.277,614,2.277]],["title/classes/ValidationHandler.html",[0,0.116,12,1.506]],["body/classes/ValidationHandler.html",[0,0.121,1,2.201,2,0.947,3,0.537,4,0.593,5,0.537,6,2.797,7,3.715,8,1.477,9,1.2,10,1.772,11,1.09,12,2.012,13,2.201,14,1.302,15,1.429,16,3.425,17,1.764,18,1.033,19,2.201,20,2.03,21,0.653,22,1.647,23,3.48,25,2.03,26,3.425,27,2.03,28,1.681,29,3.747,30,0.773,32,2.416,33,1.93,34,1.912,35,1.477,36,0.904,37,1.187,38,0.018,39,1.269,40,0.773,41,0.854,42,2.03,43,1.497,44,2.235,45,2.416,46,1.749,48,2.416,49,4.078,50,2.416,51,2.183,52,2.416,53,2.416,54,1.327,55,2.03,56,2.416,57,4.291,59,4.486,60,4.307,61,3.715,62,1.674,63,1.839,65,2.923,67,3.425,68,0.51,69,2.201,70,2.201,71,2.416,72,0.579,73,1.674,74,1.327,75,1.327,76,1.327,77,1.327,78,1.562,79,2.416,80,3.48,81,3.48,82,1.817,83,1.429,84,3.378,85,2.923,86,3.48,87,2.416,88,2.416,89,2.03,90,2.416,91,2.416,92,2.416,93,0.825,94,2.416,95,2.416,96,2.416,97,2.201,98,4.461,99,2.416,100,4.461,101,2.416,102,2.416,103,2.416,104,0.986,105,4.078,106,2.416,107,2.416,108,2.416,109,2.416,110,0.787,111,2.416,112,2.03,113,2.416,114,2.416,115,0.007,116,0.01,117,0.007,126,2.704,615,3.141]],["title/interfaces/ValidationParams.html",[57,2.607,73,1.371]],["body/interfaces/ValidationParams.html",[0,0.123,1,2.263,3,0.552,4,0.609,5,0.552,6,1.703,7,2.263,8,1.518,10,1.667,11,1.12,12,1.868,13,2.263,14,1.328,15,1.457,16,2.086,17,1.814,18,1.054,19,2.263,20,2.086,21,0.671,23,3.549,25,2.086,26,2.086,27,2.086,28,1.844,29,3.795,32,2.484,33,1.96,34,1.95,35,1.518,36,0.929,38,0.018,39,0.773,40,1.104,42,2.086,44,2.138,45,2.484,46,2.118,48,2.484,49,4.141,50,2.484,51,2.056,52,2.484,53,2.484,54,1.364,55,2.086,56,2.484,57,3.995,59,4.116,60,4.116,61,3.233,62,1.457,63,1.601,65,2.086,67,2.981,68,0.524,69,2.263,70,2.263,71,2.484,72,0.588,73,1.457,74,2.482,75,2.482,76,2.482,77,2.482,78,2.921,79,4.518,80,2.484,81,2.484,82,1.297,83,1.02,84,2.434,85,2.086,86,3.549,87,2.484,88,2.484,89,2.086,90,2.484,91,2.484,92,2.484,93,0.848,94,2.484,95,2.484,96,2.484,97,2.263,98,4.518,99,2.484,100,4.518,101,2.484,102,2.484,103,2.484,104,1.006,105,4.141,106,2.484,107,2.484,108,2.484,109,2.484,110,0.809,111,2.484,112,2.086,113,2.484,114,2.484,115,0.007,116,0.011,117,0.007,295,1.95,343,2.981,586,1.939]],["title/classes/WebHttpUrlEncodingCodec.html",[0,0.116,616,3.737]],["body/classes/WebHttpUrlEncodingCodec.html",[0,0.115,2,1.297,3,0.735,4,0.812,5,0.735,9,1.644,14,1.616,21,0.894,22,2.043,28,2.022,30,1.132,37,1.739,38,0.018,39,1.585,40,1.132,41,1.25,43,2.192,68,0.698,72,0.47,104,1.444,115,0.01,116,0.013,117,0.01,134,3.934,180,2.269,303,1.858,305,1.858,616,4.832,617,4.3,618,5.613,619,5.613,620,5.613,621,6.249,622,5.613,623,5.613,624,5.613,625,5.613,626,5.613,627,4.3,628,5.613,629,5.613,630,4.3,631,5.613,632,5.613,633,4.3,634,5.613,635,4.3,636,4.3,637,4.3,638,4.3,639,4.3]],["title/changelog.html",[640,2.266,641,2.437,642,3.772]],["body/changelog.html",[36,1.469,38,0.014,115,0.012,116,0.014,117,0.012,247,1.976,249,2.765,265,3.96,267,2.866,333,2.643,516,4.812,643,5.385,644,5.103,645,4.393,646,2.866,647,6.07,648,5.823,649,3.925,650,4.393,651,5.203,652,6.228,653,5.385,654,5.103,655,3.757,656,4.393,657,5.103,658,3.757,659,5.103,660,3.925,661,4.393,662,3.925,663,4.393,664,3.065,665,6.255,666,5.103,667,5.103,668,5.103,669,5.103,670,2.692,671,5.103,672,5.103]],["title/dependencies.html",[673,3.772,674,3.956]],["body/dependencies.html",[38,0.018,70,3.451,78,2.449,115,0.011,116,0.014,117,0.011,128,1.63,134,3.451,182,4.288,249,2.338,250,1.534,251,1.464,538,4.239,674,3.788,675,4.924,676,7.542,677,4.924,678,4.924,679,4.924,680,6.119,681,5.268,682,4.924,683,4.924,684,4.924,685,4.924,686,4.924,687,4.924,688,4.924,689,4.239,690,4.924,691,3.451,692,4.924,693,4.239,694,4.924,695,4.924,696,4.924,697,4.924,698,4.924,699,4.924,700,4.924,701,4.924,702,4.924,703,4.924,704,4.924,705,4.924,706,4.924]],["title/miscellaneous/functions.html",[707,2.266,708,4.427]],["body/miscellaneous/functions.html",[21,1.137,28,1.436,37,1.713,38,0.017,39,1.562,41,1.232,43,1.811,69,4.572,115,0.013,116,0.015,117,0.013,546,6.002,547,6.002,707,3.287,708,4.71,709,6.524,710,6.524,711,6.971,712,6.524,713,5.472,714,5.472,715,6.524,716,5.472,717,5.472]],["title/index.html",[21,0.784,640,2.266,641,2.437]],["body/index.html",[0,0.051,4,0.363,5,0.329,11,0.668,15,0.608,17,1.746,18,1.362,30,0.329,36,1.419,38,0.018,51,0.637,67,1.244,68,0.856,72,0.34,78,0.957,83,0.608,93,1.027,97,1.349,110,0.483,112,1.244,115,0.004,116,0.007,117,0.007,133,0.905,155,1.657,180,1.016,191,1.427,194,2.768,206,0.744,212,2.009,219,1.597,238,2.349,245,0.937,246,1.481,247,1.977,249,2.68,250,1.599,251,1.498,261,0.857,264,1.349,265,3.115,266,3.454,267,2.197,268,1.349,270,2.344,271,1.705,272,2.392,273,3.791,275,1.244,276,0.905,277,0.736,278,2.179,279,2.214,280,2.179,281,1.481,282,2.009,283,0.381,284,2.392,285,2.392,286,2.392,287,1.481,303,1.029,305,1.029,306,0.668,313,0.857,316,1.075,323,0.937,325,0.668,329,1.357,334,1.314,335,0.813,337,1.314,343,1.244,347,1.829,354,0.857,356,0.905,359,1.249,370,0.813,374,1.897,379,1.314,392,1.029,393,0.773,406,0.813,407,0.982,415,1.653,417,1.314,418,1.461,424,1.235,425,1.589,427,0.857,430,1.235,431,1.029,432,1.235,434,1.132,471,2.677,505,0.957,525,1.244,536,2.392,549,1.481,550,1.349,559,1.349,562,1.349,568,2.179,569,1.349,643,1.657,645,2.677,646,2.197,647,2.677,650,1.657,651,1.481,652,3.367,655,1.868,656,2.677,658,1.156,661,3.367,662,3.009,663,2.677,664,1.156,670,1.016,691,1.349,718,1.925,719,1.925,720,1.925,721,2.451,722,3.109,723,1.925,724,1.925,725,3.109,726,1.925,727,3.109,728,1.925,729,1.925,730,2.901,731,1.925,732,3.791,733,3.911,734,1.925,735,1.657,736,1.481,737,1.925,738,1.925,739,1.925,740,1.925,741,1.925,742,1.925,743,1.925,744,1.925,745,1.925,746,3.109,747,3.911,748,1.925,749,1.657,750,3.109,751,1.925,752,1.925,753,1.925,754,2.901,755,1.925,756,1.925,757,1.925,758,3.109,759,1.925,760,1.925,761,3.109,762,1.925,763,1.925,764,1.925,765,3.109,766,1.244,767,1.925,768,1.925,769,1.925,770,1.925,771,1.925,772,1.925,773,1.925,774,3.911,775,1.925,776,1.925,777,3.109,778,1.925,779,1.925,780,1.657,781,1.925,782,1.657,783,1.481,784,1.925,785,1.925,786,1.925,787,1.925,788,1.925,789,1.925,790,1.925,791,4.537,792,1.925,793,1.925,794,1.481,795,1.925,796,1.925,797,1.925,798,1.925,799,1.657,800,1.925,801,1.925,802,4.928,803,1.925,804,1.481,805,3.109,806,2.179,807,3.109,808,1.546,809,2.392,810,1.925,811,1.349,812,1.244,813,1.925,814,1.349,815,1.156,816,1.481,817,3.109,818,1.657,819,2.009,820,1.657,821,1.925,822,3.109,823,1.925,824,2.392,825,1.925,826,1.657,827,1.925,828,1.925,829,2.392,830,2.009,831,1.657,832,1.925,833,1.925,834,1.657,835,1.925,836,1.925,837,1.925,838,2.369,839,1.925,840,3.911,841,1.925,842,1.925,843,1.925,844,1.349,845,1.925,846,1.925,847,2.677,848,2.392,849,1.868,850,1.481,851,1.657,852,1.481,853,1.925,854,2.009,855,1.925,856,1.657,857,1.925,858,0.857,859,1.349,860,3.109,861,2.009,862,1.925,863,1.925,864,1.571,865,1.244,866,1.081,867,1.081,868,1.081,869,1.349,870,2.009,871,1.925,872,1.657,873,2.677,874,3.109,875,1.481,876,2.677,877,1.481,878,1.925,879,1.925,880,1.925,881,1.349,882,1.657,883,1.081,884,1.64,885,1.156,886,1.925,887,1.925,888,2.392,889,2.527,890,1.244,891,1.016,892,1.016,893,1.925,894,1.925,895,1.925,896,1.925,897,3.109,898,1.657,899,1.925,900,1.925,901,1.925,902,3.109,903,1.349,904,1.925,905,1.925,906,1.657,907,1.925,908,1.925,909,2.009,910,1.349,911,1.925,912,1.925,913,1.925,914,1.657,915,2.179,916,1.349,917,1.481,918,1.925,919,1.925,920,1.349,921,1.349,922,1.925,923,1.657,924,1.925,925,2.677,926,1.657,927,1.657,928,1.081,929,1.657,930,2.527,931,1.925,932,2.392,933,1.481,934,3.109,935,1.925,936,1.925,937,2.009,938,1.925,939,1.657,940,1.657,941,1.925,942,1.657,943,1.244,944,1.481,945,1.925,946,1.925,947,1.925,948,1.925,949,1.244,950,1.925,951,1.925,952,1.016,953,1.925,954,1.349,955,1.925,956,3.911,957,1.925,958,1.657,959,1.925,960,1.481,961,1.925,962,1.481,963,1.925,964,1.925,965,1.925,966,1.925]],["title/license.html",[640,2.266,641,2.437,967,3.772]],["body/license.html",[18,1.368,38,0.014,115,0.011,116,0.014,117,0.011,181,4.096,323,1.434,348,2.236,658,2.858,670,2.51,732,3.66,736,3.66,783,3.66,942,4.096,968,6.554,969,4.758,970,4.758,971,4.758,972,4.758,973,5.989,974,4.758,975,4.758,976,4.758,977,4.758,978,4.758,979,5.989,980,7.497,981,4.758,982,4.758,983,4.758,984,4.235,985,4.758,986,5.989,987,4.096,988,4.758,989,4.758,990,4.758,991,4.758,992,4.758,993,4.758,994,4.758,995,5.989,996,4.758,997,4.758,998,4.758,999,4.758,1000,4.758,1001,5.989,1002,5.989,1003,4.758,1004,4.758,1005,4.758,1006,4.758,1007,4.758,1008,4.758,1009,4.758,1010,4.758,1011,4.758,1012,4.758,1013,4.758,1014,4.096,1015,4.758,1016,2.858,1017,4.758,1018,4.758,1019,4.758,1020,4.758,1021,4.758,1022,4.758,1023,4.758,1024,4.096,1025,4.758,1026,4.758,1027,4.758,1028,4.758,1029,4.758]],["title/modules.html",[526,4.344]],["body/modules.html",[38,0.016,115,0.014,116,0.016,117,0.014,525,3.881,526,4.62,954,4.209,1030,6.006,1031,6.006]],["title/overview.html",[1032,4.861]],["body/overview.html",[2,1.732,38,0.016,115,0.013,116,0.016,117,0.013,120,4.025,524,5.164,550,4.025,551,4.944,552,3.711,586,3.45,603,4.025,653,4.944,658,3.45,674,4.418,691,4.025,1032,4.944,1033,5.743,1034,6.713,1035,5.743,1036,5.743,1037,5.743]],["title/miscellaneous/typealiases.html",[707,2.266,1038,5.142]],["body/miscellaneous/typealiases.html",[21,1.089,38,0.018,40,0.895,115,0.012,116,0.015,117,0.012,224,2.943,480,3.385,483,4.107,486,3.147,487,3.385,488,3.147,489,3.385,490,3.385,491,3.147,492,3.385,493,3.385,494,3.385,495,3.385,496,3.385,497,3.385,498,3.147,499,3.147,500,3.385,501,3.385,502,3.385,503,3.147,504,3.147,505,2.605,506,3.385,507,3.385,707,3.147,1039,5.239,1040,5.239]],["title/miscellaneous/variables.html",[707,2.266,1041,4.427]],["body/miscellaneous/variables.html",[6,2.592,8,2.872,21,1.021,35,2.872,36,1.414,38,0.017,68,0.992,78,3.038,110,1.231,115,0.011,116,0.014,117,0.014,238,3.67,239,4.229,240,3.038,245,1.481,246,3.779,247,1.551,249,2.541,250,1.667,251,1.592,260,4.282,261,2.961,262,2.076,263,4.229,264,3.442,265,2.759,266,3.779,267,2.759,268,3.442,269,3.442,270,2.076,271,1.532,272,3.779,273,4.7,274,4.229,275,3.174,276,2.309,277,1.877,278,3.442,279,1.704,280,3.442,281,3.779,282,3.174,283,0.973,284,3.779,285,3.779,286,3.779,287,3.779,356,2.872,707,2.951,1041,4.229,1042,6.109,1043,4.912,1044,4.912,1045,4.912,1046,4.912]],["title/additional-documentation/getting-started.html",[283,0.661,292,0.599,640,2.003,641,2.155]],["body/additional-documentation/getting-started.html",[38,0.016,115,0.014,116,0.016,117,0.014,261,2.642,640,4.11,641,4.421,670,3.131,903,4.158,1047,5.108,1048,5.933]],["title/additional-documentation/preserving-state-(like-the-requested-url).html",[206,0.648,283,0.536,292,0.486,332,1.144,1049,2.331,1050,1.749]],["body/additional-documentation/preserving-state-(like-the-requested-url).html",[3,0.967,38,0.017,41,1.068,115,0.013,116,0.015,117,0.013,206,1.593,262,2.392,300,2.392,310,2.521,332,2.988,864,2.273,920,3.967,1049,4.873,1050,4.301,1051,4.873,1052,5.66,1053,5.66,1054,3.967,1055,5.66,1056,5.66]],["title/additional-documentation/refreshing-a-token.html",[219,0.96,283,0.661,292,0.599,812,2.155]],["body/additional-documentation/refreshing-a-token.html",[15,1.855,17,2.591,35,2.168,36,1.86,38,0.014,115,0.011,116,0.014,117,0.011,152,2.771,164,1.457,186,3.971,194,2.591,219,2.022,245,1.391,261,2.615,270,2.482,271,1.761,276,2.168,279,2.242,323,1.391,329,2.36,334,1.949,335,1.949,337,1.949,351,1.679,356,2.168,423,2.054,424,1.457,432,1.457,603,3.233,794,3.548,811,3.233,812,3.795,814,4.528,815,3.881,816,4.517,818,3.971,854,2.981,856,3.971,876,3.971,884,2.434,888,3.548,915,3.233,987,3.971,1016,3.881,1057,3.233,1058,3.971,1059,3.971,1060,3.548,1061,4.613,1062,4.613,1063,3.971,1064,5.872,1065,3.971,1066,4.613,1067,4.613,1068,4.613,1069,4.517,1070,4.613,1071,3.548,1072,3.971,1073,5.056,1074,3.971,1075,3.971,1076,5.056,1077,5.056,1078,3.971,1079,3.971,1080,3.971,1081,3.548,1082,3.971,1083,3.971,1084,3.233,1085,3.971,1086,3.971,1087,3.971,1088,3.971]],["title/additional-documentation/silent-refresh.html",[283,0.661,292,0.599,308,1.274,329,1.157]],["body/additional-documentation/silent-refresh.html",[3,0.515,5,0.884,15,1.386,17,1.691,18,1.182,30,0.515,35,2.062,36,1.816,38,0.018,46,0.908,62,0.951,68,0.489,72,0.329,83,1.909,93,1.152,110,1.1,115,0.007,116,0.01,117,0.007,133,1.416,152,1.809,164,1.635,173,2.316,188,2.592,191,1.239,192,1.522,206,1.239,219,1.816,220,1.209,245,0.908,249,1.677,250,0.755,251,1.05,261,1.954,265,1.691,270,2.666,271,1.756,275,2.835,276,1.416,279,2.26,308,2.489,314,1.341,316,1.563,323,1.56,325,1.796,326,1.954,329,2.362,347,1.796,351,2.07,356,2.433,375,1.096,378,1.096,379,1.273,392,0.997,407,1.386,423,1.341,424,1.386,425,1.714,430,0.951,434,1.096,534,1.691,567,1.946,603,2.11,640,1.809,646,1.691,648,2.592,664,1.809,721,2.182,791,2.592,794,2.316,808,1.498,811,3.075,812,3.344,814,3.627,815,2.635,816,3.375,838,3,844,3.075,858,1.341,859,2.11,861,3.344,864,1.209,865,1.946,866,2.907,867,1.691,868,1.691,869,2.11,870,1.946,875,2.316,877,2.316,883,1.691,884,1.589,885,1.809,889,1.946,890,1.946,891,1.589,892,1.589,915,2.11,916,2.11,923,3.777,928,1.691,933,2.316,943,1.946,952,1.589,958,2.592,960,2.316,962,2.316,984,1.946,1016,3.109,1059,2.592,1069,3.375,1071,2.316,1072,2.592,1073,3.777,1074,2.592,1075,2.592,1076,3.777,1077,3.777,1078,2.592,1079,2.592,1080,2.592,1081,2.316,1082,2.592,1083,2.592,1084,2.11,1085,2.592,1086,2.592,1087,2.592,1088,2.592,1089,4.387,1090,2.316,1091,2.316,1092,3.011,1093,3.011,1094,3.011,1095,3.011,1096,3.011,1097,3.011,1098,4.387,1099,5.176,1100,2.11,1101,2.592,1102,3.011,1103,3.011,1104,3.011,1105,3.011,1106,3.011,1107,3.777,1108,3.011,1109,1.691,1110,1.946,1111,3.011,1112,3.011,1113,2.11,1114,2.11,1115,1.691,1116,3.011,1117,3.011,1118,3.011,1119,2.592,1120,2.592,1121,3.375,1122,3.011,1123,3.011,1124,3.011,1125,3.011,1126,3.011,1127,2.592,1128,3.011,1129,3.011,1130,3.011,1131,3.011,1132,2.592,1133,3.011,1134,3.011,1135,2.316,1136,4.387,1137,3.011,1138,3.011,1139,3.011,1140,3.011,1141,3.011,1142,3.011,1143,2.592,1144,3.011,1145,3.011,1146,3.011,1147,3.011,1148,3.011,1149,3.011,1150,3.011]],["title/additional-documentation/working-with-httpinterceptors.html",[283,0.661,292,0.599,1151,3.335,1152,3.335]],["body/additional-documentation/working-with-httpinterceptors.html",[0,0.15,10,0.874,14,1.402,18,1.113,28,0.915,38,0.018,41,0.919,55,3.147,62,1.101,63,1.69,68,1.104,72,0.532,84,1.839,93,1.279,104,1.482,115,0.008,116,0.011,117,0.008,118,1.612,128,1.154,156,2.443,157,4.832,161,1.734,163,2.043,164,1.538,165,3.001,166,3.841,167,3.001,168,2.925,170,3.001,171,3.001,172,4.193,173,2.681,174,4.193,176,3.001,177,3.627,178,3.001,179,4.832,180,1.839,190,4.318,191,1.343,192,2.219,193,3.147,194,1.958,195,2.681,197,3.413,198,2.568,199,3.001,200,1.4,203,3.001,204,3.001,205,3.001,206,0.834,207,3.001,208,3.001,209,3.001,210,3.001,211,5.232,212,3.927,213,3.001,216,3.001,219,1.616,233,3.001,234,4.193,236,3.001,247,1.101,249,1.332,250,0.874,251,0.834,277,1.332,303,1.612,316,1.339,323,1.051,337,1.473,356,2.289,375,1.269,378,1.269,380,1.552,542,2.252,559,2.443,562,3.413,568,3.413,569,2.443,573,2.681,574,3.746,782,3.001,783,2.681,848,2.681,877,2.681,881,2.443,916,2.443,925,4.193,926,3.001,927,3.001,928,1.958,929,3.001,1065,3.001,1119,3.001,1153,3.486,1154,3.001,1155,3.486,1156,3.486,1157,3.001,1158,3.001,1159,3.486,1160,3.486,1161,3.486,1162,3.486,1163,3.486,1164,3.486,1165,3.486,1166,3.486,1167,2.094,1168,3.486,1169,4.193,1170,2.443,1171,2.443,1172,3.486,1173,3.486,1174,3.486,1175,3.486,1176,3.486,1177,3.486,1178,3.486,1179,3.486,1180,3.001,1181,3.486,1182,3.486,1183,3.486,1184,2.681,1185,3.486,1186,3.486,1187,3.486,1188,3.486,1189,3.746,1190,3.486,1191,3.486,1192,3.486,1193,3.486]],["title/additional-documentation/callback-after-login.html",[283,0.661,292,0.599,864,1.339,1194,2.565]],["body/additional-documentation/callback-after-login.html",[38,0.018,51,2.152,62,1.719,63,1.888,115,0.013,116,0.015,117,0.013,300,2.748,345,2.3,355,2.558,361,2.896,379,2.3,766,3.516,864,2.612,910,3.813,928,3.056,1014,4.684,1050,3.516,1054,3.813,1127,4.684,1194,5.002,1195,5.441,1196,5.441,1197,5.441,1198,5.441,1199,5.441,1200,5.441]],["title/additional-documentation/popup-based-login.html",[283,0.592,292,0.537,312,1.331,864,1.2,1201,2.299]],["body/additional-documentation/popup-based-login.html",[18,1.5,38,0.017,115,0.013,116,0.015,117,0.013,247,1.748,261,2.464,267,3.108,276,2.601,306,1.92,308,2.51,312,2.925,329,1.92,374,2.776,396,2.601,425,1.668,735,4.763,754,3.575,844,3.878,852,4.256,858,2.464,898,4.763,1090,4.256,1167,3.324,1202,4.763,1203,4.763,1204,5.533,1205,4.763,1206,5.533,1207,5.533,1208,5.533]],["title/additional-documentation/custom-query-parameters.html",[37,0.785,283,0.592,292,0.537,303,0.989,367,1.331]],["body/additional-documentation/custom-query-parameters.html",[33,2.084,37,1.503,38,0.017,115,0.013,116,0.016,117,0.013,270,2.42,271,1.436,303,2.218,316,1.574,351,2.084,367,2.55,1209,5.726,1210,4.93,1211,5.726,1212,5.726,1213,5.726,1214,5.726,1215,5.726,1216,5.726,1217,5.726]],["title/additional-documentation/events.html",[283,0.747,292,0.678,352,1.594]],["body/additional-documentation/events.html",[5,0.724,18,0.968,28,1.112,36,1.219,38,0.018,62,1.338,68,0.688,78,2.107,83,1.338,115,0.01,116,0.013,117,0.01,177,2.737,192,1.47,197,3.895,219,1.219,224,2.379,247,1.755,249,1.619,250,1.393,251,1.014,265,2.379,270,1.79,271,1.062,293,1.991,294,1.886,308,2.124,329,2.152,332,2.349,333,1.79,340,2.612,352,2.966,354,3.045,362,1.79,377,1.886,430,1.338,479,3.338,486,2.544,488,2.544,491,2.544,498,2.544,499,2.544,503,2.544,516,3.258,646,3.122,649,3.258,660,3.258,754,2.737,815,2.544,819,2.737,921,2.968,928,2.379,930,3.591,949,3.591,954,2.968,1016,2.544,1050,3.591,1063,4.784,1121,3.258,1154,3.646,1201,3.258,1218,4.236,1219,4.236,1220,4.236,1221,3.646,1222,4.236,1223,4.236,1224,3.646,1225,3.646,1226,4.236,1227,4.236,1228,4.236,1229,4.236,1230,4.236,1231,3.646,1232,4.236,1233,4.236,1234,4.236,1235,4.236,1236,4.236,1237,4.236,1238,5.558,1239,7.152,1240,5.558,1241,4.236,1242,4.236,1243,4.236,1244,4.236,1245,3.646,1246,4.236,1247,4.236,1248,3.646,1249,5.558,1250,5.558,1251,4.236,1252,4.236,1253,4.236,1254,3.258,1255,2.968,1256,4.236,1257,4.236,1258,4.236]],["title/additional-documentation/routing-with-the-hashstrategy.html",[283,0.661,292,0.599,937,2.155,944,2.565]],["body/additional-documentation/routing-with-the-hashstrategy.html",[13,3.521,18,1.148,19,4.342,33,1.829,36,1.784,38,0.017,62,1.587,72,0.549,83,1.587,93,1.319,115,0.012,116,0.014,117,0.012,220,2.018,247,1.587,294,2.238,304,2.362,325,2.15,326,2.759,331,2.362,336,2.362,356,2.362,473,3.865,524,3.865,655,3.018,749,5.783,859,3.521,881,3.521,915,3.521,928,2.822,937,4.004,939,4.326,943,3.247,944,4.766,1100,3.521,1135,3.865,1143,4.326,1170,3.521,1259,3.865,1260,5.025,1261,5.025,1262,7.013,1263,6.718,1264,5.025,1265,5.025,1266,5.025,1267,5.025,1268,5.025,1269,5.025,1270,5.025,1271,5.025,1272,3.247,1273,5.025,1274,5.025,1275,3.865,1276,5.025]],["title/additional-documentation/adapt-id_token-validation.html",[51,0.989,240,1.486,283,0.592,292,0.537,1277,2.573]],["body/additional-documentation/adapt-id_token-validation.html",[11,1.7,12,2.305,30,0.837,38,0.018,51,2.019,59,3.434,60,3.434,61,3.434,62,1.927,67,3.942,68,0.796,73,1.548,78,2.437,82,1.968,84,2.585,110,1.228,115,0.011,116,0.014,117,0.011,238,3.99,240,3.034,245,1.839,247,1.548,249,1.873,250,1.228,251,1.173,254,3.166,277,2.331,351,2.22,370,2.071,377,2.182,378,1.784,381,2.867,392,1.622,393,1.968,397,2.303,431,1.622,432,1.548,552,3.166,554,4.218,754,3.166,858,2.182,933,3.769,1084,3.434,1184,3.769,1205,4.218,1259,3.769,1277,4.218,1278,4.9,1279,4.9,1280,4.9,1281,4.9,1282,4.218,1283,4.9,1284,4.218,1285,4.9,1286,4.218,1287,4.218,1288,4.9,1289,4.218,1290,4.9]],["title/additional-documentation/session-checks.html",[283,0.661,292,0.599,1254,2.565,1255,2.337]],["body/additional-documentation/session-checks.html",[30,0.763,38,0.018,68,0.725,72,0.488,83,1.411,93,1.173,115,0.01,116,0.013,117,0.01,133,2.1,223,3.436,247,1.817,249,1.707,250,1.12,251,1.069,261,1.989,264,3.13,265,2.509,276,2.1,303,1.478,305,1.478,308,1.707,316,1.228,320,2.1,351,1.626,352,1.887,370,1.887,417,1.887,424,1.411,425,1.347,430,1.817,434,1.626,504,3.455,505,2.221,655,2.683,658,2.683,721,3.165,806,3.13,808,2.861,811,3.13,819,3.717,838,2.357,844,3.13,852,3.436,854,2.886,861,4.112,865,2.886,866,3.231,867,2.509,870,2.886,891,2.357,892,2.357,920,3.13,952,2.357,1016,3.455,1024,3.845,1060,3.436,1084,3.13,1107,3.845,1109,2.509,1110,2.886,1115,2.509,1135,3.436,1180,3.845,1245,3.845,1254,5.476,1255,4.459,1287,3.845,1291,4.466,1292,4.466,1293,4.466,1294,4.466,1295,4.466,1296,5.752,1297,4.466,1298,4.466,1299,4.466,1300,4.466,1301,4.466,1302,4.466,1303,3.436,1304,5.752,1305,4.466,1306,5.752,1307,4.466,1308,4.466,1309,4.466,1310,4.466,1311,4.466]],["title/additional-documentation/server-side-rendering.html",[191,0.715,283,0.592,292,0.537,393,1.2,1312,2.573]],["body/additional-documentation/server-side-rendering.html",[38,0.015,115,0.013,116,0.015,117,0.013,191,1.69,243,4.859,247,1.783,305,1.868,393,2.837,730,3.647,1167,3.39,1171,3.956,1189,4.342,1203,4.859,1312,6.081,1313,5.644,1314,5.644,1315,5.644,1316,5.644,1317,4.859,1318,5.644,1319,5.644,1320,5.644,1321,5.644]],["title/additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html",[247,0.667,270,0.892,271,0.529,283,0.418,292,0.379,431,0.699,432,0.667,858,0.94,984,1.364]],["body/additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html",[0,0.113,11,1.473,15,1.341,18,1.271,38,0.018,40,0.725,72,0.464,110,1.064,115,0.01,116,0.013,117,0.01,164,1.758,191,1.332,206,1.577,247,1.341,261,1.89,270,1.794,271,1.064,276,1.995,282,2.743,283,0.841,295,1.794,306,1.473,316,1.53,323,1.28,325,1.473,347,2.155,362,1.794,375,1.545,390,1.794,392,1.405,394,1.794,395,1.794,407,1.961,415,1.794,424,1.341,425,1.872,430,1.341,431,1.842,432,1.758,505,2.111,534,3.126,567,2.743,658,2.55,670,2.24,721,2.768,730,2.743,808,2.111,824,3.265,826,3.654,829,3.265,830,2.743,838,3.276,849,2.55,858,2.478,864,2.494,866,2.384,867,2.384,868,2.384,883,2.384,884,2.24,889,3.596,891,2.24,892,2.24,903,2.975,910,2.975,917,3.265,930,2.743,932,3.265,949,2.743,952,2.24,984,2.743,1054,2.975,1057,2.975,1091,3.265,1100,2.975,1109,3.126,1115,2.384,1167,2.55,1272,2.743,1303,3.265,1322,3.654,1323,2.975,1324,2.975,1325,4.245,1326,4.245,1327,3.654,1328,3.265,1329,3.265,1330,3.654,1331,3.654,1332,3.654,1333,4.245,1334,4.245,1335,4.245,1336,3.654,1337,3.654,1338,3.654,1339,4.245]],["title/additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html",[36,0.608,240,1.05,283,0.418,292,0.379,407,0.667,431,0.699,432,0.667,808,1.05,1340,2.112]],["body/additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html",[18,0.959,30,0.944,38,0.018,64,1.529,68,0.682,72,0.459,93,1.102,115,0.01,116,0.013,117,0.01,133,1.974,191,1.005,206,1.632,220,2.22,240,3.072,245,1.266,247,1.326,249,1.605,250,1.053,251,1.323,310,1.87,314,1.87,316,1.698,325,1.457,347,1.457,356,1.974,378,1.529,392,1.39,407,2.154,417,1.775,424,1.745,425,1.266,430,1.951,431,2.317,432,2.211,434,2.248,552,3.571,664,2.523,670,2.216,721,2.748,736,3.231,754,2.714,808,3.264,819,3.991,838,3.259,861,3.991,864,1.687,865,2.714,866,2.359,867,2.359,868,2.359,869,2.943,870,2.714,883,2.359,884,2.216,885,2.523,890,2.714,891,2.216,892,2.216,940,3.615,952,2.216,1101,3.615,1109,2.359,1110,2.714,1113,2.943,1114,2.943,1115,2.359,1210,5.318,1231,3.615,1341,6.177,1342,4.2,1343,5.65,1344,4.2,1345,4.758,1346,4.2,1347,4.2,1348,4.2,1349,4.2,1350,4.2,1351,4.2,1352,4.2,1353,4.2,1354,4.2,1355,4.2,1356,4.2,1357,4.2,1358,3.615,1359,3.615,1360,4.2]],["title/additional-documentation/using-systemjs.html",[36,0.96,283,0.661,292,0.599,1361,2.871]],["body/additional-documentation/using-systemjs.html",[36,1.5,38,0.018,115,0.012,116,0.015,117,0.012,185,2.32,249,2.714,250,1.78,251,1.634,534,2.927,689,4.486,693,5.454,820,4.486,949,3.367,1121,4.009,1202,5.454,1361,5.877,1362,5.211,1363,5.211,1364,5.211,1365,5.211,1366,6.335,1367,6.335,1368,5.211,1369,5.211,1370,5.211,1371,5.211,1372,5.211,1373,5.211,1374,5.211,1375,5.211]],["title/additional-documentation/using-implicit-flow.html",[36,0.86,270,1.263,271,0.749,283,0.592,292,0.537]],["body/additional-documentation/using-implicit-flow.html",[0,0.133,30,0.616,36,1.436,38,0.018,39,1.194,46,1.088,68,1.114,72,0.625,84,3.016,104,1.087,110,0.904,115,0.008,116,0.012,117,0.008,128,1.651,133,1.696,164,2.168,191,0.863,194,2.026,198,1.524,206,1.194,238,2.996,245,1.088,247,1.139,249,2.357,250,1.623,251,1.602,259,1.194,268,2.528,269,2.528,270,2.416,271,1.623,275,3.223,279,1.252,282,2.331,283,0.988,306,1.252,316,0.992,323,1.088,325,1.252,334,1.524,335,1.524,347,1.252,350,1.606,392,1.194,406,2.108,407,1.575,424,1.575,425,1.088,430,1.139,434,1.313,505,1.794,534,2.026,566,2.775,655,2.167,664,2.167,721,2.48,806,2.528,808,1.794,830,2.331,834,3.105,838,3.016,849,2.167,850,2.775,858,2.221,861,3.985,864,2.757,865,2.331,866,2.026,867,2.026,868,2.026,870,2.331,875,2.775,883,2.026,884,1.903,885,2.167,890,2.331,891,1.903,892,1.903,909,2.331,914,3.105,943,2.331,952,1.903,1051,3.105,1069,2.775,1071,2.775,1109,2.026,1110,2.331,1113,2.528,1114,2.528,1115,2.026,1169,3.105,1171,2.528,1225,3.105,1259,2.775,1275,2.775,1284,3.105,1323,4.322,1324,3.495,1376,3.607,1377,3.607,1378,3.607,1379,3.607,1380,3.607,1381,3.607,1382,3.607,1383,4.987,1384,3.607,1385,3.607,1386,3.607,1387,3.607,1388,3.607,1389,3.105,1390,3.607,1391,3.607,1392,3.105,1393,3.105,1394,3.607,1395,4.987,1396,3.607,1397,3.607,1398,3.607]],["title/additional-documentation/using-password-flow.html",[36,0.86,271,0.749,283,0.592,292,0.537,809,2.299]],["body/additional-documentation/using-password-flow.html",[0,0.105,3,0.443,11,0.9,17,2.206,18,1.297,36,1.92,38,0.018,39,0.621,40,0.443,43,0.859,51,0.859,72,0.429,104,0.566,110,0.65,115,0.006,116,0.009,117,0.006,136,2.123,143,3.021,161,1.29,164,1.669,190,3.021,191,1.43,194,1.457,206,1.134,219,1.786,241,4.55,245,0.782,247,1.497,251,0.94,261,2.529,269,1.818,270,1.096,271,1.742,276,2.485,279,0.9,295,1.66,305,1.977,306,0.9,313,1.155,316,1.561,323,0.782,329,1.363,345,2.003,347,2.073,350,1.155,351,1.43,359,1.578,361,1.155,374,1.096,375,1.43,390,1.096,392,2.207,394,1.096,395,1.096,406,2.234,407,1.793,415,1.096,424,1.497,425,1.927,430,1.241,431,1.749,432,1.669,470,2.234,473,1.996,646,1.457,681,3.381,721,2.357,730,2.538,766,1.677,780,3.381,799,3.381,804,3.021,806,1.818,809,5.13,812,1.677,815,1.559,819,2.538,831,3.381,838,2.996,849,2.847,854,2.538,858,2.354,864,1.578,868,2.206,872,2.234,873,5.741,881,2.753,882,3.381,883,2.206,884,2.072,888,3.646,891,2.501,892,2.501,906,2.234,909,1.677,910,3.322,916,1.818,921,3.322,928,1.457,930,1.677,937,1.677,943,1.677,952,2.072,984,3.063,1050,1.677,1058,3.381,1081,1.996,1090,3.021,1100,1.818,1109,2.662,1115,2.206,1120,2.234,1132,2.234,1167,3.411,1171,1.818,1184,1.996,1201,1.996,1224,2.234,1272,1.677,1282,2.234,1286,2.234,1289,3.381,1303,3.021,1323,2.753,1324,2.753,1328,3.021,1329,3.021,1330,2.234,1331,2.234,1332,2.234,1392,3.381,1393,3.381,1399,2.595,1400,2.595,1401,2.595,1402,2.595,1403,2.595,1404,2.595,1405,2.595,1406,2.595,1407,2.595,1408,2.595,1409,2.234,1410,2.234,1411,2.595,1412,2.595,1413,2.595,1414,3.928,1415,2.595,1416,3.928,1417,3.928,1418,3.928,1419,3.928,1420,3.928,1421,3.928,1422,3.928,1423,2.234,1424,2.595,1425,2.595,1426,2.595,1427,2.595,1428,2.595,1429,2.595,1430,2.595,1431,2.595,1432,2.595,1433,3.928,1434,2.595,1435,2.595,1436,2.595,1437,2.595,1438,2.595,1439,3.928,1440,2.595,1441,3.928,1442,2.595,1443,2.595,1444,2.595,1445,2.595,1446,2.595,1447,2.595]],["title/additional-documentation/configure-custom-oauthstorage.html",[163,1.088,283,0.592,292,0.537,303,0.989,858,1.331]],["body/additional-documentation/configure-custom-oauthstorage.html",[0,0.155,18,1.33,36,1.676,38,0.018,68,0.945,72,0.636,104,0.991,115,0.011,116,0.013,117,0.011,163,2.463,180,2.4,247,1.437,249,1.738,250,1.14,251,1.089,267,2.555,303,2.124,306,1.578,343,2.939,356,2.138,359,2.338,375,1.656,378,1.656,390,2.859,394,3.023,395,2.46,525,2.939,536,3.499,549,3.499,550,3.188,552,2.939,553,3.916,660,3.499,662,4.937,670,2.4,691,3.188,732,3.499,808,3.192,814,3.188,847,5.011,848,3.499,849,3.496,850,3.499,851,5.011,858,2.026,859,4.498,954,3.188,960,4.477,962,3.499,1167,2.732,1170,3.188,1189,3.499,1448,4.549,1449,4.549,1450,4.549,1451,4.549,1452,4.549,1453,5.82,1454,4.549]],["title/additional-documentation/manually-skipping-login-form.html",[283,0.536,292,0.486,864,1.087,909,1.749,1272,1.749,1455,2.331]],["body/additional-documentation/manually-skipping-login-form.html",[15,1.414,18,1.316,36,1.289,38,0.018,44,1.482,83,1.819,104,1.388,110,1.122,115,0.01,116,0.013,117,0.01,191,1.071,206,1.071,219,1.658,223,3.444,267,2.514,271,1.122,278,3.137,283,0.887,290,2.565,300,1.892,306,1.553,323,1.35,333,1.892,359,1.798,380,1.993,407,1.414,425,1.35,646,2.514,655,2.689,721,2.226,766,2.893,804,3.444,824,3.444,830,2.893,854,2.893,864,1.798,885,2.689,909,2.893,920,3.137,921,3.137,930,2.893,1016,2.689,1170,3.137,1194,3.444,1221,3.854,1248,3.854,1255,3.137,1272,2.893,1275,3.444,1317,3.854,1389,3.854,1455,3.854,1456,4.476,1457,5.761,1458,4.476,1459,4.476,1460,4.476,1461,5.761,1462,4.476,1463,5.761,1464,4.476,1465,4.476,1466,4.476,1467,4.476,1468,4.476,1469,4.476,1470,4.476,1471,4.476,1472,4.476,1473,4.476,1474,4.476,1475,4.476,1476,4.476,1477,4.476,1478,4.476,1479,4.476]],["title/additional-documentation/original-config-api.html",[283,0.592,292,0.537,534,1.679,889,1.931,1057,2.094]],["body/additional-documentation/original-config-api.html",[0,0.106,15,1.254,18,0.907,30,0.679,35,1.867,38,0.018,39,0.95,72,0.434,110,0.995,112,2.566,115,0.009,116,0.012,117,0.009,161,1.975,164,1.682,191,1.438,206,1.438,219,1.143,240,2.988,245,1.197,247,1.254,250,0.995,251,0.95,261,1.768,276,1.867,280,2.783,283,0.787,295,1.678,316,1.464,323,1.605,325,1.378,345,1.678,347,2.084,362,1.678,375,1.938,392,1.314,407,1.897,424,1.254,425,1.935,430,1.254,431,2.124,432,2.027,434,1.445,534,3.605,567,2.566,646,2.23,649,3.055,651,3.055,664,2.385,670,2.095,721,1.975,730,3.441,766,2.566,808,1.975,815,2.385,829,3.055,830,2.566,838,3.17,849,3.198,858,1.768,864,2.413,866,2.23,867,2.23,868,2.23,869,2.783,883,2.23,884,2.095,885,2.385,889,4.148,890,2.566,891,2.095,892,2.095,903,2.783,917,3.055,932,3.055,937,2.566,949,2.566,952,2.095,1047,3.418,1054,2.783,1057,3.732,1060,3.055,1091,4.096,1109,2.23,1110,2.566,1113,2.783,1114,2.783,1115,2.23,1157,3.418,1158,3.418,1322,3.418,1323,2.783,1324,2.783,1327,3.418,1328,3.055,1329,3.055,1336,3.418,1337,3.418,1338,3.418,1343,4.584,1345,3.418,1358,3.418,1359,3.418,1409,3.418,1410,3.418,1423,3.418,1480,3.971,1481,3.971,1482,3.971,1483,3.971,1484,3.971,1485,3.971,1486,3.971,1487,3.971,1488,3.971,1489,3.971,1490,3.971]]],"invertedIndex":[["",{"_index":38,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["0",{"_index":152,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"injectables/UrlHelperService.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["0.10.2",{"_index":706,"title":{},"body":{"dependencies.html":{}}}],["0.33",{"_index":1086,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["0.35.0",{"_index":702,"title":{},"body":{"dependencies.html":{}}}],["0.5",{"_index":1083,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["1",{"_index":603,"title":{},"body":{"injectables/UrlHelperService.html":{},"overview.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["1.0",{"_index":1295,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["1.0.1",{"_index":700,"title":{},"body":{"dependencies.html":{}}}],["1.11.1",{"_index":704,"title":{},"body":{"dependencies.html":{}}}],["1.2.4",{"_index":686,"title":{},"body":{"dependencies.html":{}}}],["1.3.0",{"_index":690,"title":{},"body":{"dependencies.html":{}}}],["19",{"_index":1037,"title":{},"body":{"overview.html":{}}}],["1_0.html#tokenendpoint",{"_index":419,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["1_0.html#userinfo",{"_index":426,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["2",{"_index":97,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{}}}],["2.0",{"_index":856,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["2.1",{"_index":806,"title":{},"body":{"index.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["2/oidc",{"_index":945,"title":{},"body":{"index.html":{}}}],["20",{"_index":958,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{}}}],["20.000",{"_index":1149,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["2017",{"_index":970,"title":{},"body":{"license.html":{}}}],["3.1",{"_index":1153,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["3.3.7",{"_index":692,"title":{},"body":{"dependencies.html":{}}}],["4",{"_index":1036,"title":{},"body":{"overview.html":{}}}],["4.3",{"_index":770,"title":{},"body":{"index.html":{}}}],["4.x",{"_index":765,"title":{},"body":{"index.html":{}}}],["401",{"_index":1162,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["403",{"_index":1163,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["4202",{"_index":841,"title":{},"body":{"index.html":{}}}],["4202]/index.html",{"_index":842,"title":{},"body":{"index.html":{}}}],["4202]/silent",{"_index":843,"title":{},"body":{"index.html":{}}}],["4711",{"_index":1215,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["4th",{"_index":1114,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["5",{"_index":653,"title":{},"body":{"changelog.html":{},"overview.html":{}}}],["5.x",{"_index":656,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["6",{"_index":661,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["6.5.2",{"_index":697,"title":{},"body":{"dependencies.html":{}}}],["6.5.4",{"_index":695,"title":{},"body":{"dependencies.html":{}}}],["6.x",{"_index":659,"title":{},"body":{"changelog.html":{}}}],["7",{"_index":763,"title":{},"body":{"index.html":{}}}],["7.x",{"_index":764,"title":{},"body":{"index.html":{}}}],["75",{"_index":1074,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["8",{"_index":761,"title":{},"body":{"index.html":{}}}],["8.0.12",{"_index":694,"title":{},"body":{"dependencies.html":{}}}],["8.x",{"_index":762,"title":{},"body":{"index.html":{}}}],["9",{"_index":266,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["9.0.0",{"_index":688,"title":{},"body":{"dependencies.html":{}}}],["9.0.1",{"_index":687,"title":{},"body":{"dependencies.html":{}}}],["9.0.5",{"_index":676,"title":{},"body":{"dependencies.html":{}}}],["9.x",{"_index":760,"title":{},"body":{"index.html":{}}}],["9]{3",{"_index":108,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["_throw(err",{"_index":1175,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["a021627fd9d3the",{"_index":1318,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["above",{"_index":670,"title":{},"body":{"changelog.html":{},"index.html":{},"license.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["abstract",{"_index":10,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["abstraction",{"_index":129,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["abstractvalidationhandler",{"_index":1,"title":{"classes/AbstractValidationHandler.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["access",{"_index":921,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["access_token",{"_index":63,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{}}}],["accesstoken",{"_index":75,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["acr_values_supported",{"_index":446,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["action",{"_index":1024,"title":{},"body":{"license.html":{},"additional-documentation/session-checks.html":{}}}],["activate",{"_index":1304,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["activated",{"_index":1297,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["actual",{"_index":307,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["adapt",{"_index":1277,"title":{"additional-documentation/adapt-id_token-validation.html":{}},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["add",{"_index":960,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["adding",{"_index":1364,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["addition",{"_index":1301,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["additional",{"_index":292,"title":{"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["adhere",{"_index":1353,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["adjust",{"_index":1078,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["against",{"_index":61,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["alg",{"_index":49,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["alg.match(/^.s[0",{"_index":107,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["alg.substr(2",{"_index":114,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["algorithm",{"_index":29,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["algorithms",{"_index":131,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["aliases",{"_index":1039,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["alice/alice",{"_index":836,"title":{},"body":{"index.html":{}}}],["align",{"_index":853,"title":{},"body":{"index.html":{}}}],["allow",{"_index":1059,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["allowedurls",{"_index":568,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["allows",{"_index":618,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["already",{"_index":13,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["alternative",{"_index":1116,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["although",{"_index":1417,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["and/or",{"_index":993,"title":{},"body":{"license.html":{}}}],["angular",{"_index":249,"title":{},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["angular/animations",{"_index":675,"title":{},"body":{"dependencies.html":{}}}],["angular/common",{"_index":538,"title":{},"body":{"modules/OAuthModule.html":{},"dependencies.html":{}}}],["angular/common/http",{"_index":180,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["angular/compiler",{"_index":677,"title":{},"body":{"dependencies.html":{}}}],["angular/core",{"_index":128,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"dependencies.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["angular/elements",{"_index":678,"title":{},"body":{"dependencies.html":{}}}],["angular/forms",{"_index":679,"title":{},"body":{"dependencies.html":{}}}],["angular/platform",{"_index":680,"title":{},"body":{"dependencies.html":{}}}],["angular/router",{"_index":683,"title":{},"body":{"dependencies.html":{}}}],["another",{"_index":1100,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["anymore",{"_index":364,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["aot",{"_index":1452,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["api",{"_index":889,"title":{"additional-documentation/original-config-api.html":{}},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["app",{"_index":830,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["app.component.html",{"_index":1384,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["app/home.html",{"_index":1388,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["appcomponent",{"_index":849,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["applicable",{"_index":1252,"title":{},"body":{"additional-documentation/events.html":{}}}],["application",{"_index":275,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["applications",{"_index":284,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["appmodule",{"_index":851,"title":{},"body":{"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["approach",{"_index":1106,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["approutermodule",{"_index":1267,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["arising",{"_index":1027,"title":{},"body":{"license.html":{}}}],["array",{"_index":569,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["arraybuffer",{"_index":125,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["aspnetcore",{"_index":1320,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["asset",{"_index":1131,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["assets",{"_index":1134,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["associated",{"_index":981,"title":{},"body":{"license.html":{}}}],["asstring",{"_index":92,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["assumes",{"_index":828,"title":{},"body":{"index.html":{}}}],["async",{"_index":25,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["at_hash",{"_index":60,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["athash",{"_index":98,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["attacks",{"_index":338,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["auth",{"_index":347,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["auth.config",{"_index":1380,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["auth0",{"_index":966,"title":{},"body":{"index.html":{}}}],["auth_config",{"_index":1042,"title":{},"body":{"miscellaneous/variables.html":{}}}],["authcodeflowconfig",{"_index":862,"title":{},"body":{"index.html":{}}}],["authconfig",{"_index":861,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["authenticated",{"_index":1317,"title":{},"body":{"additional-documentation/server-side-rendering.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["authentication",{"_index":956,"title":{},"body":{"index.html":{}}}],["authorization_endpoint",{"_index":435,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["authors",{"_index":1017,"title":{},"body":{"license.html":{}}}],["authstorage",{"_index":170,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["automate",{"_index":922,"title":{},"body":{"index.html":{}}}],["automatically",{"_index":811,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{}}}],["available",{"_index":954,"title":{},"body":{"index.html":{},"modules.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["avoid",{"_index":336,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["await",{"_index":89,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["b",{"_index":1407,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["b64decodeunicode",{"_index":709,"title":{},"body":{"miscellaneous/functions.html":{}}}],["b64decodeunicode(str",{"_index":714,"title":{},"body":{"miscellaneous/functions.html":{}}}],["back",{"_index":1338,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["backend",{"_index":724,"title":{},"body":{"index.html":{}}}],["backwards",{"_index":1482,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["base",{"_index":1345,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["base64",{"_index":70,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"dependencies.html":{}}}],["base64urlencode",{"_index":69,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/functions.html":{}}}],["base64urlencode(leftmosthalf",{"_index":99,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["base64urlencode(str",{"_index":716,"title":{},"body":{"miscellaneous/functions.html":{}}}],["based",{"_index":1201,"title":{"additional-documentation/popup-based-login.html":{}},"body":{"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["bearer",{"_index":233,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["beaugrand",{"_index":1363,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["before",{"_index":815,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["beginning",{"_index":264,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/session-checks.html":{}}}],["below",{"_index":1415,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["best",{"_index":334,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["better",{"_index":1401,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["between",{"_index":1081,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["blog",{"_index":1313,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["bob/bob",{"_index":835,"title":{},"body":{"index.html":{}}}],["boolean",{"_index":200,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["bootstrap",{"_index":691,"title":{},"body":{"dependencies.html":{},"index.html":{},"overview.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["bootstrapping",{"_index":905,"title":{},"body":{"index.html":{}}}],["breaking",{"_index":739,"title":{},"body":{"index.html":{}}}],["browse",{"_index":1031,"title":{},"body":{"modules.html":{}}}],["browser",{"_index":681,"title":{},"body":{"dependencies.html":{},"additional-documentation/using-password-flow.html":{}}}],["buffer",{"_index":127,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["bug",{"_index":775,"title":{},"body":{"index.html":{}}}],["bugfixes",{"_index":779,"title":{},"body":{"index.html":{}}}],["build",{"_index":962,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["bundle",{"_index":286,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["bundling",{"_index":753,"title":{},"body":{"index.html":{}}}],["bytearray",{"_index":141,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["bytearray].map(value",{"_index":147,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["c",{"_index":969,"title":{},"body":{"license.html":{}}}],["calchash",{"_index":20,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["calchash(valuetohash",{"_index":27,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["calculates",{"_index":32,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["call",{"_index":1069,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["callback",{"_index":1194,"title":{"additional-documentation/callback-after-login.html":{}},"body":{"additional-documentation/callback-after-login.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["called",{"_index":345,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["calling",{"_index":920,"title":{},"body":{"index.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["calls",{"_index":563,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["care",{"_index":1065,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["carefully",{"_index":263,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{}}}],["carry",{"_index":1462,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["case",{"_index":928,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{}}}],["cases",{"_index":1286,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["catch",{"_index":938,"title":{},"body":{"index.html":{}}}],["catch(err",{"_index":1140,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["catcherror",{"_index":183,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["catcherror(_",{"_index":226,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["change",{"_index":643,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["changelog",{"_index":642,"title":{"changelog.html":{}},"body":{}}],["charactes",{"_index":619,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["charge",{"_index":976,"title":{},"body":{"license.html":{}}}],["check",{"_index":333,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"additional-documentation/events.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["check_session_iframe",{"_index":440,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["checks",{"_index":1255,"title":{"additional-documentation/session-checks.html":{}},"body":{"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["checkurl(url",{"_index":199,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["circular",{"_index":1179,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["cites",{"_index":1418,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["cjs",{"_index":1372,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["claim",{"_index":1020,"title":{},"body":{"license.html":{}}}],["claim_types_supported",{"_index":458,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["claims",{"_index":406,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["claims.given_name",{"_index":1393,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["claims_parameter_supported",{"_index":460,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["claims_supported",{"_index":459,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["claimsathash",{"_index":100,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["class",{"_index":0,"title":{"classes/AbstractValidationHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"classes/ReceivedTokens.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["classes",{"_index":2,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"classes/ReceivedTokens.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"overview.html":{}}}],["clear",{"_index":360,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["cli",{"_index":1129,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["cli.json",{"_index":1133,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["client",{"_index":392,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["clientid",{"_index":870,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["clientids",{"_index":837,"title":{},"body":{"index.html":{}}}],["code",{"_index":279,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["code_error",{"_index":494,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["codes",{"_index":1161,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["come",{"_index":1108,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["commands",{"_index":798,"title":{},"body":{"index.html":{}}}],["commonjs",{"_index":752,"title":{},"body":{"index.html":{}}}],["commonmodule",{"_index":537,"title":{},"body":{"modules/OAuthModule.html":{}}}],["communication",{"_index":1144,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["community",{"_index":735,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{}}}],["compat",{"_index":696,"title":{},"body":{"dependencies.html":{}}}],["compatibility",{"_index":1483,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["compatible",{"_index":376,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["compensates",{"_index":1095,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["compodoc/compodoc",{"_index":800,"title":{},"body":{"index.html":{}}}],["component",{"_index":1323,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["conditions",{"_index":1000,"title":{},"body":{"license.html":{}}}],["config",{"_index":534,"title":{"additional-documentation/original-config-api.html":{}},"body":{"modules/OAuthModule.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["configuration",{"_index":819,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["configure",{"_index":858,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["configured",{"_index":875,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["configuring",{"_index":1071,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["connect",{"_index":417,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["connection",{"_index":1028,"title":{},"body":{"license.html":{}}}],["consider",{"_index":666,"title":{},"body":{"changelog.html":{}}}],["consistent",{"_index":1358,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["console",{"_index":377,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["console.debug(\"logged",{"_index":1199,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["console.debug('given_name",{"_index":1441,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["console.debug('ok",{"_index":1447,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["console.debug('refresh",{"_index":1138,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["console.debug('state",{"_index":1055,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["console.debug('your",{"_index":1310,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["console.debug(context",{"_index":1200,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["console.error('actual",{"_index":103,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["console.error('exptected",{"_index":102,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["console.error('refresh",{"_index":1141,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["console.error(err",{"_index":289,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["console.error(event",{"_index":1235,"title":{},"body":{"additional-documentation/events.html":{}}}],["console.log(e));or",{"_index":1227,"title":{},"body":{"additional-documentation/events.html":{}}}],["console.warn(event",{"_index":1236,"title":{},"body":{"additional-documentation/events.html":{}}}],["const",{"_index":133,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/UrlHelperService.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["constructor",{"_index":161,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/JwksValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["constructor(authstorage",{"_index":162,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["constructor(private",{"_index":1324,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["constructor(readonly",{"_index":508,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["constructor(type",{"_index":482,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["contain",{"_index":774,"title":{},"body":{"index.html":{}}}],["contains",{"_index":1275,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["context",{"_index":1196,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["contract",{"_index":1025,"title":{},"body":{"license.html":{}}}],["contribute",{"_index":790,"title":{},"body":{"index.html":{}}}],["contribution",{"_index":1204,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["contributions",{"_index":781,"title":{},"body":{"index.html":{}}}],["control",{"_index":1458,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["controls",{"_index":365,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["convenience",{"_index":897,"title":{},"body":{"index.html":{}}}],["cookie",{"_index":1103,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["copied",{"_index":1126,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["copies",{"_index":995,"title":{},"body":{"license.html":{}}}],["copy",{"_index":979,"title":{},"body":{"license.html":{}}}],["copyright",{"_index":968,"title":{},"body":{"license.html":{}}}],["core",{"_index":418,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{}}}],["cought",{"_index":1174,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["create",{"_index":396,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/popup-based-login.html":{}}}],["createdefaultlogger",{"_index":546,"title":{},"body":{"modules/OAuthModule.html":{},"miscellaneous/functions.html":{}}}],["createdefaultstorage",{"_index":547,"title":{},"body":{"modules/OAuthModule.html":{},"miscellaneous/functions.html":{}}}],["creates",{"_index":1178,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["credentials",{"_index":1436,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["credits",{"_index":718,"title":{},"body":{"index.html":{}}}],["critical",{"_index":778,"title":{},"body":{"index.html":{}}}],["crypto",{"_index":130,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["current",{"_index":854,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["custom",{"_index":303,"title":{"additional-documentation/custom-query-parameters.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["customhashfragment",{"_index":296,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{}}}],["customize",{"_index":1448,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["customqueryparams",{"_index":1209,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["customredirecturi",{"_index":297,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["customurlvalidation",{"_index":570,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["cycle",{"_index":771,"title":{},"body":{"index.html":{}}}],["damages",{"_index":1021,"title":{},"body":{"license.html":{}}}],["data",{"_index":136,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-password-flow.html":{}}}],["deal",{"_index":983,"title":{},"body":{"license.html":{}}}],["dealings",{"_index":1029,"title":{},"body":{"license.html":{}}}],["debug",{"_index":515,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["debug(message",{"_index":383,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["debugging",{"_index":1223,"title":{},"body":{"additional-documentation/events.html":{}}}],["decide",{"_index":1290,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["declarations",{"_index":550,"title":{},"body":{"modules/OAuthModule.html":{},"index.html":{},"overview.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["decodekey",{"_index":622,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodekey(k",{"_index":626,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodeuricomponent(hash",{"_index":600,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["decodeuricomponent(k",{"_index":638,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodeuricomponent(v",{"_index":639,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodevalue",{"_index":623,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodevalue(v",{"_index":629,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["default",{"_index":356,"title":{},"body":{"classes/LoginOptions.html":{},"modules/OAuthModule.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["defaultextension",{"_index":1373,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["defaulthashhandler",{"_index":119,"title":{"injectables/DefaultHashHandler.html":{}},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"modules/OAuthModule.html":{}}}],["defaultoauthinterceptor",{"_index":156,"title":{"interceptors/DefaultOAuthInterceptor.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["defaults",{"_index":1111,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["define",{"_index":1130,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["defined",{"_index":30,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"classes/ReceivedTokens.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["defines",{"_index":339,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["deleted",{"_index":1300,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["demand",{"_index":780,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["demands",{"_index":872,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["demo",{"_index":952,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["demonstration",{"_index":1197,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["dependencies",{"_index":674,"title":{"dependencies.html":{}},"body":{"dependencies.html":{},"overview.html":{}}}],["dependency",{"_index":277,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["depending",{"_index":900,"title":{},"body":{"index.html":{}}}],["deprecated",{"_index":350,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["deps",{"_index":1367,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["described",{"_index":1090,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-password-flow.html":{}}}],["describes",{"_index":1480,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["description",{"_index":9,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{}}}],["design",{"_index":1444,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["details",{"_index":649,"title":{},"body":{"changelog.html":{},"additional-documentation/events.html":{},"additional-documentation/original-config-api.html":{}}}],["detects",{"_index":346,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["different",{"_index":1231,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["directed",{"_index":1475,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["directly",{"_index":916,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-password-flow.html":{}}}],["directory",{"_index":1128,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["disable",{"_index":331,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["disabled",{"_index":1243,"title":{},"body":{"additional-documentation/events.html":{}}}],["disableoauth2statecheck",{"_index":298,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["disablepkci",{"_index":894,"title":{},"body":{"index.html":{}}}],["discovery",{"_index":431,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["discovery_document_load_error",{"_index":489,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["discovery_document_loaded",{"_index":486,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["discovery_document_validation_error",{"_index":490,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["display",{"_index":911,"title":{},"body":{"index.html":{}}}],["display_values_supported",{"_index":457,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["displayed",{"_index":363,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["distribute",{"_index":991,"title":{},"body":{"license.html":{}}}],["docs",{"_index":791,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{}}}],["document",{"_index":432,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["documentation",{"_index":732,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["documentation/implicit",{"_index":947,"title":{},"body":{"index.html":{}}}],["documentation/refreshing",{"_index":935,"title":{},"body":{"index.html":{}}}],["doesn't",{"_index":1339,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["doing",{"_index":342,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["domains",{"_index":1351,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["don't",{"_index":910,"title":{},"body":{"index.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["dosn't",{"_index":1486,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["draft",{"_index":855,"title":{},"body":{"index.html":{}}}],["dummy",{"_index":241,"title":{},"body":{"classes/JwksValidationHandler.html":{},"additional-documentation/using-password-flow.html":{}}}],["dummyclientsecret",{"_index":882,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["during",{"_index":660,"title":{},"body":{"changelog.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["dynamic",{"_index":682,"title":{},"body":{"dependencies.html":{}}}],["e",{"_index":143,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"additional-documentation/using-password-flow.html":{}}}],["e.type",{"_index":223,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["each",{"_index":650,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["ease",{"_index":818,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["easier",{"_index":1093,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["easiest",{"_index":1181,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["elements",{"_index":685,"title":{},"body":{"dependencies.html":{}}}],["email",{"_index":892,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["enable",{"_index":1333,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["encodekey",{"_index":624,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodekey(k",{"_index":632,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encoder",{"_index":134,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"dependencies.html":{}}}],["encoder.encode(valuetohash",{"_index":137,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["encodeuricomponent(k",{"_index":636,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodeuricomponent(v",{"_index":637,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodevalue",{"_index":625,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodevalue(v",{"_index":634,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encounter",{"_index":1238,"title":{},"body":{"additional-documentation/events.html":{}}}],["end_session_endpoint",{"_index":441,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["endpoint",{"_index":415,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["endpoints",{"_index":1343,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["endpont",{"_index":1429,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["ends",{"_index":1298,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["enforce",{"_index":878,"title":{},"body":{"index.html":{}}}],["enhancements",{"_index":788,"title":{},"body":{"index.html":{}}}],["ensure",{"_index":919,"title":{},"body":{"index.html":{}}}],["ensures",{"_index":1342,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["enter",{"_index":1399,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["enters",{"_index":810,"title":{},"body":{"index.html":{}}}],["enum",{"_index":1257,"title":{},"body":{"additional-documentation/events.html":{}}}],["environment",{"_index":748,"title":{},"body":{"index.html":{}}}],["err",{"_index":260,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"miscellaneous/variables.html":{}}}],["err));when",{"_index":1142,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["error",{"_index":192,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["error('algorithm",{"_index":111,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["error(message",{"_index":388,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["errorhandler",{"_index":165,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["errors",{"_index":1158,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/original-config-api.html":{}}}],["escapedkey",{"_index":610,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["escapedvalue",{"_index":611,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["etc",{"_index":662,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["even",{"_index":672,"title":{},"body":{"changelog.html":{}}}],["event",{"_index":1016,"title":{},"body":{"license.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["events",{"_index":352,"title":{"additional-documentation/events.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["events.ts",{"_index":1258,"title":{},"body":{"additional-documentation/events.html":{}}}],["eventtype",{"_index":483,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["example",{"_index":1170,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["examples",{"_index":827,"title":{},"body":{"index.html":{}}}],["execute",{"_index":904,"title":{},"body":{"index.html":{}}}],["expected",{"_index":1244,"title":{},"body":{"additional-documentation/events.html":{}}}],["expired",{"_index":1445,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["expires",{"_index":816,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["expires_in",{"_index":422,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["explicit",{"_index":1477,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["explicitly",{"_index":1289,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["export",{"_index":72,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["exports",{"_index":551,"title":{},"body":{"modules/OAuthModule.html":{},"overview.html":{}}}],["express",{"_index":1007,"title":{},"body":{"license.html":{}}}],["extend",{"_index":1454,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["extends",{"_index":253,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["extensive",{"_index":1229,"title":{},"body":{"additional-documentation/events.html":{}}}],["fact",{"_index":1096,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["factor",{"_index":1079,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["factories",{"_index":548,"title":{},"body":{"modules/OAuthModule.html":{}}}],["factory",{"_index":1451,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["fail",{"_index":1355,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["fails",{"_index":1340,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{}}],["false",{"_index":220,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["far",{"_index":1092,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["features",{"_index":645,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["feel",{"_index":782,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["fetch",{"_index":906,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["fetching",{"_index":1433,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["field",{"_index":50,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["file",{"_index":5,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{}}}],["files",{"_index":982,"title":{},"body":{"license.html":{}}}],["filter",{"_index":184,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["filter(e",{"_index":222,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["filter(token",{"_index":218,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["find",{"_index":1047,"title":{},"body":{"additional-documentation/getting-started.html":{},"additional-documentation/original-config-api.html":{}}}],["fine",{"_index":941,"title":{},"body":{"index.html":{}}}],["fired",{"_index":1073,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["first",{"_index":885,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["fitness",{"_index":1012,"title":{},"body":{"license.html":{}}}],["fixes",{"_index":776,"title":{},"body":{"index.html":{}}}],["flight",{"_index":1382,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["flow",{"_index":271,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["flow.html",{"_index":948,"title":{},"body":{"index.html":{}}}],["flows",{"_index":313,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["folder",{"_index":793,"title":{},"body":{"index.html":{}}}],["followed",{"_index":318,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["following",{"_index":323,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"license.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["follows",{"_index":1450,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["form",{"_index":909,"title":{"additional-documentation/manually-skipping-login-form.html":{}},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["format",{"_index":1371,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["former",{"_index":1280,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["forroot",{"_index":530,"title":{},"body":{"modules/OAuthModule.html":{}}}],["forroot(config",{"_index":531,"title":{},"body":{"modules/OAuthModule.html":{}}}],["found",{"_index":1189,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["foundation",{"_index":857,"title":{},"body":{"index.html":{}}}],["four",{"_index":886,"title":{},"body":{"index.html":{}}}],["fragment",{"_index":304,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["free",{"_index":783,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["full",{"_index":1256,"title":{},"body":{"additional-documentation/events.html":{}}}],["function",{"_index":343,"title":{},"body":{"classes/LoginOptions.html":{},"classes/OAuthResourceServerConfig.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["functions",{"_index":708,"title":{"miscellaneous/functions.html":{}},"body":{"miscellaneous/functions.html":{}}}],["furnished",{"_index":998,"title":{},"body":{"license.html":{}}}],["further",{"_index":822,"title":{},"body":{"index.html":{}}}],["g",{"_index":799,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["geheim",{"_index":1422,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["geheim').then",{"_index":1443,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["geheim').then((resp",{"_index":1438,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["general",{"_index":874,"title":{},"body":{"index.html":{}}}],["generate",{"_index":797,"title":{},"body":{"index.html":{}}}],["gethashfragmentparams",{"_index":593,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["gethashfragmentparams(customhashfragment",{"_index":595,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["getitem",{"_index":463,"title":{},"body":{"injectables/MemoryStorage.html":{},"classes/OAuthStorage.html":{}}}],["getitem(key",{"_index":398,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["getting",{"_index":640,"title":{"changelog.html":{},"index.html":{},"license.html":{},"additional-documentation/getting-started.html":{}},"body":{"additional-documentation/getting-started.html":{},"additional-documentation/silent-refresh.html":{}}}],["give",{"_index":1145,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["gone",{"_index":1250,"title":{},"body":{"additional-documentation/events.html":{}}}],["google",{"_index":1348,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["grant_types_supported",{"_index":448,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["granted",{"_index":975,"title":{},"body":{"license.html":{}}}],["graph",{"_index":1030,"title":{},"body":{"modules.html":{}}}],["great",{"_index":1203,"title":{},"body":{"additional-documentation/popup-based-login.html":{},"additional-documentation/server-side-rendering.html":{}}}],["guard",{"_index":1472,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["guards",{"_index":738,"title":{},"body":{"index.html":{}}}],["guide",{"_index":1048,"title":{},"body":{"additional-documentation/getting-started.html":{}}}],["half",{"_index":1085,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["hallo",{"_index":1395,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["handle(req",{"_index":214,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["handleerror",{"_index":572,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["handleerror(err",{"_index":573,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["handler",{"_index":193,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["handler.ts",{"_index":8,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/variables.html":{}}}],["handler.ts:10",{"_index":575,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{}}}],["handler.ts:11",{"_index":475,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["handler.ts:13",{"_index":123,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["handler.ts:20",{"_index":126,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/ValidationHandler.html":{}}}],["handler.ts:25",{"_index":255,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["handler.ts:27",{"_index":615,"title":{},"body":{"classes/ValidationHandler.html":{}}}],["handler.ts:39",{"_index":66,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:44",{"_index":58,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:5",{"_index":581,"title":{},"body":{"classes/OAuthResourceServerErrorHandler.html":{}}}],["handler.ts:69",{"_index":47,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:7",{"_index":237,"title":{},"body":{"classes/HashHandler.html":{}}}],["handler.ts:8",{"_index":476,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["handler.ts:86",{"_index":31,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handlers",{"_index":80,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["handling",{"_index":1156,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["hash",{"_index":33,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["hash.indexof",{"_index":601,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["hash.substr(1",{"_index":605,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["hash.substr(questionmarkposition",{"_index":604,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["hashalg",{"_index":86,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["hasharray",{"_index":138,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hashhandler",{"_index":132,"title":{"classes/HashHandler.html":{}},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"modules/OAuthModule.html":{}}}],["hashing",{"_index":720,"title":{},"body":{"index.html":{}}}],["hashlocationstrategy",{"_index":751,"title":{},"body":{"index.html":{}}}],["hashstrategy",{"_index":944,"title":{"additional-documentation/routing-with-the-hashstrategy.html":{}},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["hasreceivedtokens",{"_index":1461,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["header",{"_index":55,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["headers",{"_index":234,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["helper",{"_index":71,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["helper.service",{"_index":541,"title":{},"body":{"modules/OAuthModule.html":{}}}],["helper.service.ts",{"_index":592,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["helper.service.ts:25",{"_index":598,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["helper.service.ts:5",{"_index":596,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["helper.ts",{"_index":711,"title":{},"body":{"miscellaneous/functions.html":{}}}],["hence",{"_index":803,"title":{},"body":{"index.html":{}}}],["here",{"_index":1167,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["here's",{"_index":1237,"title":{},"body":{"additional-documentation/events.html":{}}}],["hereby",{"_index":974,"title":{},"body":{"license.html":{}}}],["hexcode",{"_index":148,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexcode.padstart(2",{"_index":151,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexcodes",{"_index":146,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexcodes.join",{"_index":153,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexstring(buffer",{"_index":145,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hidden",{"_index":1098,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["history",{"_index":669,"title":{},"body":{"changelog.html":{}}}],["holders",{"_index":1018,"title":{},"body":{"license.html":{}}}],["home",{"_index":1198,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["homecomponent",{"_index":850,"title":{},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["hook",{"_index":370,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{}}}],["hooked",{"_index":81,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["http",{"_index":1159,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["http://localhost:4200",{"_index":832,"title":{},"body":{"index.html":{}}}],["http://localhost:8080/#/home",{"_index":1276,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["http://openid.net/specs/openid",{"_index":416,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["http://www.angular.at/api",{"_index":929,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["http_interceptors",{"_index":539,"title":{},"body":{"modules/OAuthModule.html":{}}}],["httpclientmodule",{"_index":847,"title":{},"body":{"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["httperrorresponse",{"_index":1186,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpevent",{"_index":178,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httphandler",{"_index":174,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpinterceptor",{"_index":179,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpinterceptors",{"_index":1152,"title":{"additional-documentation/working-with-httpinterceptors.html":{}},"body":{}}],["httpparametercodec",{"_index":621,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["httprequest",{"_index":172,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpresponse",{"_index":574,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["https://demo.identityserver.io",{"_index":863,"title":{},"body":{"index.html":{}}}],["https://github.com/jeroenheijmans/sample",{"_index":737,"title":{},"body":{"index.html":{}}}],["https://github.com/lankaapura/angular",{"_index":1319,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["https://github.com/manfredsteyer/angular",{"_index":731,"title":{},"body":{"index.html":{}}}],["https://manfredsteyer.github.io/angular",{"_index":733,"title":{},"body":{"index.html":{}}}],["https://medium.com/lankapura/angular",{"_index":1316,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["https://steyer",{"_index":1109,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["i.e",{"_index":1347,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["id",{"_index":407,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["id_token",{"_index":51,"title":{"additional-documentation/adapt-id_token-validation.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["id_token's",{"_index":53,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["id_token_encryption_alg_values_supported",{"_index":454,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["id_token_encryption_enc_values_supported",{"_index":455,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["id_token_signing_alg_values_supported",{"_index":453,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["idclaims",{"_index":408,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ideas",{"_index":787,"title":{},"body":{"index.html":{}}}],["identity",{"_index":721,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["identityserver",{"_index":757,"title":{},"body":{"index.html":{}}}],["idsvr",{"_index":1321,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["idtoken",{"_index":74,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["idtokenclaims",{"_index":77,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["idtokenclaimsjson",{"_index":410,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["idtokenexpiresat",{"_index":412,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["idtokenheader",{"_index":76,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["idtokenheaderjson",{"_index":411,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["iframe",{"_index":1099,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["iframes",{"_index":311,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["implcit",{"_index":1413,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["implemantion",{"_index":1172,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["implement",{"_index":1169,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["implementation",{"_index":11,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["implementations",{"_index":397,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["implemented",{"_index":1293,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["implementing",{"_index":268,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["implements",{"_index":14,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["implicit",{"_index":270,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{}},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["implied",{"_index":1008,"title":{},"body":{"license.html":{}}}],["import",{"_index":68,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["important",{"_index":887,"title":{},"body":{"index.html":{}}}],["imports",{"_index":549,"title":{},"body":{"modules/OAuthModule.html":{},"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["included",{"_index":348,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"license.html":{}}}],["includes",{"_index":341,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["including",{"_index":986,"title":{},"body":{"license.html":{}}}],["index",{"_index":21,"title":{"index.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["index.html",{"_index":867,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["indexable",{"_index":613,"title":{},"body":{"interfaces/UserInfo.html":{}}}],["inferhashalgorithm",{"_index":24,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["inferhashalgorithm(jwtheader",{"_index":45,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["infers",{"_index":48,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["info",{"_index":3,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["info(message",{"_index":385,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["info.state",{"_index":1056,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["information",{"_index":949,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/original-config-api.html":{}}}],["informs",{"_index":1218,"title":{},"body":{"additional-documentation/events.html":{}}}],["inherited",{"_index":256,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["initial",{"_index":1262,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["initialize",{"_index":895,"title":{},"body":{"index.html":{}}}],["initializes",{"_index":899,"title":{},"body":{"index.html":{}}}],["initialnavigation",{"_index":1270,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["initimplicitflow",{"_index":1051,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/using-implicit-flow.html":{}}}],["initloginflow",{"_index":898,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{}}}],["initloginflowinpopup",{"_index":1207,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["inject",{"_index":1185,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["injectable",{"_index":118,"title":{"injectables/DefaultHashHandler.html":{},"injectables/MemoryStorage.html":{},"injectables/UrlHelperService.html":{}},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["injectables",{"_index":120,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"injectables/MemoryStorage.html":{},"injectables/UrlHelperService.html":{},"overview.html":{}}}],["injecting",{"_index":1177,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["injection",{"_index":381,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["injectiontoken('auth_config",{"_index":1046,"title":{},"body":{"miscellaneous/variables.html":{}}}],["install",{"_index":272,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["installing",{"_index":845,"title":{},"body":{"index.html":{}}}],["instance",{"_index":1082,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["instanceof",{"_index":1234,"title":{},"body":{"additional-documentation/events.html":{}}}],["instead",{"_index":306,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["intended",{"_index":1377,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["interaction",{"_index":1105,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["intercept",{"_index":160,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["intercept(req",{"_index":171,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["intercepted",{"_index":564,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["interceptor",{"_index":155,"title":{"interceptors/DefaultOAuthInterceptor.html":{}},"body":{"index.html":{}}}],["interceptors",{"_index":157,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["interceptors/default",{"_index":544,"title":{},"body":{"modules/OAuthModule.html":{}}}],["interceptors/resource",{"_index":543,"title":{},"body":{"modules/OAuthModule.html":{}}}],["interesting",{"_index":1459,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["interface",{"_index":73,"title":{"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"interfaces/ValidationParams.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["interfaces",{"_index":586,"title":{},"body":{"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"interfaces/ValidationParams.html":{},"overview.html":{}}}],["internally",{"_index":328,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["invalid_nonce_in_state",{"_index":488,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["ionic",{"_index":963,"title":{},"body":{"index.html":{}}}],["isn't",{"_index":470,"title":{},"body":{"classes/NullValidationHandler.html":{},"additional-documentation/using-password-flow.html":{}}}],["issuer",{"_index":434,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["issues",{"_index":786,"title":{},"body":{"index.html":{}}}],["issuing",{"_index":1097,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["java",{"_index":727,"title":{},"body":{"index.html":{}}}],["job",{"_index":1271,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["js",{"_index":689,"title":{},"body":{"dependencies.html":{},"additional-documentation/using-systemjs.html":{}}}],["jsrasign",{"_index":719,"title":{},"body":{"index.html":{}}}],["jsrsasign",{"_index":693,"title":{},"body":{"dependencies.html":{},"additional-documentation/using-systemjs.html":{}}}],["jwks",{"_index":78,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["jwks';instead",{"_index":744,"title":{},"body":{"index.html":{}}}],["jwks_load_error",{"_index":487,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["jwks_uri",{"_index":442,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["jwksvalidationhandler",{"_index":238,"title":{"classes/JwksValidationHandler.html":{}},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["jwksvalidationhandler();in",{"_index":1285,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["jwtheader",{"_index":52,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["jwtheader['alg",{"_index":106,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["k",{"_index":628,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["keep",{"_index":1119,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["kevin",{"_index":1362,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["key",{"_index":429,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{}}}],["keycloak",{"_index":725,"title":{},"body":{"index.html":{}}}],["keys",{"_index":1281,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["kicks",{"_index":1410,"title":{},"body":{"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["kind",{"_index":1006,"title":{},"body":{"license.html":{}}}],["known",{"_index":1094,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["known/openid",{"_index":1425,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["labels",{"_index":789,"title":{},"body":{"index.html":{}}}],["later",{"_index":1282,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["lates",{"_index":644,"title":{},"body":{"changelog.html":{}}}],["leads",{"_index":1180,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/session-checks.html":{}}}],["leftmosthalf",{"_index":94,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["legend",{"_index":1033,"title":{},"body":{"overview.html":{}}}],["levels",{"_index":1232,"title":{},"body":{"additional-documentation/events.html":{}}}],["leveraging",{"_index":1259,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["liability",{"_index":1022,"title":{},"body":{"license.html":{}}}],["liable",{"_index":1019,"title":{},"body":{"license.html":{}}}],["lib",{"_index":361,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/using-password-flow.html":{}}}],["library",{"_index":247,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["library's",{"_index":1356,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["license",{"_index":967,"title":{"license.html":{}},"body":{}}],["life",{"_index":1076,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["limitation",{"_index":987,"title":{},"body":{"license.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["limited",{"_index":1009,"title":{},"body":{"license.html":{}}}],["line",{"_index":1132,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["lines",{"_index":667,"title":{},"body":{"changelog.html":{}}}],["linked",{"_index":671,"title":{},"body":{"changelog.html":{}}}],["list",{"_index":1063,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/events.html":{}}}],["listed",{"_index":1166,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["lite",{"_index":699,"title":{},"body":{"dependencies.html":{}}}],["load",{"_index":1423,"title":{},"body":{"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["loaddiscoverydocumentandlogin",{"_index":1456,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["loaddiscoverydocumentandtrylogin",{"_index":1457,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["loaded",{"_index":1120,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["loading",{"_index":1439,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["loadkeys",{"_index":79,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["loaduserprofile",{"_index":1246,"title":{},"body":{"additional-documentation/events.html":{}}}],["local",{"_index":1299,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["localhost:[4200",{"_index":840,"title":{},"body":{"index.html":{}}}],["localstorage",{"_index":394,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["location.origin",{"_index":1125,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["location.search",{"_index":1124,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["locationstrategy",{"_index":1260,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["log",{"_index":516,"title":{},"body":{"classes/OAuthLogger.html":{},"changelog.html":{},"additional-documentation/events.html":{}}}],["log(message",{"_index":386,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["logged",{"_index":1102,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["loggin",{"_index":1430,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["logging",{"_index":374,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-password-flow.html":{}}}],["login",{"_index":864,"title":{"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/manually-skipping-login-form.html":{}},"body":{"index.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["loginoptions",{"_index":290,"title":{"classes/LoginOptions.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["logoff",{"_index":1390,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["logout",{"_index":505,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"index.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["logs",{"_index":1230,"title":{},"body":{"additional-documentation/events.html":{}}}],["long",{"_index":1253,"title":{},"body":{"additional-documentation/events.html":{}}}],["longer",{"_index":1228,"title":{},"body":{"additional-documentation/events.html":{}}}],["look",{"_index":932,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["lookup",{"_index":946,"title":{},"body":{"index.html":{}}}],["lower",{"_index":927,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["main",{"_index":1121,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/using-systemjs.html":{}}}],["maintain",{"_index":1357,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["major",{"_index":773,"title":{},"body":{"index.html":{}}}],["make",{"_index":17,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["management",{"_index":1294,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["manfred",{"_index":971,"title":{},"body":{"license.html":{}}}],["manner",{"_index":315,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["manually",{"_index":1272,"title":{"additional-documentation/manually-skipping-login-form.html":{}},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["map",{"_index":185,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-systemjs.html":{}}}],["map(_",{"_index":228,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["mark",{"_index":321,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["matched",{"_index":654,"title":{},"body":{"changelog.html":{}}}],["matching",{"_index":116,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["max/geheim",{"_index":834,"title":{},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["mean",{"_index":1208,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["means",{"_index":1084,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{}}}],["meanwhile",{"_index":1378,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["memorystorage",{"_index":401,"title":{"injectables/MemoryStorage.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["mentioned",{"_index":1060,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/original-config-api.html":{}}}],["merchantability",{"_index":1011,"title":{},"body":{"license.html":{}}}],["merge",{"_index":181,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"license.html":{}}}],["mergemap",{"_index":187,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["mergemap(token",{"_index":232,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["message",{"_index":349,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["meta",{"_index":1366,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["method",{"_index":15,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["methods",{"_index":22,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{}}}],["mind",{"_index":877,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["minutes",{"_index":959,"title":{},"body":{"index.html":{}}}],["miscellaneous",{"_index":707,"title":{"miscellaneous/functions.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}},"body":{"miscellaneous/functions.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["modify",{"_index":989,"title":{},"body":{"license.html":{}}}],["module",{"_index":524,"title":{"modules/OAuthModule.html":{}},"body":{"overview.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["module.config",{"_index":195,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["module.config.ts",{"_index":558,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:11",{"_index":578,"title":{},"body":{"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:12",{"_index":580,"title":{},"body":{"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:13",{"_index":579,"title":{},"body":{"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:2",{"_index":561,"title":{},"body":{"classes/OAuthModuleConfig.html":{}}}],["moduleconfig",{"_index":167,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["modules",{"_index":526,"title":{"modules.html":{}},"body":{"modules/OAuthModule.html":{},"modules.html":{}}}],["modulewithproviders",{"_index":535,"title":{},"body":{"modules/OAuthModule.html":{}}}],["more",{"_index":930,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["moved",{"_index":246,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["msec",{"_index":1148,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["much",{"_index":768,"title":{},"body":{"index.html":{}}}],["multi",{"_index":556,"title":{},"body":{"modules/OAuthModule.html":{}}}],["name",{"_index":39,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["namely",{"_index":248,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["navigation",{"_index":1263,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["need",{"_index":267,"title":{},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["needed",{"_index":278,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["net",{"_index":758,"title":{},"body":{"index.html":{}}}],["net/.net",{"_index":723,"title":{},"body":{"index.html":{}}}],["new",{"_index":110,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["newer",{"_index":767,"title":{},"body":{"index.html":{}}}],["next",{"_index":173,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["next.handle(req",{"_index":211,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["next.handle(req).catch(err",{"_index":1193,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["ngmodule",{"_index":536,"title":{},"body":{"modules/OAuthModule.html":{},"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["node_modules/jsrsasign/lib/jsrsasign",{"_index":1374,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["nonce",{"_index":340,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{}}}],["noninfringement",{"_index":1015,"title":{},"body":{"license.html":{}}}],["normally",{"_index":358,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["note",{"_index":276,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["notes",{"_index":648,"title":{},"body":{"changelog.html":{},"additional-documentation/silent-refresh.html":{}}}],["nothing",{"_index":472,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["notice",{"_index":1001,"title":{},"body":{"license.html":{}}}],["notification",{"_index":1291,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["notifications",{"_index":1305,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["notified",{"_index":1307,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["nowadays",{"_index":280,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/original-config-api.html":{}}}],["npm",{"_index":273,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["null",{"_index":259,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["nullvalidationhandler",{"_index":254,"title":{"classes/NullValidationHandler.html":{}},"body":{"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["nullvalidationhandler:11",{"_index":257,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["nullvalidationhandler:8",{"_index":258,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["number",{"_index":413,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["oauth",{"_index":194,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["oauth.interceptor",{"_index":545,"title":{},"body":{"modules/OAuthModule.html":{}}}],["oauth.interceptor.ts",{"_index":159,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["oauth.interceptor.ts:17",{"_index":169,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["oauth.interceptor.ts:38",{"_index":175,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["oauth2",{"_index":250,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["oauth2/oidc",{"_index":269,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["oautherrorevent",{"_index":479,"title":{"classes/OAuthErrorEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"additional-documentation/events.html":{}}}],["oauthevent",{"_index":481,"title":{"classes/OAuthEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["oauthinfoevent",{"_index":512,"title":{"classes/OAuthInfoEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["oauthlogger",{"_index":382,"title":{"classes/OAuthLogger.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["oauthmodule",{"_index":525,"title":{"modules/OAuthModule.html":{}},"body":{"modules/OAuthModule.html":{},"index.html":{},"modules.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["oauthmodule.forroot",{"_index":848,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["oauthmoduleconfig",{"_index":168,"title":{"classes/OAuthModuleConfig.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["oauthnoopresourceservererrorhandler",{"_index":542,"title":{"classes/OAuthNoopResourceServerErrorHandler.html":{}},"body":{"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["oauthresourceserverconfig",{"_index":560,"title":{"classes/OAuthResourceServerConfig.html":{}},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["oauthresourceservererrorhandler",{"_index":166,"title":{"classes/OAuthResourceServerErrorHandler.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["oauthservice",{"_index":164,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["oauthstorage",{"_index":163,"title":{"classes/OAuthStorage.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["oauthsuccessevent",{"_index":509,"title":{"classes/OAuthSuccessEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["object",{"_index":46,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["observable",{"_index":177,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["obtaining",{"_index":978,"title":{},"body":{"license.html":{}}}],["occur",{"_index":1222,"title":{},"body":{"additional-documentation/events.html":{}}}],["of(null",{"_index":227,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["of(this.oauthservice.getaccesstoken()).pipe",{"_index":217,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["offline_access",{"_index":888,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-password-flow.html":{}}}],["oidc",{"_index":251,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["oidc';please",{"_index":745,"title":{},"body":{"index.html":{}}}],["oidc.module.ts",{"_index":528,"title":{},"body":{"modules/OAuthModule.html":{}}}],["oidc.module.ts:26",{"_index":533,"title":{},"body":{"modules/OAuthModule.html":{}}}],["oidc.umd.js",{"_index":1370,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["oidc/docs",{"_index":734,"title":{},"body":{"index.html":{}}}],["oidc/docs/additional",{"_index":934,"title":{},"body":{"index.html":{}}}],["oidcdiscoverydoc",{"_index":433,"title":{"interfaces/OidcDiscoveryDoc.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ok",{"_index":1139,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["okta",{"_index":957,"title":{},"body":{"index.html":{}}}],["old",{"_index":665,"title":{},"body":{"changelog.html":{}}}],["older",{"_index":651,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/original-config-api.html":{}}}],["one",{"_index":245,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["online",{"_index":955,"title":{},"body":{"index.html":{}}}],["onloginerror",{"_index":299,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ontokenreceived",{"_index":300,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["openid",{"_index":430,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["option",{"_index":1296,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["optional",{"_index":41,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["optionalparams",{"_index":384,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["options",{"_index":293,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{}}}],["original",{"_index":1057,"title":{"additional-documentation/original-config-api.html":{}},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["originally",{"_index":1376,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["otherparam",{"_index":1216,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["otherwise",{"_index":942,"title":{},"body":{"index.html":{},"license.html":{}}}],["out",{"_index":658,"title":{},"body":{"changelog.html":{},"index.html":{},"license.html":{},"overview.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["output",{"_index":1127,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{}}}],["over",{"_index":1077,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["override",{"_index":19,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["overview",{"_index":1032,"title":{"overview.html":{}},"body":{"overview.html":{}}}],["owner",{"_index":1414,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["package",{"_index":673,"title":{"dependencies.html":{}},"body":{}}],["packages",{"_index":1279,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["paddedhexcode",{"_index":150,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["page",{"_index":283,"title":{"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["pair",{"_index":608,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["pairs",{"_index":607,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["param",{"_index":105,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["parameter",{"_index":1210,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["parameters",{"_index":37,"title":{"additional-documentation/custom-query-parameters.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/custom-query-parameters.html":{}}}],["params",{"_index":64,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["params.idtokenclaims['at_hash'].replace(/=/g",{"_index":101,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["parse",{"_index":1337,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["parsed",{"_index":54,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["parsedidtoken",{"_index":409,"title":{"interfaces/ParsedIdToken.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["parsequerystring",{"_index":594,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["parsequerystring(querystring",{"_index":597,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["particular",{"_index":1013,"title":{},"body":{"license.html":{}}}],["pass",{"_index":310,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["passed",{"_index":34,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["passes",{"_index":1173,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["password",{"_index":809,"title":{"additional-documentation/using-password-flow.html":{}},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["passwords",{"_index":620,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["path",{"_index":940,"title":{},"body":{"index.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["pathlocationstrategy",{"_index":750,"title":{},"body":{"index.html":{}}}],["perform",{"_index":1135,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{}}}],["performs",{"_index":1261,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["permission",{"_index":973,"title":{},"body":{"license.html":{}}}],["permissions",{"_index":883,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["permit",{"_index":996,"title":{},"body":{"license.html":{}}}],["person",{"_index":977,"title":{},"body":{"license.html":{}}}],["persons",{"_index":997,"title":{},"body":{"license.html":{}}}],["perspective",{"_index":1400,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["pingone",{"_index":1350,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["pipe",{"_index":230,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["pipe(catcherror(err",{"_index":215,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["pkce",{"_index":802,"title":{},"body":{"index.html":{}}}],["plan",{"_index":772,"title":{},"body":{"index.html":{}}}],["please",{"_index":261,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["popup",{"_index":312,"title":{"additional-documentation/popup-based-login.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/popup-based-login.html":{}}}],["popup_blocked",{"_index":507,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["popup_closed",{"_index":506,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["portions",{"_index":1004,"title":{},"body":{"license.html":{}}}],["possible",{"_index":1408,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["post",{"_index":1314,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["ppanthony",{"_index":1368,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["practice",{"_index":335,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["practices",{"_index":879,"title":{},"body":{"index.html":{}}}],["prefixes",{"_index":925,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["present",{"_index":322,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["preserving",{"_index":1049,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["prevent",{"_index":1183,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["preventclearhashafterlogin",{"_index":301,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["prevents",{"_index":1143,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["previously",{"_index":1469,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["private",{"_index":198,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["profile",{"_index":891,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["progressing",{"_index":1473,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["project's",{"_index":1322,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["projects/.../base64",{"_index":710,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/.../events.ts",{"_index":1040,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["projects/.../factories.ts",{"_index":712,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/.../jwks",{"_index":1044,"title":{},"body":{"miscellaneous/variables.html":{}}}],["projects/.../tokens.ts",{"_index":1043,"title":{},"body":{"miscellaneous/variables.html":{}}}],["projects/lib/src/angular",{"_index":527,"title":{},"body":{"modules/OAuthModule.html":{}}}],["projects/lib/src/base64",{"_index":713,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/lib/src/encoder.ts",{"_index":617,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:10",{"_index":635,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:14",{"_index":627,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:18",{"_index":630,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:6",{"_index":633,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/events.ts",{"_index":480,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["projects/lib/src/events.ts:26",{"_index":513,"title":{},"body":{"classes/OAuthEvent.html":{}}}],["projects/lib/src/events.ts:30",{"_index":585,"title":{},"body":{"classes/OAuthSuccessEvent.html":{}}}],["projects/lib/src/events.ts:36",{"_index":514,"title":{},"body":{"classes/OAuthInfoEvent.html":{}}}],["projects/lib/src/events.ts:42",{"_index":485,"title":{},"body":{"classes/OAuthErrorEvent.html":{}}}],["projects/lib/src/factories.ts",{"_index":717,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/lib/src/interceptors/default",{"_index":158,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["projects/lib/src/interceptors/resource",{"_index":571,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["projects/lib/src/oauth",{"_index":557,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["projects/lib/src/token",{"_index":6,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/variables.html":{}}}],["projects/lib/src/tokens.ts",{"_index":1045,"title":{},"body":{"miscellaneous/variables.html":{}}}],["projects/lib/src/types.ts",{"_index":291,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["projects/lib/src/types.ts:102",{"_index":467,"title":{},"body":{"injectables/MemoryStorage.html":{}}}],["projects/lib/src/types.ts:106",{"_index":468,"title":{},"body":{"injectables/MemoryStorage.html":{}}}],["projects/lib/src/types.ts:117",{"_index":589,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:118",{"_index":587,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:119",{"_index":588,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:120",{"_index":590,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:13",{"_index":353,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:154",{"_index":614,"title":{},"body":{"interfaces/UserInfo.html":{}}}],["projects/lib/src/types.ts:20",{"_index":369,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:28",{"_index":344,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:40",{"_index":302,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:50",{"_index":330,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:58",{"_index":357,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:65",{"_index":324,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:75",{"_index":518,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:76",{"_index":521,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:77",{"_index":522,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:78",{"_index":523,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:79",{"_index":520,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:89",{"_index":582,"title":{},"body":{"classes/OAuthStorage.html":{}}}],["projects/lib/src/types.ts:90",{"_index":583,"title":{},"body":{"classes/OAuthStorage.html":{}}}],["projects/lib/src/types.ts:91",{"_index":584,"title":{},"body":{"classes/OAuthStorage.html":{}}}],["projects/lib/src/types.ts:98",{"_index":466,"title":{},"body":{"injectables/MemoryStorage.html":{}}}],["projects/lib/src/url",{"_index":591,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["promise",{"_index":44,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["promise(resolve",{"_index":1476,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["promise.resolve",{"_index":1463,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["promise.resolve(null",{"_index":477,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["promise.resolve(true",{"_index":478,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["properties",{"_index":295,"title":{},"body":{"classes/LoginOptions.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["property",{"_index":351,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{}}}],["proposes",{"_index":1061,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["protected",{"_index":23,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["provding",{"_index":1168,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["provide",{"_index":378,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["provided",{"_index":736,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["provider",{"_index":808,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["providers",{"_index":552,"title":{},"body":{"modules/OAuthModule.html":{},"overview.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["provides",{"_index":1184,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["providing",{"_index":1434,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["prs",{"_index":777,"title":{},"body":{"index.html":{}}}],["public",{"_index":84,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["publish",{"_index":990,"title":{},"body":{"license.html":{}}}],["published",{"_index":1239,"title":{},"body":{"additional-documentation/events.html":{}}}],["publishes",{"_index":1220,"title":{},"body":{"additional-documentation/events.html":{}}}],["pull",{"_index":784,"title":{},"body":{"index.html":{}}}],["purpose",{"_index":1014,"title":{},"body":{"license.html":{},"additional-documentation/callback-after-login.html":{}}}],["put",{"_index":1164,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["pwa",{"_index":961,"title":{},"body":{"index.html":{}}}],["query",{"_index":367,"title":{"additional-documentation/custom-query-parameters.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/custom-query-parameters.html":{}}}],["querying",{"_index":817,"title":{},"body":{"index.html":{}}}],["querystring",{"_index":319,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{}}}],["querystring.split",{"_index":612,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["question",{"_index":320,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/session-checks.html":{}}}],["questionmarkposition",{"_index":602,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["quite",{"_index":1411,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["read",{"_index":262,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"miscellaneous/variables.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["reading",{"_index":1264,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["readme",{"_index":903,"title":{},"body":{"index.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["readonly",{"_index":510,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["real",{"_index":244,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["reason",{"_index":484,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["receive",{"_index":1287,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{}}}],["received",{"_index":62,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["receivedtokens",{"_index":372,"title":{"classes/ReceivedTokens.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["receives",{"_index":1466,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["receiving",{"_index":1488,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["recommended",{"_index":746,"title":{},"body":{"index.html":{}}}],["recommented",{"_index":281,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["redhat",{"_index":726,"title":{},"body":{"index.html":{}}}],["redhat's",{"_index":759,"title":{},"body":{"index.html":{}}}],["redirect",{"_index":325,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["redirected",{"_index":807,"title":{},"body":{"index.html":{}}}],["redirecting",{"_index":825,"title":{},"body":{"index.html":{}}}],["redirects",{"_index":917,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["redirecturi",{"_index":865,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["redirecturis",{"_index":839,"title":{},"body":{"index.html":{}}}],["refresh",{"_index":329,"title":{"additional-documentation/silent-refresh.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["refresh.html",{"_index":844,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{}}}],["refresh.html\";please",{"_index":1118,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["refresh_token",{"_index":423,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["refresh_tokens",{"_index":1066,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["refreshed",{"_index":1251,"title":{},"body":{"additional-documentation/events.html":{}}}],["refreshes",{"_index":309,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["refreshing",{"_index":812,"title":{"additional-documentation/refreshing-a-token.html":{}},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["regarding",{"_index":820,"title":{},"body":{"index.html":{},"additional-documentation/using-systemjs.html":{}}}],["regards",{"_index":740,"title":{},"body":{"index.html":{}}}],["register",{"_index":1303,"title":{},"body":{"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["registerd",{"_index":869,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["registered",{"_index":566,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["registration_endpoint",{"_index":443,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["related",{"_index":1157,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/original-config-api.html":{}}}],["relations",{"_index":1405,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["release",{"_index":647,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["released",{"_index":657,"title":{},"body":{"changelog.html":{}}}],["removeitem",{"_index":464,"title":{},"body":{"injectables/MemoryStorage.html":{},"classes/OAuthStorage.html":{}}}],["removeitem(key",{"_index":399,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["removing",{"_index":366,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["rendering",{"_index":1312,"title":{"additional-documentation/server-side-rendering.html":{}},"body":{"additional-documentation/server-side-rendering.html":{}}}],["repository",{"_index":668,"title":{},"body":{"changelog.html":{}}}],["represents",{"_index":405,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["req",{"_index":176,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["req.clone",{"_index":236,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["req.headers",{"_index":1191,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["req.headers.set('authorization",{"_index":235,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["req.url.tolowercase",{"_index":207,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["request",{"_index":884,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["request_object_signing_alg_values_supported",{"_index":456,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["requested",{"_index":1050,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["requests",{"_index":785,"title":{},"body":{"index.html":{}}}],["require','jsrsasign",{"_index":1375,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["requirements",{"_index":1064,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["reset",{"_index":1035,"title":{},"body":{"overview.html":{}}}],["resolve",{"_index":1474,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["resolve(true",{"_index":1479,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["resolves",{"_index":1247,"title":{},"body":{"additional-documentation/events.html":{}}}],["resource",{"_index":190,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-password-flow.html":{}}}],["resources",{"_index":728,"title":{},"body":{"index.html":{}}}],["resourceserver",{"_index":559,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["resourceservererrorhandler",{"_index":565,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["respect",{"_index":1067,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["respective",{"_index":926,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["respond",{"_index":1104,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["response",{"_index":414,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["response_modes_supported",{"_index":447,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["response_types_supported",{"_index":445,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["responsetype",{"_index":860,"title":{},"body":{"index.html":{}}}],["restriction",{"_index":985,"title":{},"body":{"license.html":{}}}],["result",{"_index":115,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["results",{"_index":117,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["retrieved",{"_index":1241,"title":{},"body":{"additional-documentation/events.html":{}}}],["retrieving",{"_index":327,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["return",{"_index":104,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["returns",{"_index":43,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/using-password-flow.html":{}}}],["rights",{"_index":988,"title":{},"body":{"license.html":{}}}],["risk",{"_index":474,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["root",{"_index":1266,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["route",{"_index":939,"title":{},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["router",{"_index":749,"title":{},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["routermodule.forroot(app_routes",{"_index":1268,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["routes",{"_index":1265,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["routing",{"_index":937,"title":{"additional-documentation/routing-with-the-hashstrategy.html":{}},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["run",{"_index":801,"title":{},"body":{"index.html":{}}}],["runs",{"_index":831,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["rxjs",{"_index":182,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"dependencies.html":{}}}],["rxjs/add/operator/catch",{"_index":1188,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["rxjs/observable",{"_index":1187,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["rxjs/operators",{"_index":189,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["safe",{"_index":804,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["sake",{"_index":1481,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["same",{"_index":314,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["sample",{"_index":730,"title":{},"body":{"index.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["save",{"_index":274,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{}}}],["saveafter",{"_index":743,"title":{},"body":{"index.html":{}}}],["saved",{"_index":1242,"title":{},"body":{"additional-documentation/events.html":{}}}],["saveimporting",{"_index":846,"title":{},"body":{"index.html":{}}}],["scenario",{"_index":1490,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["scope",{"_index":424,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["scopes_supported",{"_index":444,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["seconds",{"_index":1150,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["secret",{"_index":873,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["section",{"_index":943,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["security",{"_index":337,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["see",{"_index":646,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["selector",{"_index":1381,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["sell",{"_index":994,"title":{},"body":{"license.html":{}}}],["send",{"_index":567,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["sendaccesstoken",{"_index":212,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["sends",{"_index":1302,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["sense",{"_index":1419,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["separatorindex",{"_index":609,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["server",{"_index":191,"title":{"additional-documentation/server-side-rendering.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["server's",{"_index":826,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["server.azurewebsites.net/identity",{"_index":1110,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["server.azurewebsites.net/identity/.well",{"_index":1424,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["server.azurewebsites.net/identity/connect/authorize",{"_index":1326,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["server.azurewebsites.net/identity/connect/endsession",{"_index":1335,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["server.azurewebsites.net/identity/connect/token",{"_index":1428,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["server.azurewebsites.net/identity/connect/userinfo",{"_index":1432,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["server.code",{"_index":871,"title":{},"body":{"index.html":{}}}],["servers",{"_index":953,"title":{},"body":{"index.html":{}}}],["service",{"_index":197,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["service_documentation",{"_index":461,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["session",{"_index":1254,"title":{"additional-documentation/session-checks.html":{}},"body":{"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["session_changed",{"_index":502,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["session_error",{"_index":503,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["session_terminated",{"_index":504,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/session-checks.html":{}}}],["session_terminated')).subscribe(e",{"_index":1309,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["sessionchecksenabled",{"_index":1306,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["sessionstorage",{"_index":395,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["set",{"_index":316,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["set('authorization",{"_index":1192,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["setitem",{"_index":465,"title":{},"body":{"injectables/MemoryStorage.html":{},"classes/OAuthStorage.html":{}}}],["setitem(key",{"_index":400,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["setstorage",{"_index":1330,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["setting",{"_index":915,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["setup",{"_index":933,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["several",{"_index":1346,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["sha",{"_index":113,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["sha256(accesstoken",{"_index":91,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["shaking",{"_index":742,"title":{},"body":{"index.html":{}}}],["shall",{"_index":1002,"title":{},"body":{"license.html":{}}}],["share",{"_index":1344,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["sharing",{"_index":1369,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["ship",{"_index":1406,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["short",{"_index":1224,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["showdebuginformation",{"_index":893,"title":{},"body":{"index.html":{}}}],["shown",{"_index":902,"title":{},"body":{"index.html":{}}}],["shows",{"_index":1171,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["side",{"_index":393,"title":{"additional-documentation/server-side-rendering.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/server-side-rendering.html":{}}}],["sign",{"_index":824,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["signature",{"_index":67,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["signs",{"_index":1292,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["silent",{"_index":308,"title":{"additional-documentation/silent-refresh.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["silent_refresh_error",{"_index":497,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["silent_refresh_timeout",{"_index":499,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["silently_refreshed",{"_index":498,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["silentrefresh",{"_index":1136,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["silentrefreshredirecturi",{"_index":1107,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{}}}],["silentrefreshtimeout",{"_index":1147,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["similar",{"_index":1412,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["simple",{"_index":389,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["single",{"_index":282,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["site",{"_index":964,"title":{},"body":{"index.html":{}}}],["size",{"_index":769,"title":{},"body":{"index.html":{}}}],["sizes",{"_index":287,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["skip",{"_index":473,"title":{},"body":{"classes/NullValidationHandler.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{}}}],["skipping",{"_index":1455,"title":{"additional-documentation/manually-skipping-login-form.html":{}},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["skips",{"_index":1283,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["smaller",{"_index":285,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["snippet",{"_index":1225,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["software",{"_index":980,"title":{},"body":{"license.html":{}}}],["solution",{"_index":859,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["something",{"_index":1465,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["somevalue",{"_index":1217,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["source",{"_index":4,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{}}}],["sources",{"_index":729,"title":{},"body":{"index.html":{}}}],["spa",{"_index":838,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["spa's",{"_index":868,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["spas",{"_index":876,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["spec",{"_index":1245,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["specific",{"_index":664,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["specification",{"_index":1354,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["specifies",{"_index":1062,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["specs",{"_index":821,"title":{},"body":{"index.html":{}}}],["src",{"_index":792,"title":{},"body":{"index.html":{}}}],["standard",{"_index":1058,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-password-flow.html":{}}}],["start",{"_index":1360,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["started",{"_index":641,"title":{"changelog.html":{},"index.html":{},"license.html":{},"additional-documentation/getting-started.html":{}},"body":{"additional-documentation/getting-started.html":{}}}],["starting",{"_index":1212,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["starts",{"_index":1379,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["startup",{"_index":1409,"title":{},"body":{"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["state",{"_index":332,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/events.html":{}}}],["static",{"_index":529,"title":{},"body":{"modules/OAuthModule.html":{}}}],["status",{"_index":1160,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["steyer",{"_index":972,"title":{},"body":{"license.html":{}}}],["still",{"_index":1101,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["storage",{"_index":390,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["storagefactory",{"_index":1453,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["stored",{"_index":1248,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["storing",{"_index":391,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["str",{"_index":715,"title":{},"body":{"miscellaneous/functions.html":{}}}],["strategy",{"_index":1089,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["stream",{"_index":1221,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["strict",{"_index":1489,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["strictdiscoverydocumentvalidation",{"_index":1341,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["string",{"_index":28,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["string.fromcharcode(e",{"_index":144,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["strong",{"_index":1403,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["sub",{"_index":428,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["subject",{"_index":999,"title":{},"body":{"license.html":{}}}],["subject_types_supported",{"_index":449,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["sublicense",{"_index":992,"title":{},"body":{"license.html":{}}}],["substantial",{"_index":1003,"title":{},"body":{"license.html":{}}}],["succeeded",{"_index":1053,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["successful",{"_index":1195,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["successfully",{"_index":354,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/events.html":{}}}],["such",{"_index":881,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{}}}],["suited",{"_index":1402,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["summary.json",{"_index":796,"title":{},"body":{"index.html":{}}}],["super",{"_index":288,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["super(type",{"_index":511,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["support",{"_index":663,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["supported",{"_index":112,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/original-config-api.html":{}}}],["supports",{"_index":852,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{}}}],["sure",{"_index":794,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["switching",{"_index":924,"title":{},"body":{"index.html":{}}}],["symbol",{"_index":317,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["system.config",{"_index":1365,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["systemjs",{"_index":1361,"title":{"additional-documentation/using-systemjs.html":{}},"body":{"additional-documentation/using-systemjs.html":{}}}],["take",{"_index":186,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["take(1",{"_index":231,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["takes",{"_index":1154,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["task",{"_index":923,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{}}}],["tasks",{"_index":1219,"title":{},"body":{"additional-documentation/events.html":{}}}],["telling",{"_index":242,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["tells",{"_index":912,"title":{},"body":{"index.html":{}}}],["template",{"_index":1394,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["templateurl",{"_index":1383,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["tenant",{"_index":1214,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["terminated",{"_index":1311,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["tested",{"_index":747,"title":{},"body":{"index.html":{}}}],["testen",{"_index":1398,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["testing",{"_index":722,"title":{},"body":{"index.html":{}}}],["text",{"_index":698,"title":{},"body":{"dependencies.html":{}}}],["textencoder",{"_index":135,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["thanks",{"_index":1202,"title":{},"body":{"additional-documentation/popup-based-login.html":{},"additional-documentation/using-systemjs.html":{}}}],["that's",{"_index":1420,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["then(info",{"_index":1137,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["things",{"_index":1206,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["third",{"_index":1088,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["this.authservice.events.subscribe(event",{"_index":1233,"title":{},"body":{"additional-documentation/events.html":{}}}],["this.authstorage.getitem('access_token",{"_index":1190,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.calchash(params.accesstoken",{"_index":90,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["this.checkurl(url",{"_index":210,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.configure",{"_index":1385,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["this.data.delete(key",{"_index":403,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["this.data.get(key",{"_index":402,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["this.data.set(key",{"_index":404,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["this.errorhandler.handleerror(err",{"_index":216,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.inferhashalgorithm(params.idtokenheader",{"_index":87,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["this.moduleconfig",{"_index":208,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver",{"_index":209,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver.allowedurls",{"_index":203,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver.allowedurls.find(u",{"_index":204,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver.customurlvalidation",{"_index":201,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.moduleconfig.resourceserver.customurlvalidation(url",{"_index":202,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.moduleconfig.resourceserver.sendaccesstoken",{"_index":213,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.oauthservice",{"_index":1460,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.clientid",{"_index":1328,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.configure(authcodeflowconfig",{"_index":907,"title":{},"body":{"index.html":{}}}],["this.oauthservice.configure(authconfig",{"_index":1386,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.customqueryparams",{"_index":1213,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["this.oauthservice.dummyclientsecret",{"_index":1421,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.events(filter(e",{"_index":1467,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.events.pipe",{"_index":221,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.oauthservice.events.pipe(filter(e",{"_index":1308,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["this.oauthservice.events.subscribe(e",{"_index":1226,"title":{},"body":{"additional-documentation/events.html":{}}}],["this.oauthservice.fetchtokenusingpasswordflow('max",{"_index":1437,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.fetchtokenusingpasswordflowandloaduserprofile('max",{"_index":1442,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.getaccesstoken",{"_index":229,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.oauthservice.getidentityclaims",{"_index":1392,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.hasvalidaccesstoken",{"_index":1470,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.hasvalididtoken",{"_index":1471,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.initcodeflow();there",{"_index":896,"title":{},"body":{"index.html":{}}}],["this.oauthservice.initimplicitflow('http://www.myurl.com/x/y/z');after",{"_index":1052,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["this.oauthservice.initloginflow",{"_index":1389,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.initloginflow();also",{"_index":901,"title":{},"body":{"index.html":{}}}],["this.oauthservice.issuer",{"_index":1484,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.loaddiscoverydocument().then",{"_index":1485,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.loaddiscoverydocument(url).then",{"_index":1426,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.loaddiscoverydocumentandlogin",{"_index":913,"title":{},"body":{"index.html":{}}}],["this.oauthservice.loaddiscoverydocumentandtrylogin",{"_index":914,"title":{},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.loaddiscoverydocumentandtrylogin();skipping",{"_index":908,"title":{},"body":{"index.html":{}}}],["this.oauthservice.loaduserprofile",{"_index":1440,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.loginurl",{"_index":1325,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["this.oauthservice.logout",{"_index":1391,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.logouturl",{"_index":1334,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["this.oauthservice.redirecturi",{"_index":1327,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.refresh();automatically",{"_index":1070,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["this.oauthservice.refreshtoken().then",{"_index":1446,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.scope",{"_index":1329,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.setstorage(sessionstorage",{"_index":1332,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.setupautomaticsilentrefresh();by",{"_index":1072,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["this.oauthservice.silentrefreshredirecturi",{"_index":1117,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["this.oauthservice.tokenendpoint",{"_index":1427,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.tokenvalidationhandler",{"_index":1284,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.trylogin",{"_index":1054,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.trylogin().then(_",{"_index":1273,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["this.oauthservice.userinfoendpoint",{"_index":1431,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.parsequerystring(hash",{"_index":606,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["this.router.navigate",{"_index":1274,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["this.tohashstring(hasharray",{"_index":140,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["this.window.addeventlistener('unload",{"_index":1478,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["those",{"_index":1068,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["three",{"_index":1113,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["through",{"_index":380,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["throw",{"_index":109,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["throwerror",{"_index":576,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["throwerror(err",{"_index":577,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["time",{"_index":814,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["timeout",{"_index":188,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/silent-refresh.html":{}}}],["timeout(this.oauthservice.waitfortokeninmsec",{"_index":225,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["timeoutfactor",{"_index":1080,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["timer",{"_index":1249,"title":{},"body":{"additional-documentation/events.html":{}}}],["timespan",{"_index":1146,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["together",{"_index":1315,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["tohashstring",{"_index":122,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["tohashstring(buffer",{"_index":124,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["tohashstring(hexstring",{"_index":154,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["token",{"_index":219,"title":{"additional-documentation/refreshing-a-token.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["token's",{"_index":1075,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["token(s",{"_index":362,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["token.html",{"_index":936,"title":{},"body":{"index.html":{}}}],["token_endpoint",{"_index":436,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_endpoint_auth_methods_supported",{"_index":437,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_endpoint_auth_signing_alg_values_supported",{"_index":438,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_error",{"_index":493,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_expires",{"_index":501,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_received",{"_index":224,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["token_received')).subscribe",{"_index":1468,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["token_refresh_error",{"_index":496,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_refreshed",{"_index":495,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_type",{"_index":421,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_validation_error",{"_index":500,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["tokenhash",{"_index":88,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["tokenhash.length",{"_index":96,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["tokenhash.substr(0",{"_index":95,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["tokenresponse",{"_index":420,"title":{"interfaces/TokenResponse.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["tokens",{"_index":83,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["tokenvalidationhandler",{"_index":371,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["tokenvalidator",{"_index":1278,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["tort",{"_index":1026,"title":{},"body":{"license.html":{}}}],["transmit",{"_index":1416,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["transmitted",{"_index":1211,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["transmitting",{"_index":1155,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["tree",{"_index":741,"title":{},"body":{"index.html":{}}}],["tries",{"_index":1336,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["triggers",{"_index":1087,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["true",{"_index":93,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["trust",{"_index":1404,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["try",{"_index":766,"title":{},"body":{"index.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["trylogin",{"_index":294,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["ts",{"_index":1331,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["tsickle",{"_index":701,"title":{},"body":{"dependencies.html":{}}}],["tslib",{"_index":703,"title":{},"body":{"dependencies.html":{}}}],["turn",{"_index":1359,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["tutorial",{"_index":951,"title":{},"body":{"index.html":{}}}],["tutorials",{"_index":950,"title":{},"body":{"index.html":{}}}],["two",{"_index":1205,"title":{},"body":{"additional-documentation/popup-based-login.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["type",{"_index":40,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["typealiases",{"_index":1038,"title":{"miscellaneous/typealiases.html":{}},"body":{}}],["types",{"_index":196,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{}}}],["ui_locales_supported",{"_index":462,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["uint8array(buffer",{"_index":142,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["up",{"_index":655,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["upcoming",{"_index":805,"title":{},"body":{"index.html":{}}}],["update",{"_index":795,"title":{},"body":{"index.html":{}}}],["uri",{"_index":326,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["url",{"_index":206,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["url.startswith(u",{"_index":205,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["urlhelperservice",{"_index":540,"title":{"injectables/UrlHelperService.html":{}},"body":{"modules/OAuthModule.html":{},"injectables/UrlHelperService.html":{}}}],["urls",{"_index":562,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["use",{"_index":18,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"license.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["usecase",{"_index":890,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["useclass",{"_index":554,"title":{},"body":{"modules/OAuthModule.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["used",{"_index":305,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/using-password-flow.html":{}}}],["usefactory",{"_index":553,"title":{},"body":{"modules/OAuthModule.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["usehash",{"_index":1269,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["user",{"_index":425,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["user's",{"_index":1435,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["user_profile_load_error",{"_index":492,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["user_profile_loaded",{"_index":491,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["userinfo",{"_index":427,"title":{"interfaces/UserInfo.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{}}}],["userinfo_encryption_alg_values_supported",{"_index":451,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["userinfo_encryption_enc_values_supported",{"_index":452,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["userinfo_endpoint",{"_index":439,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["userinfo_signing_alg_values_supported",{"_index":450,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["username/password",{"_index":833,"title":{},"body":{"index.html":{}}}],["username/passwort",{"_index":1396,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["users",{"_index":243,"title":{},"body":{"classes/JwksValidationHandler.html":{},"additional-documentation/server-side-rendering.html":{}}}],["uses",{"_index":375,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["usesilentrefresh",{"_index":1112,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["usevalue",{"_index":555,"title":{},"body":{"modules/OAuthModule.html":{}}}],["using",{"_index":36,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["utils",{"_index":252,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["v",{"_index":631,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["valid",{"_index":918,"title":{},"body":{"index.html":{}}}],["validate",{"_index":82,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["validateathash",{"_index":16,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validateathash(params",{"_index":56,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validateathash(validationparams",{"_index":85,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validated",{"_index":355,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/callback-after-login.html":{}}}],["validates",{"_index":59,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["validatesignature",{"_index":26,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validatesignature(validationparams",{"_index":65,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validating",{"_index":471,"title":{},"body":{"classes/NullValidationHandler.html":{},"index.html":{}}}],["validation",{"_index":240,"title":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{},"miscellaneous/variables.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["validation/hash",{"_index":121,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"modules/OAuthModule.html":{}}}],["validation/jwks",{"_index":239,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{}}}],["validation/null",{"_index":469,"title":{},"body":{"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{}}}],["validation/validation",{"_index":7,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"modules/OAuthModule.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validationhandler",{"_index":12,"title":{"classes/ValidationHandler.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["validationhandlerclass",{"_index":532,"title":{},"body":{"modules/OAuthModule.html":{}}}],["validationparams",{"_index":57,"title":{"interfaces/ValidationParams.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validations",{"_index":823,"title":{},"body":{"index.html":{}}}],["value",{"_index":35,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"modules/OAuthModule.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/original-config-api.html":{}}}],["value.tostring(16",{"_index":149,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["values",{"_index":368,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["valuetohash",{"_index":42,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["variables",{"_index":1041,"title":{"miscellaneous/variables.html":{}},"body":{"miscellaneous/variables.html":{}}}],["various",{"_index":1352,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["versatility",{"_index":931,"title":{},"body":{"index.html":{}}}],["version",{"_index":265,"title":{},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["versions",{"_index":652,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["via",{"_index":754,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["vital",{"_index":880,"title":{},"body":{"index.html":{}}}],["void",{"_index":373,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["voucher",{"_index":1115,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["want",{"_index":359,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["warn",{"_index":517,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["warn(message",{"_index":387,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["warning",{"_index":1288,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["warranties",{"_index":1010,"title":{},"body":{"license.html":{}}}],["warranty",{"_index":1005,"title":{},"body":{"license.html":{}}}],["way",{"_index":1182,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["we've",{"_index":756,"title":{},"body":{"index.html":{}}}],["web",{"_index":829,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["webcomponents/custom",{"_index":684,"title":{},"body":{"dependencies.html":{}}}],["webhttpurlencodingcodec",{"_index":616,"title":{"classes/WebHttpUrlEncodingCodec.html":{}},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["webpack",{"_index":755,"title":{},"body":{"index.html":{}}}],["well",{"_index":379,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{}}}],["when/some",{"_index":813,"title":{},"body":{"index.html":{}}}],["whenever",{"_index":1240,"title":{},"body":{"additional-documentation/events.html":{}}}],["whether",{"_index":1023,"title":{},"body":{"license.html":{}}}],["white",{"_index":1165,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["window.crypto.subtle.digest(algorithm",{"_index":139,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["window.location.hash",{"_index":599,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["window.location.origin",{"_index":866,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["window.opener",{"_index":1122,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["window.parent).postmessage(location.hash",{"_index":1123,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["wish",{"_index":1464,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["within",{"_index":1091,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["without",{"_index":984,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}},"body":{"license.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["working",{"_index":1151,"title":{"additional-documentation/working-with-httpinterceptors.html":{}},"body":{}}],["works",{"_index":1449,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["workshops",{"_index":965,"title":{},"body":{"index.html":{}}}],["write",{"_index":1176,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["ws02",{"_index":1349,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["yes",{"_index":519,"title":{},"body":{"classes/OAuthLogger.html":{},"injectables/UrlHelperService.html":{}}}],["you've",{"_index":1387,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["yourself",{"_index":1487,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["zone.js",{"_index":705,"title":{},"body":{"dependencies.html":{}}}],["zoom",{"_index":1034,"title":{},"body":{"overview.html":{}}}],["zum",{"_index":1397,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}]],"pipeline":["stemmer"]}, - "store": {"classes/AbstractValidationHandler.html":{"url":"classes/AbstractValidationHandler.html","title":"class - AbstractValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n AbstractValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/validation-handler.ts\n \n\n \n Description\n \n \n This abstract implementation of ValidationHandler already implements\nthe method validateAtHash. However, to make use of it,\nyou have to override the method calcHash.\n\n \n\n\n \n Implements\n \n \n ValidationHandler\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Protected\n Abstract\n calcHash\n \n \n Protected\n inferHashAlgorithm\n \n \n Async\n validateAtHash\n \n \n Abstract\n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Protected\n Abstract\n calcHash\n \n \n \n \n \n \n \n \n calcHash(valueToHash: string, algorithm: string)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:86\n \n \n\n\n \n \n Calculates the hash for the passed value by using\nthe passed hash algorithm.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n valueToHash\n \n string\n \n\n \n No\n \n\n\n \n \n algorithm\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Protected\n inferHashAlgorithm\n \n \n \n \n \n \n \n \n inferHashAlgorithm(jwtHeader: object)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:69\n \n \n\n\n \n \n Infers the name of the hash algorithm to use\nfrom the alg field of an id_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n jwtHeader\n \n object\n \n\n \n No\n \n\n\n \n the id_token's parsed header\n\n \n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Async\n validateAtHash\n \n \n \n \n \n \n \n \n validateAtHash(params: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:44\n \n \n\n\n \n \n Validates the at_hash in an id_token against the received access_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n params\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n validateSignature\n \n \n \n \n \n \n \n \n validateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:39\n \n \n\n\n \n \n Validates the signature of an id_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { base64UrlEncode } from '../base64-helper';\n\nexport interface ValidationParams {\n idToken: string;\n accessToken: string;\n idTokenHeader: object;\n idTokenClaims: object;\n jwks: object;\n loadKeys: () => Promise;\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nexport abstract class ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n public abstract validateSignature(\n validationParams: ValidationParams\n ): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n public abstract validateAtHash(validationParams: ValidationParams): Promise;\n}\n\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nexport abstract class AbstractValidationHandler implements ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n abstract validateSignature(validationParams: ValidationParams): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params: ValidationParams): Promise {\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n\n let atHash = base64UrlEncode(leftMostHalf);\n\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n\n return atHash === claimsAtHash;\n }\n\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n protected inferHashAlgorithm(jwtHeader: object): string {\n let alg: string = jwtHeader['alg'];\n\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n\n return 'sha-' + alg.substr(2);\n }\n\n /**\n * Calculates the hash for the passed value by using\n * the passed hash algorithm.\n *\n * @param valueToHash\n * @param algorithm\n */\n protected abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"injectables/DefaultHashHandler.html":{"url":"injectables/DefaultHashHandler.html","title":"injectable - DefaultHashHandler","body":"\n \n\n\n\n\n\n\n\n\n Injectables\n DefaultHashHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/hash-handler.ts\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Async\n calcHash\n \n \n toHashString\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Async\n calcHash\n \n \n \n \n \n \n \n \n calcHash(valueToHash: string, algorithm: string)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:13\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n valueToHash\n \n string\n \n\n \n No\n \n\n\n \n \n algorithm\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n toHashString\n \n \n \n \n \n \n \ntoHashString(buffer: ArrayBuffer)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:20\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n buffer\n \n ArrayBuffer\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Abstraction for crypto algorithms\n*/\nexport abstract class HashHandler {\n abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n@Injectable()\nexport class DefaultHashHandler implements HashHandler {\n\n async calcHash(valueToHash: string, algorithm: string): Promise {\n const encoder = new TextEncoder();\n const data = encoder.encode(valueToHash);\n const hashArray = await window.crypto.subtle.digest(algorithm, data);\n return this.toHashString(hashArray);\n }\n\n toHashString(buffer: ArrayBuffer) {\n const byteArray = new Uint8Array(buffer);\n let result = '';\n for (let e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n\n // hexString(buffer) {\n // const byteArray = new Uint8Array(buffer);\n // const hexCodes = [...byteArray].map(value => {\n // const hexCode = value.toString(16);\n // const paddedHexCode = hexCode.padStart(2, '0');\n // return paddedHexCode;\n // });\n \n // return hexCodes.join('');\n // }\n \n // toHashString(hexString: string) {\n // let result = '';\n // for (let i = 0; i \n \n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interceptors/DefaultOAuthInterceptor.html":{"url":"interceptors/DefaultOAuthInterceptor.html","title":"interceptor - DefaultOAuthInterceptor","body":"\n \n\n\n\n\n\n\n\n\n\n Interceptors\n DefaultOAuthInterceptor\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/interceptors/default-oauth.interceptor.ts\n \n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n intercept\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(authStorage: OAuthStorage, oAuthService: OAuthService, errorHandler: OAuthResourceServerErrorHandler, moduleConfig: OAuthModuleConfig)\n \n \n \n \n Defined in projects/lib/src/interceptors/default-oauth.interceptor.ts:17\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n authStorage\n \n \n OAuthStorage\n \n \n \n No\n \n \n \n \n oAuthService\n \n \n OAuthService\n \n \n \n No\n \n \n \n \n errorHandler\n \n \n OAuthResourceServerErrorHandler\n \n \n \n No\n \n \n \n \n moduleConfig\n \n \n OAuthModuleConfig\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Public\n intercept\n \n \n \n \n \n \n \n \n intercept(req: HttpRequest, next: HttpHandler)\n \n \n\n\n \n \n Defined in projects/lib/src/interceptors/default-oauth.interceptor.ts:38\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n req\n \n HttpRequest\n \n\n \n No\n \n\n\n \n \n next\n \n HttpHandler\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Observable>\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable, Optional } from '@angular/core';\n\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Observable, of, merge } from 'rxjs';\nimport { catchError, filter, map, take, mergeMap, timeout } from 'rxjs/operators';\nimport { OAuthResourceServerErrorHandler } from './resource-server-error-handler';\nimport { OAuthModuleConfig } from '../oauth-module.config';\nimport { OAuthStorage } from '../types';\nimport { OAuthService } from '../oauth-service';\n\n@Injectable()\nexport class DefaultOAuthInterceptor implements HttpInterceptor {\n\n constructor(\n private authStorage: OAuthStorage,\n private oAuthService: OAuthService,\n private errorHandler: OAuthResourceServerErrorHandler,\n @Optional() private moduleConfig: OAuthModuleConfig\n ) { }\n\n private checkUrl(url: string): boolean {\n if (this.moduleConfig.resourceServer.customUrlValidation) {\n return this.moduleConfig.resourceServer.customUrlValidation(url);\n }\n\n if (this.moduleConfig.resourceServer.allowedUrls) {\n return !!this.moduleConfig.resourceServer.allowedUrls.find(u => url.startsWith(u));\n }\n\n return true;\n }\n\n public intercept(\n req: HttpRequest,\n next: HttpHandler\n ): Observable> {\n const url = req.url.toLowerCase();\n\n\n if (!this.moduleConfig || !this.moduleConfig.resourceServer || !this.checkUrl(url)) {\n return next.handle(req);\n }\n\n const sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;\n\n if (!sendAccessToken) {\n return next\n .handle(req)\n .pipe(catchError(err => this.errorHandler.handleError(err)));\n }\n\n return merge(\n of(this.oAuthService.getAccessToken()).pipe(\n filter(token => token ? true : false),\n ),\n this.oAuthService.events.pipe(\n filter(e => e.type === 'token_received'),\n timeout(this.oAuthService.waitForTokenInMsec || 0),\n catchError(_ => of(null)), // timeout is not an error\n map(_ => this.oAuthService.getAccessToken()),\n ),\n ).pipe(\n take(1),\n mergeMap(token => {\n if (token) {\n const header = 'Bearer ' + token;\n const headers = req.headers.set('Authorization', header);\n req = req.clone({ headers });\n }\n\n return next\n .handle(req)\n .pipe(catchError(err => this.errorHandler.handleError(err)));\n }),\n );\n }\n}\n\n \n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/HashHandler.html":{"url":"classes/HashHandler.html","title":"class - HashHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n HashHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/hash-handler.ts\n \n\n \n Description\n \n \n Abstraction for crypto algorithms\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n calcHash\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n calcHash\n \n \n \n \n \n \n \n \n calcHash(valueToHash: string, algorithm: string)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:7\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n valueToHash\n \n string\n \n\n \n No\n \n\n\n \n \n algorithm\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Abstraction for crypto algorithms\n*/\nexport abstract class HashHandler {\n abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n@Injectable()\nexport class DefaultHashHandler implements HashHandler {\n\n async calcHash(valueToHash: string, algorithm: string): Promise {\n const encoder = new TextEncoder();\n const data = encoder.encode(valueToHash);\n const hashArray = await window.crypto.subtle.digest(algorithm, data);\n return this.toHashString(hashArray);\n }\n\n toHashString(buffer: ArrayBuffer) {\n const byteArray = new Uint8Array(buffer);\n let result = '';\n for (let e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n\n // hexString(buffer) {\n // const byteArray = new Uint8Array(buffer);\n // const hexCodes = [...byteArray].map(value => {\n // const hexCode = value.toString(16);\n // const paddedHexCode = hexCode.padStart(2, '0');\n // return paddedHexCode;\n // });\n \n // return hexCodes.join('');\n // }\n \n // toHashString(hexString: string) {\n // let result = '';\n // for (let i = 0; i \n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/JwksValidationHandler.html":{"url":"classes/JwksValidationHandler.html","title":"class - JwksValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n JwksValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/jwks-validation-handler.ts\n \n\n \n Description\n \n \n This is just a dummy of the JwksValidationHandler\ntelling the users that the real one has been moved\nto an library of its own, namely angular-oauth2-oidc-utils\n\n \n\n \n Extends\n \n \n NullValidationHandler\n \n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n validateAtHash\n \n \n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in projects/lib/src/token-validation/jwks-validation-handler.ts:25\n \n \n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n validateAtHash\n \n \n \n \n \n \n \nvalidateAtHash(validationParams: ValidationParams)\n \n \n\n\n \n \n Inherited from NullValidationHandler\n\n \n \n \n \n Defined in NullValidationHandler:11\n\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n validateSignature\n \n \n \n \n \n \n \nvalidateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Inherited from NullValidationHandler\n\n \n \n \n \n Defined in NullValidationHandler:8\n\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { NullValidationHandler } from './null-validation-handler';\n\nconst err = `PLEASE READ THIS CAREFULLY:\n\nBeginning with angular-oauth2-oidc version 9, the JwksValidationHandler\nhas been moved to an library of its own. If you need it for implementing\nOAuth2/OIDC **implicit flow**, please install it using npm:\n\n npm i angular-oauth2-oidc-jwks --save\n\nAfter that, you can import it into your application:\n\n import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\n\nPlease note, that this dependency is not needed for the **code flow**,\nwhich is nowadays the **recommented** one for single page applications.\nThis also results in smaller bundle sizes.\n`;\n\n/**\n * This is just a dummy of the JwksValidationHandler\n * telling the users that the real one has been moved\n * to an library of its own, namely angular-oauth2-oidc-utils\n */\nexport class JwksValidationHandler extends NullValidationHandler {\n\n constructor() {\n super();\n console.error(err);\n }\n\n}\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/LoginOptions.html":{"url":"classes/LoginOptions.html","title":"class - LoginOptions","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n LoginOptions\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Additional options that can be passed to tryLogin.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n customHashFragment\n \n \n Optional\n customRedirectUri\n \n \n Optional\n disableOAuth2StateCheck\n \n \n Optional\n onLoginError\n \n \n Optional\n onTokenReceived\n \n \n Optional\n preventClearHashAfterLogin\n \n \n Optional\n validationHandler\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n Optional\n customHashFragment\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:40\n \n \n\n \n \n A custom hash fragment to be used instead of the\nactual one. This is used for silent refreshes, to\npass the iframes hash fragment to this method, and\nis also used by popup flows in the same manner.\nThis can be used with code flow, where is must be set\nto a hash symbol followed by the querystring. The\nquestion mark is optional, but may be present following\nthe hash symbol.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n customRedirectUri\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:65\n \n \n\n \n \n Set this for code flow if you used a custom redirect Uri\nwhen retrieving the code. This is used internally for silent\nrefresh and popup flows.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n disableOAuth2StateCheck\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in projects/lib/src/types.ts:50\n \n \n\n \n \n Set this to true to disable the oauth2 state\ncheck which is a best practice to avoid\nsecurity attacks.\nAs OIDC defines a nonce check that includes\nthis, this can be set to true when only doing\nOIDC.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n onLoginError\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/types.ts:28\n \n \n\n \n \n Called when tryLogin detects that the auth server\nincluded an error message into the hash fragment.\nDeprecated: Use property events on OAuthService instead.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n onTokenReceived\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/types.ts:13\n \n \n\n \n \n Is called, after a token has been received and\nsuccessfully validated.\nDeprecated: Use property events on OAuthService instead.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n preventClearHashAfterLogin\n \n \n \n \n \n \n Default value : false\n \n \n \n \n Defined in projects/lib/src/types.ts:58\n \n \n\n \n \n Normally, you want to clear your hash fragment after\nthe lib read the token(s) so that they are not displayed\nanymore in the url. If not, set this to true. For code flow\nthis controls removing query string values.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n validationHandler\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/types.ts:20\n \n \n\n \n \n Hook, to validate the received tokens.\nDeprecated: Use property tokenValidationHandler on OAuthService instead.\n\n \n \n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"injectables/MemoryStorage.html":{"url":"injectables/MemoryStorage.html","title":"injectable - MemoryStorage","body":"\n \n\n\n\n\n\n\n\n\n Injectables\n MemoryStorage\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n getItem\n \n \n removeItem\n \n \n setItem\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n getItem\n \n \n \n \n \n \n \ngetItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:98\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n removeItem\n \n \n \n \n \n \n \nremoveItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:102\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setItem\n \n \n \n \n \n \n \nsetItem(key: string, data: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:106\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n data\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/NullValidationHandler.html":{"url":"classes/NullValidationHandler.html","title":"class - NullValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n NullValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/null-validation-handler.ts\n \n\n \n Description\n \n \n A validation handler that isn't validating nothing.\nCan be used to skip validation (at your own risk).\n\n \n\n\n \n Implements\n \n \n ValidationHandler\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n validateAtHash\n \n \n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n validateAtHash\n \n \n \n \n \n \n \nvalidateAtHash(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/null-validation-handler.ts:11\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n validateSignature\n \n \n \n \n \n \n \nvalidateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/null-validation-handler.ts:8\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { ValidationHandler, ValidationParams } from './validation-handler';\n\n/**\n * A validation handler that isn't validating nothing.\n * Can be used to skip validation (at your own risk).\n */\nexport class NullValidationHandler implements ValidationHandler {\n validateSignature(validationParams: ValidationParams): Promise {\n return Promise.resolve(null);\n }\n validateAtHash(validationParams: ValidationParams): Promise {\n return Promise.resolve(true);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthErrorEvent.html":{"url":"classes/OAuthErrorEvent.html","title":"class - OAuthErrorEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthErrorEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n \n Extends\n \n \n OAuthEvent\n \n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType, reason: object, params: object)\n \n \n \n \n Defined in projects/lib/src/events.ts:42\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n reason\n \n \n object\n \n \n \n No\n \n \n \n \n params\n \n \n object\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthEvent.html":{"url":"classes/OAuthEvent.html","title":"class - OAuthEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType)\n \n \n \n \n Defined in projects/lib/src/events.ts:26\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthInfoEvent.html":{"url":"classes/OAuthInfoEvent.html","title":"class - OAuthInfoEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthInfoEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n \n Extends\n \n \n OAuthEvent\n \n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType, info: any)\n \n \n \n \n Defined in projects/lib/src/events.ts:36\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n info\n \n \n any\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthLogger.html":{"url":"classes/OAuthLogger.html","title":"class - OAuthLogger","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthLogger\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Defines the logging interface the OAuthService uses\ninternally. Is compatible with the console object,\nbut you can provide your own implementation as well\nthrough dependency injection.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n debug\n \n \n Abstract\n error\n \n \n Abstract\n info\n \n \n Abstract\n log\n \n \n Abstract\n warn\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n debug\n \n \n \n \n \n \n \n \n debug(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:75\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n error\n \n \n \n \n \n \n \n \n error(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:79\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n info\n \n \n \n \n \n \n \n \n info(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:76\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n log\n \n \n \n \n \n \n \n \n log(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:77\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n warn\n \n \n \n \n \n \n \n \n warn(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:78\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"modules/OAuthModule.html":{"url":"modules/OAuthModule.html","title":"module - OAuthModule","body":"\n \n\n\n\n\n Modules\n OAuthModule\n\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n\n \n File\n \n \n projects/lib/src/angular-oauth-oidc.module.ts\n \n\n\n\n\n \n \n \n \n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Static\n forRoot\n \n \n \n \n \n \n \n \n forRoot(config: OAuthModuleConfig, validationHandlerClass)\n \n \n\n\n \n \n Defined in projects/lib/src/angular-oauth-oidc.module.ts:26\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Default value\n \n \n \n \n config\n \n OAuthModuleConfig\n \n\n \n No\n \n\n \n null\n \n\n \n \n validationHandlerClass\n \n \n\n \n No\n \n\n \n NullValidationHandler\n \n\n \n \n \n \n \n \n \n Returns : ModuleWithProviders\n\n \n \n \n \n \n \n \n \n\n \n\n\n \n import { OAuthStorage, OAuthLogger } from './types';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { OAuthService } from './oauth-service';\nimport { UrlHelperService } from './url-helper.service';\n\nimport { OAuthModuleConfig } from './oauth-module.config';\nimport {\n OAuthResourceServerErrorHandler,\n OAuthNoopResourceServerErrorHandler\n} from './interceptors/resource-server-error-handler';\nimport { DefaultOAuthInterceptor } from './interceptors/default-oauth.interceptor';\nimport { ValidationHandler } from './token-validation/validation-handler';\nimport { NullValidationHandler } from './token-validation/null-validation-handler';\nimport { createDefaultLogger, createDefaultStorage } from './factories';\nimport { HashHandler, DefaultHashHandler } from './token-validation/hash-handler';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: []\n})\nexport class OAuthModule {\n static forRoot(\n config: OAuthModuleConfig = null,\n validationHandlerClass = NullValidationHandler\n ): ModuleWithProviders {\n return {\n ngModule: OAuthModule,\n providers: [\n OAuthService,\n UrlHelperService,\n { provide: OAuthLogger, useFactory: createDefaultLogger },\n { provide: OAuthStorage, useFactory: createDefaultStorage },\n { provide: ValidationHandler, useClass: validationHandlerClass},\n { provide: HashHandler, useClass: DefaultHashHandler },\n {\n provide: OAuthResourceServerErrorHandler,\n useClass: OAuthNoopResourceServerErrorHandler\n },\n { provide: OAuthModuleConfig, useValue: config },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: DefaultOAuthInterceptor,\n multi: true\n }\n ]\n };\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthModuleConfig.html":{"url":"classes/OAuthModuleConfig.html","title":"class - OAuthModuleConfig","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthModuleConfig\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/oauth-module.config.ts\n \n\n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n resourceServer\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n resourceServer\n \n \n \n \n \n \n Type : OAuthResourceServerConfig\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:2\n \n \n\n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n export abstract class OAuthModuleConfig {\n resourceServer: OAuthResourceServerConfig;\n}\n\nexport abstract class OAuthResourceServerConfig {\n /**\n * Urls for which calls should be intercepted.\n * If there is an ResourceServerErrorHandler registered, it is used for them.\n * If sendAccessToken is set to true, the access_token is send to them too.\n */\n allowedUrls?: Array;\n sendAccessToken: boolean;\n customUrlValidation?: (url: string) => boolean;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthNoopResourceServerErrorHandler.html":{"url":"classes/OAuthNoopResourceServerErrorHandler.html","title":"class - OAuthNoopResourceServerErrorHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthNoopResourceServerErrorHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/interceptors/resource-server-error-handler.ts\n \n\n\n\n \n Implements\n \n \n OAuthResourceServerErrorHandler\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n handleError\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n handleError\n \n \n \n \n \n \n \nhandleError(err: HttpResponse)\n \n \n\n\n \n \n Defined in projects/lib/src/interceptors/resource-server-error-handler.ts:10\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n err\n \n HttpResponse\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Observable\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { HttpResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\n\nexport abstract class OAuthResourceServerErrorHandler {\n abstract handleError(err: HttpResponse): Observable;\n}\n\nexport class OAuthNoopResourceServerErrorHandler\n implements OAuthResourceServerErrorHandler {\n handleError(err: HttpResponse): Observable {\n return throwError(err);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthResourceServerConfig.html":{"url":"classes/OAuthResourceServerConfig.html","title":"class - OAuthResourceServerConfig","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthResourceServerConfig\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/oauth-module.config.ts\n \n\n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n allowedUrls\n \n \n Optional\n customUrlValidation\n \n \n sendAccessToken\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n Optional\n allowedUrls\n \n \n \n \n \n \n Type : Array\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:11\n \n \n\n \n \n Urls for which calls should be intercepted.\nIf there is an ResourceServerErrorHandler registered, it is used for them.\nIf sendAccessToken is set to true, the access_token is send to them too.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n customUrlValidation\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:13\n \n \n\n\n \n \n \n \n \n \n \n \n \n sendAccessToken\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:12\n \n \n\n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n export abstract class OAuthModuleConfig {\n resourceServer: OAuthResourceServerConfig;\n}\n\nexport abstract class OAuthResourceServerConfig {\n /**\n * Urls for which calls should be intercepted.\n * If there is an ResourceServerErrorHandler registered, it is used for them.\n * If sendAccessToken is set to true, the access_token is send to them too.\n */\n allowedUrls?: Array;\n sendAccessToken: boolean;\n customUrlValidation?: (url: string) => boolean;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthResourceServerErrorHandler.html":{"url":"classes/OAuthResourceServerErrorHandler.html","title":"class - OAuthResourceServerErrorHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthResourceServerErrorHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/interceptors/resource-server-error-handler.ts\n \n\n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n handleError\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n handleError\n \n \n \n \n \n \n \n \n handleError(err: HttpResponse)\n \n \n\n\n \n \n Defined in projects/lib/src/interceptors/resource-server-error-handler.ts:5\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n err\n \n HttpResponse\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Observable\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { HttpResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\n\nexport abstract class OAuthResourceServerErrorHandler {\n abstract handleError(err: HttpResponse): Observable;\n}\n\nexport class OAuthNoopResourceServerErrorHandler\n implements OAuthResourceServerErrorHandler {\n handleError(err: HttpResponse): Observable {\n return throwError(err);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthStorage.html":{"url":"classes/OAuthStorage.html","title":"class - OAuthStorage","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthStorage\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Defines a simple storage that can be used for\nstoring the tokens at client side.\nIs compatible to localStorage and sessionStorage,\nbut you can also create your own implementations.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n getItem\n \n \n Abstract\n removeItem\n \n \n Abstract\n setItem\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n getItem\n \n \n \n \n \n \n \n \n getItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:89\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string | null\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n removeItem\n \n \n \n \n \n \n \n \n removeItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:90\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n setItem\n \n \n \n \n \n \n \n \n setItem(key: string, data: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:91\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n data\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthSuccessEvent.html":{"url":"classes/OAuthSuccessEvent.html","title":"class - OAuthSuccessEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthSuccessEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n \n Extends\n \n \n OAuthEvent\n \n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType, info: any)\n \n \n \n \n Defined in projects/lib/src/events.ts:30\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n info\n \n \n any\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/OidcDiscoveryDoc.html":{"url":"interfaces/OidcDiscoveryDoc.html","title":"interface - OidcDiscoveryDoc","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n OidcDiscoveryDoc\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents an OpenID Connect discovery document\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n acr_values_supported\n \n \n authorization_endpoint\n \n \n check_session_iframe\n \n \n claim_types_supported\n \n \n claims_parameter_supported\n \n \n claims_supported\n \n \n display_values_supported\n \n \n end_session_endpoint\n \n \n grant_types_supported\n \n \n id_token_encryption_alg_values_supported\n \n \n id_token_encryption_enc_values_supported\n \n \n id_token_signing_alg_values_supported\n \n \n issuer\n \n \n jwks_uri\n \n \n registration_endpoint\n \n \n request_object_signing_alg_values_supported\n \n \n response_modes_supported\n \n \n response_types_supported\n \n \n scopes_supported\n \n \n service_documentation\n \n \n subject_types_supported\n \n \n token_endpoint\n \n \n token_endpoint_auth_methods_supported\n \n \n token_endpoint_auth_signing_alg_values_supported\n \n \n ui_locales_supported\n \n \n userinfo_encryption_alg_values_supported\n \n \n userinfo_encryption_enc_values_supported\n \n \n userinfo_endpoint\n \n \n userinfo_signing_alg_values_supported\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n acr_values_supported\n \n \n \n \n acr_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n authorization_endpoint\n \n \n \n \n authorization_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n check_session_iframe\n \n \n \n \n check_session_iframe: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n claim_types_supported\n \n \n \n \n claim_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n claims_parameter_supported\n \n \n \n \n claims_parameter_supported: boolean\n\n \n \n\n\n \n \n Type : boolean\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n claims_supported\n \n \n \n \n claims_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n display_values_supported\n \n \n \n \n display_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n end_session_endpoint\n \n \n \n \n end_session_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n grant_types_supported\n \n \n \n \n grant_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token_encryption_alg_values_supported\n \n \n \n \n id_token_encryption_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token_encryption_enc_values_supported\n \n \n \n \n id_token_encryption_enc_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token_signing_alg_values_supported\n \n \n \n \n id_token_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n issuer\n \n \n \n \n issuer: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n jwks_uri\n \n \n \n \n jwks_uri: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n registration_endpoint\n \n \n \n \n registration_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n request_object_signing_alg_values_supported\n \n \n \n \n request_object_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n response_modes_supported\n \n \n \n \n response_modes_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n response_types_supported\n \n \n \n \n response_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n scopes_supported\n \n \n \n \n scopes_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n service_documentation\n \n \n \n \n service_documentation: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n subject_types_supported\n \n \n \n \n subject_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n token_endpoint\n \n \n \n \n token_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n token_endpoint_auth_methods_supported\n \n \n \n \n token_endpoint_auth_methods_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n token_endpoint_auth_signing_alg_values_supported\n \n \n \n \n token_endpoint_auth_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n ui_locales_supported\n \n \n \n \n ui_locales_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_encryption_alg_values_supported\n \n \n \n \n userinfo_encryption_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_encryption_enc_values_supported\n \n \n \n \n userinfo_encryption_enc_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_endpoint\n \n \n \n \n userinfo_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_signing_alg_values_supported\n \n \n \n \n userinfo_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/ParsedIdToken.html":{"url":"interfaces/ParsedIdToken.html","title":"interface - ParsedIdToken","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n ParsedIdToken\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the parsed and validated id_token.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n idToken\n \n \n idTokenClaims\n \n \n idTokenClaimsJson\n \n \n idTokenExpiresAt\n \n \n idTokenHeader\n \n \n idTokenHeaderJson\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n idToken\n \n \n \n \n idToken: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenClaims\n \n \n \n \n idTokenClaims: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenClaimsJson\n \n \n \n \n idTokenClaimsJson: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenExpiresAt\n \n \n \n \n idTokenExpiresAt: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenHeader\n \n \n \n \n idTokenHeader: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenHeaderJson\n \n \n \n \n idTokenHeaderJson: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ReceivedTokens.html":{"url":"classes/ReceivedTokens.html","title":"class - ReceivedTokens","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ReceivedTokens\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the received tokens, the received state\nand the parsed claims from the id-token.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n accessToken\n \n \n Optional\n idClaims\n \n \n idToken\n \n \n Optional\n state\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n accessToken\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:118\n \n \n\n\n \n \n \n \n \n \n \n \n \n Optional\n idClaims\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Defined in projects/lib/src/types.ts:119\n \n \n\n\n \n \n \n \n \n \n \n \n \n idToken\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:117\n \n \n\n\n \n \n \n \n \n \n \n \n \n Optional\n state\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:120\n \n \n\n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/TokenResponse.html":{"url":"interfaces/TokenResponse.html","title":"interface - TokenResponse","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n TokenResponse\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the response from the token endpoint\nhttp://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n access_token\n \n \n expires_in\n \n \n id_token\n \n \n refresh_token\n \n \n scope\n \n \n Optional\n state\n \n \n token_type\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n access_token\n \n \n \n \n access_token: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n expires_in\n \n \n \n \n expires_in: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token\n \n \n \n \n id_token: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n refresh_token\n \n \n \n \n refresh_token: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n scope\n \n \n \n \n scope: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n state\n \n \n \n \n state: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n \n \n \n \n \n token_type\n \n \n \n \n token_type: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"injectables/UrlHelperService.html":{"url":"injectables/UrlHelperService.html","title":"injectable - UrlHelperService","body":"\n \n\n\n\n\n\n\n\n\n Injectables\n UrlHelperService\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/url-helper.service.ts\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n getHashFragmentParams\n \n \n Public\n parseQueryString\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Public\n getHashFragmentParams\n \n \n \n \n \n \n \n \n getHashFragmentParams(customHashFragment?: string)\n \n \n\n\n \n \n Defined in projects/lib/src/url-helper.service.ts:5\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n customHashFragment\n \n string\n \n\n \n Yes\n \n\n\n \n \n \n \n \n \n \n Returns : object\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n parseQueryString\n \n \n \n \n \n \n \n \n parseQueryString(queryString: string)\n \n \n\n\n \n \n Defined in projects/lib/src/url-helper.service.ts:25\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n queryString\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : object\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UrlHelperService {\n public getHashFragmentParams(customHashFragment?: string): object {\n let hash = customHashFragment || window.location.hash;\n\n hash = decodeURIComponent(hash);\n\n if (hash.indexOf('#') !== 0) {\n return {};\n }\n\n const questionMarkPosition = hash.indexOf('?');\n\n if (questionMarkPosition > -1) {\n hash = hash.substr(questionMarkPosition + 1);\n } else {\n hash = hash.substr(1);\n }\n\n return this.parseQueryString(hash);\n }\n\n public parseQueryString(queryString: string): object {\n const data = {};\n let\n pairs,\n pair,\n separatorIndex,\n escapedKey,\n escapedValue,\n key,\n value;\n\n if (queryString === null) {\n return data;\n }\n\n pairs = queryString.split('&');\n\n for (let i = 0; i \n \n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/UserInfo.html":{"url":"interfaces/UserInfo.html","title":"interface - UserInfo","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n UserInfo\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the response from the user info endpoint\nhttp://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n sub\n \n \n \n \n \n \n \n\n\n \n Indexable\n \n \n \n \n [key: string]: any\n\n \n \n \n \n Defined in projects/lib/src/types.ts:154\n \n \n \n \n\n\n \n Properties\n \n \n \n \n \n sub\n \n \n \n \n sub: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from \"@angular/core\";\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string; \n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ValidationHandler.html":{"url":"classes/ValidationHandler.html","title":"class - ValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/validation-handler.ts\n \n\n \n Description\n \n \n Interface for Handlers that are hooked in to\nvalidate tokens.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n Abstract\n validateAtHash\n \n \n Public\n Abstract\n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Public\n Abstract\n validateAtHash\n \n \n \n \n \n \n \n \n validateAtHash(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:27\n \n \n\n\n \n \n Validates the at_hash in an id_token against the received access_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n Abstract\n validateSignature\n \n \n \n \n \n \n \n \n validateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:20\n \n \n\n\n \n \n Validates the signature of an id_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { base64UrlEncode } from '../base64-helper';\n\nexport interface ValidationParams {\n idToken: string;\n accessToken: string;\n idTokenHeader: object;\n idTokenClaims: object;\n jwks: object;\n loadKeys: () => Promise;\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nexport abstract class ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n public abstract validateSignature(\n validationParams: ValidationParams\n ): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n public abstract validateAtHash(validationParams: ValidationParams): Promise;\n}\n\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nexport abstract class AbstractValidationHandler implements ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n abstract validateSignature(validationParams: ValidationParams): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params: ValidationParams): Promise {\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n\n let atHash = base64UrlEncode(leftMostHalf);\n\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n\n return atHash === claimsAtHash;\n }\n\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n protected inferHashAlgorithm(jwtHeader: object): string {\n let alg: string = jwtHeader['alg'];\n\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n\n return 'sha-' + alg.substr(2);\n }\n\n /**\n * Calculates the hash for the passed value by using\n * the passed hash algorithm.\n *\n * @param valueToHash\n * @param algorithm\n */\n protected abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/ValidationParams.html":{"url":"interfaces/ValidationParams.html","title":"interface - ValidationParams","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n ValidationParams\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/validation-handler.ts\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n accessToken\n \n \n idToken\n \n \n idTokenClaims\n \n \n idTokenHeader\n \n \n jwks\n \n \n loadKeys\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n accessToken\n \n \n \n \n accessToken: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idToken\n \n \n \n \n idToken: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenClaims\n \n \n \n \n idTokenClaims: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenHeader\n \n \n \n \n idTokenHeader: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n jwks\n \n \n \n \n jwks: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n loadKeys\n \n \n \n \n loadKeys: function\n\n \n \n\n\n \n \n Type : function\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { base64UrlEncode } from '../base64-helper';\n\nexport interface ValidationParams {\n idToken: string;\n accessToken: string;\n idTokenHeader: object;\n idTokenClaims: object;\n jwks: object;\n loadKeys: () => Promise;\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nexport abstract class ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n public abstract validateSignature(\n validationParams: ValidationParams\n ): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n public abstract validateAtHash(validationParams: ValidationParams): Promise;\n}\n\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nexport abstract class AbstractValidationHandler implements ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n abstract validateSignature(validationParams: ValidationParams): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params: ValidationParams): Promise {\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n\n let atHash = base64UrlEncode(leftMostHalf);\n\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n\n return atHash === claimsAtHash;\n }\n\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n protected inferHashAlgorithm(jwtHeader: object): string {\n let alg: string = jwtHeader['alg'];\n\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n\n return 'sha-' + alg.substr(2);\n }\n\n /**\n * Calculates the hash for the passed value by using\n * the passed hash algorithm.\n *\n * @param valueToHash\n * @param algorithm\n */\n protected abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/WebHttpUrlEncodingCodec.html":{"url":"classes/WebHttpUrlEncodingCodec.html","title":"class - WebHttpUrlEncodingCodec","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n WebHttpUrlEncodingCodec\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/encoder.ts\n \n\n \n Description\n \n \n This custom encoder allows charactes like +, % and / to be used in passwords\n\n \n\n\n \n Implements\n \n \n HttpParameterCodec\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n decodeKey\n \n \n decodeValue\n \n \n encodeKey\n \n \n encodeValue\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n decodeKey\n \n \n \n \n \n \n \ndecodeKey(k: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:14\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n k\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n decodeValue\n \n \n \n \n \n \n \ndecodeValue(v: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:18\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n v\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n encodeKey\n \n \n \n \n \n \n \nencodeKey(k: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:6\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n k\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n encodeValue\n \n \n \n \n \n \n \nencodeValue(v: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:10\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n v\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { HttpParameterCodec } from '@angular/common/http';\n/**\n * This custom encoder allows charactes like +, % and / to be used in passwords\n */\nexport class WebHttpUrlEncodingCodec implements HttpParameterCodec {\n encodeKey(k: string): string {\n return encodeURIComponent(k);\n }\n\n encodeValue(v: string): string {\n return encodeURIComponent(v);\n }\n\n decodeKey(k: string): string {\n return decodeURIComponent(k);\n }\n\n decodeValue(v: string) {\n return decodeURIComponent(v);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"changelog.html":{"url":"changelog.html","title":"getting-started - changelog","body":"\n \n\nChange Log\nLates features\nSee Release Notes for details on each release.\nOlder versions\nSince Angular 5, versions of this library matched up with the Angular version.\nSo versions 5.x were released while Angular 5 was out, the 6.x versions during Angular 6, etc.\nIf you need to support a specific old version of Angular, you can consider using a version of the library that lines up.\nFor older release notes check the repository version history, or above-linked release notes.\nFor even older versions, check out the old change log.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"dependencies.html":{"url":"dependencies.html","title":"package-dependencies - dependencies","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n Dependencies\n \n \n \n @angular/animations : 9.0.5\n \n @angular/common : 9.0.5\n \n @angular/compiler : 9.0.5\n \n @angular/core : 9.0.5\n \n @angular/elements : 9.0.5\n \n @angular/forms : 9.0.5\n \n @angular/platform-browser : 9.0.5\n \n @angular/platform-browser-dynamic : 9.0.5\n \n @angular/router : 9.0.5\n \n @webcomponents/custom-elements : ^1.2.4\n \n angular-oauth2-oidc : ^9.0.1\n \n angular-oauth2-oidc-jwks : ^9.0.0\n \n base64-js : ^1.3.0\n \n bootstrap : ^3.3.7\n \n jsrsasign : ^8.0.12\n \n rxjs : 6.5.4\n \n rxjs-compat : ^6.5.2\n \n text-encoder-lite : ^1.0.1\n \n tsickle : ^0.35.0\n \n tslib : ^1.11.1\n \n zone.js : ^0.10.2\n \n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/functions.html":{"url":"miscellaneous/functions.html","title":"miscellaneous-functions - functions","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n Miscellaneous\n Functions\n\n\n\n Index\n \n \n \n \n \n \n b64DecodeUnicode   (projects/.../base64-helper.ts)\n \n \n base64UrlEncode   (projects/.../base64-helper.ts)\n \n \n createDefaultLogger   (projects/.../factories.ts)\n \n \n createDefaultStorage   (projects/.../factories.ts)\n \n \n \n \n \n \n\n\n projects/lib/src/base64-helper.ts\n \n \n \n \n \n \n \n \n b64DecodeUnicode\n \n \n \n \n \n \n \nb64DecodeUnicode(str)\n \n \n\n\n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Optional\n \n \n \n \n str\n\n \n No\n \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n base64UrlEncode\n \n \n \n \n \n \n \nbase64UrlEncode(str)\n \n \n\n\n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Optional\n \n \n \n \n str\n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n projects/lib/src/factories.ts\n \n \n \n \n \n \n \n \n createDefaultLogger\n \n \n \n \n \n \n \ncreateDefaultLogger()\n \n \n\n\n\n\n \n \n \n \n \n \n \n \n \n createDefaultStorage\n \n \n \n \n \n \n \ncreateDefaultStorage()\n \n \n\n\n\n\n \n \n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"index.html":{"url":"index.html","title":"getting-started - index","body":"\n \n\nangular-oauth2-oidc\nSupport for OAuth 2 and OpenId Connect (OIDC) in Angular. \n\nCredits\n\njsrasign for validating token signature and for hashing\nIdentity Server for testing with an .NET/.NET Core Backend\nKeycloak (Redhat) for testing with Java\n\nResources\n\nSources and Sample: https://github.com/manfredsteyer/angular-oauth2-oidc\nSource Code Documentation: https://manfredsteyer.github.io/angular-oauth2-oidc/docs\nCommunity-provided sample implementation: https://github.com/jeroenheijmans/sample-angular-oauth2-oidc-with-auth-guards/\n\nBreaking Change in Version 9\nWith regards to tree shaking, beginning with version 9, the JwksValidationHandler has been moved to a library of its own. If you need it for implementing implicit flow, please install it using npm:\nnpm i angular-oauth2-oidc-jwks --saveAfter that, you can import it into your application by using this:\nimport { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';instead of that:\nimport { JwksValidationHandler } from 'angular-oauth2-oidc';Please note, that this dependency is not needed for the code flow, which is nowadays the recommended flow for single page applications. This also results in smaller bundle sizes.\nTested Environment\nSuccessfully tested with Angular 9 and its Router, PathLocationStrategy as well as HashLocationStrategy and CommonJS-Bundling via webpack. At server side we've used IdentityServer (.NET / .NET Core) and Redhat's Keycloak (Java).\nAngular 9: Use 9.x versions of this library.\nAngular 8: Use 8.x versions of this library.\nAngular 7: Use 7.x versions of this library.\nAngular 6: Use Version 4.x of this library. Version 4.x was tested with Angular 6. You can also try the newer version 5.x of this library which has a much smaller bundle size.\nAngular 5.x or 4.3: If you need support for Angular \nRelease Cycle\n\nWe plan one major release for each Angular version\nWill contain new features\nWill contain bug fixes and PRs\n\n\nCritical bugfixes on demand\n\nContributions\n\nFeel free to file pull requests\n\nThe issues contain some ideas for PRs and enhancements (see labels)\n\nIf you want to contribute to the docs, you can do so in the docs-src folder. Make sure you update summary.json as well. Then generate the docs with the following commands:\nnpm install -g @compodoc/compodoc\nnpm run docs\n\nFeatures\n\nLogging in via Code Flow + PKCE \nHence, you are safe for the upcoming OAuth 2.1\n\n\nLogging in via Implicit Flow (where a user is redirected to Identity Provider)\n\"Logging in\" via Password Flow (where a user enters their password into the client)\nToken Refresh for all supported flows\nAutomatically refreshing a token when/some time before it expires\nQuerying Userinfo Endpoint\nQuerying Discovery Document to ease configuration\nValidating claims of the id_token regarding the specs\nHook for further custom validations\nSingle-Sign-Out by redirecting to the auth-server's logout-endpoint\n\nSample-Auth-Server\nYou can use the OIDC-Sample-Server used in our examples. It assumes, that your Web-App runs on http://localhost:4200\nUsername/Password: \n\nmax/geheim\nbob/bob\nalice/alice\n\nclientIds:\n\nspa (Code Flow + PKCE)\nimplicit (implicit flow)\n\nredirectUris:\n\nlocalhost:[4200-4202]\nlocalhost:[4200-4202]/index.html\nlocalhost:[4200-4202]/silent-refresh.html\n\nInstalling\nnpm i angular-oauth2-oidc --saveImporting the NgModule\nimport { HttpClientModule } from '@angular/common/http';\nimport { OAuthModule } from 'angular-oauth2-oidc';\n// etc.\n\n@NgModule({\n imports: [\n // etc.\n HttpClientModule,\n OAuthModule.forRoot()\n ],\n declarations: [\n AppComponent,\n HomeComponent,\n // etc.\n ],\n bootstrap: [\n AppComponent\n ]\n})\nexport class AppModule {\n}Logging in\nSince Version 8, this library supports code flow and PKCE to align with the current draft of the OAuth 2.0 Security Best Current Practice document. This is also the foundation of the upcoming OAuth 2.1.\nTo configure your solution for code flow + PKCE you have to set the responseType to code:\n import { AuthConfig } from 'angular-oauth2-oidc';\n\n export const authCodeFlowConfig: AuthConfig = {\n // Url of the Identity Provider\n issuer: 'https://demo.identityserver.io',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n // clientId: 'server.code',\n clientId: 'spa',\n\n // Just needed if your auth server demands a secret. In general, this\n // is a sign that the auth server is not configured with SPAs in mind\n // and it might not enforce further best practices vital for security\n // such applications.\n // dummyClientSecret: 'secret',\n\n responseType: 'code',\n\n // set the scope for the permissions the client should request\n // The first four are defined by OIDC. \n // Important: Request offline_access to get a refresh token\n // The api scope is a usecase specific one\n scope: 'openid profile email offline_access api',\n\n showDebugInformation: true,\n\n // Not recommented:\n // disablePKCI: true,\n };After this, you can initialize the code flow using:\n this.oauthService.initCodeFlow();There is also a convenience method initLoginFlow which initializes either the code flow or the implicit flow depending on your configuration. \n this.oauthService.initLoginFlow();Also -- as shown in the readme -- you have to execute the following code when bootstrapping to make the library to fetch the token:\nthis.oauthService.configure(authCodeFlowConfig);\nthis.oauthService.loadDiscoveryDocumentAndTryLogin();Skipping the Login Form\nIf you don't want to display a login form that tells the user that they are redirected to the identity server, you can use the convenience function this.oauthService.loadDiscoveryDocumentAndLogin(); instead of this.oauthService.loadDiscoveryDocumentAndTryLogin(); when setting up the library.\nThis directly redirects the user to the identity server if there are no valid tokens. Ensure you have your issuer set to your discovery document endpoint!\nCalling a Web API with an Access Token\nYou can automate this task by switching sendAccessToken on and by setting allowedUrls to an array with prefixes for the respective URLs. Use lower case for the prefixes.\nOAuthModule.forRoot({\n resourceServer: {\n allowedUrls: ['http://www.angular.at/api'],\n sendAccessToken: true\n }\n})If you need more versatility, you can look in the documentation how to setup a custom interceptor.\nToken Refresh\nSee docs: https://manfredsteyer.github.io/angular-oauth2-oidc/docs/additional-documentation/refreshing-a-token.html\nRouting\nIf you use the PathLocationStrategy (which is on by default) and have a general catch-all-route (path: '**') you should be fine. Otherwise look up the section Routing with the HashStrategy in the documentation.\nImplicit Flow\nNowadays, using code flow + PKCE -- as shown above -- is the recommended OAuth 2/OIDC flow for SPAs. To use the older implicit flow, lookup this docs: https://manfredsteyer.github.io/angular-oauth2-oidc/docs/additional-documentation/implicit-flow.html\nMore Documentation (!)\nSee the documentation for more information about this library.\nTutorials\n\nTutorial with Demo Servers available online\nAngular Authentication with OpenID Connect and Okta in 20 Minutes\nAdd Authentication to Your Angular PWA\nBuild an Ionic App with User Authentication\nOn-Site Workshops\nAngular 6 with Auth0 using this library\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"license.html":{"url":"license.html","title":"getting-started - license","body":"\n \n\nCopyright (c) 2017 Manfred Steyer\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"modules.html":{"url":"modules.html","title":"modules - modules","body":"\n \n\n\n\n\n Modules\n\n\n \n \n \n \n OAuthModule\n \n \n \n No graph available.\n \n \n Browse\n \n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"overview.html":{"url":"overview.html","title":"overview - overview","body":"\n \n\n\n\n Overview\n\n \n\n \n \n\n\n\n\n\ndependencies\n\nLegend\n\n  Declarations\n\n  Module\n\n  Bootstrap\n\n  Providers\n\n  Exports\n\n\n\n \n \n \n Zoom in\n Reset\n Zoom out\n \n\n \n\n \n \n \n \n \n \n 1 Module\n \n \n \n \n \n \n \n \n 4 Injectables\n \n \n \n \n \n \n \n 19 Classes\n \n \n \n \n \n \n \n 5 Interfaces\n \n \n \n \n\n\n \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/typealiases.html":{"url":"miscellaneous/typealiases.html","title":"miscellaneous-typealiases - typealiases","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n Miscellaneous\n Type aliases\n\n\n\n Index\n \n \n \n \n \n \n EventType   (projects/.../events.ts)\n \n \n \n \n \n \n\n\n projects/lib/src/events.ts\n \n \n \n \n \n \n EventType\n \n \n \n \n \"discovery_document_loaded\" | \"jwks_load_error\" | \"invalid_nonce_in_state\" | \"discovery_document_load_error\" | \"discovery_document_validation_error\" | \"user_profile_loaded\" | \"user_profile_load_error\" | \"token_received\" | \"token_error\" | \"code_error\" | \"token_refreshed\" | \"token_refresh_error\" | \"silent_refresh_error\" | \"silently_refreshed\" | \"silent_refresh_timeout\" | \"token_validation_error\" | \"token_expires\" | \"session_changed\" | \"session_error\" | \"session_terminated\" | \"logout\" | \"popup_closed\" | \"popup_blocked\"\n\n \n \n \n \n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/variables.html":{"url":"miscellaneous/variables.html","title":"miscellaneous-variables - variables","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n Miscellaneous\n Variables\n\n\n\n Index\n \n \n \n \n \n \n AUTH_CONFIG   (projects/.../tokens.ts)\n \n \n err   (projects/.../jwks-validation-handler.ts)\n \n \n \n \n \n \n\n\n projects/lib/src/tokens.ts\n \n \n \n \n \n \n \n \n AUTH_CONFIG\n \n \n \n \n \n \n Default value : new InjectionToken('AUTH_CONFIG')\n \n \n\n\n \n \n\n projects/lib/src/token-validation/jwks-validation-handler.ts\n \n \n \n \n \n \n \n \n err\n \n \n \n \n \n \n Default value : `PLEASE READ THIS CAREFULLY:\n\nBeginning with angular-oauth2-oidc version 9, the JwksValidationHandler\nhas been moved to an library of its own. If you need it for implementing\nOAuth2/OIDC **implicit flow**, please install it using npm:\n\n npm i angular-oauth2-oidc-jwks --save\n\nAfter that, you can import it into your application:\n\n import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\n\nPlease note, that this dependency is not needed for the **code flow**,\nwhich is nowadays the **recommented** one for single page applications.\nThis also results in smaller bundle sizes.\n`\n \n \n\n\n \n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/getting-started.html":{"url":"additional-documentation/getting-started.html","title":"additional-page - Getting Started","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nGetting Started\nPlease find the Getting Started Guide in the README above.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/preserving-state-(like-the-requested-url).html":{"url":"additional-documentation/preserving-state-(like-the-requested-url).html","title":"additional-page - Preserving State (like the Requested URL)","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nPreserving State (like the Requested URL)\nWhen calling initImplicitFlow, you can pass an optional state which could be the requested url:\nthis.oauthService.initImplicitFlow('http://www.myurl.com/x/y/z');After login succeeded, you can read this state:\nthis.oauthService.tryLogin({\n onTokenReceived: (info) => {\n console.debug('state', info.state);\n }\n})\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/refreshing-a-token.html":{"url":"additional-documentation/refreshing-a-token.html","title":"additional-page - Refreshing a Token","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nRefreshing a Token using Code Flow (not Implicit Flow!)\nWhen using code flow, you can get an refresh_token. While the original standard DOES NOT allow this for SPAs, the mentioned OAuth 2.0 Security Best Current Practice document proposes to ease this limitation. However, it specifies a list of requirements one should take care about before using refresh_tokens. Please make sure you respect those requirements.\nPlease also note, that you have to request the offline_access scope to get an refresh token.\nTo refresh your token, just call the refresh method:\nthis.oauthService.refresh();Automatically refreshing a token when/ before it expires (Code Flow and Implicit Flow)\nTo automatically refresh a token when/ some time before it expires, just call the following method after configuring the OAuthService:\nthis.oauthService.setupAutomaticSilentRefresh();By default, this event is fired after 75% of the token's life time is over. You can adjust this factor by setting the property timeoutFactor to a value between 0 and 1. For instance, 0.5 means, that the event is fired after half of the life time is over and 0.33 triggers the event after a third.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/silent-refresh.html":{"url":"additional-documentation/silent-refresh.html","title":"additional-page - Silent Refresh","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nRefreshing when using Implicit Flow (Implicit Flow and Code Flow)\nNotes for Code Flow: You can also use this strategy for refreshing tokens when using code flow. However, please note, the strategy described within Token Refresh is far easier in this case.\nTo refresh your tokens when using implicit flow you can use a silent refresh. This is a well-known solution that compensates the fact that implicit flow does not allow for issuing a refresh token. It uses a hidden iframe to get another token from the auth server. When the user is there still logged in (by using a cookie) it will respond without user interaction and provide new tokens.\nTo use this approach, setup a redirect uri for the silent refresh.\nFor this, you can set the property silentRefreshRedirectUri in the config object:\n// This api will come in the next version\n\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n\n // Url of the Identity Provider\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // URL of the SPA to redirect the user after silent refresh\n silentRefreshRedirectUri: window.location.origin + '/silent-refresh.html',\n\n // defaults to true for implicit flow and false for code flow\n // as for code code the default is using a refresh_token\n // Also see docs section 'Token Refresh'\n useSilentRefresh: true,\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n clientId: 'spa-demo',\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n scope: 'openid profile email voucher',\n}As an alternative, you can set the same property directly with the OAuthService:\nthis.oauthService.silentRefreshRedirectUri = window.location.origin + \"/silent-refresh.html\";Please keep in mind that this uri has to be configured at the auth-server too.\nThis file is loaded into the hidden iframe after getting new tokens. Its only task is to send the received tokens to the main application:\n\n\n \n (window.opener || window.parent).postMessage(location.hash || ('#' + location.search), location.origin);\n \n\nPlease make sure that this file is copied to your output directory by your build task. When using the CLI you can define it as an asset for this. For this, you have to add the following line to the file .angular-cli.json:\n\"assets\": [\n [...],\n \"silent-refresh.html\"\n],To perform a silent refresh, just call the following method:\nthis\n .oauthService\n .silentRefresh()\n .then(info => console.debug('refresh ok', info))\n .catch(err => console.error('refresh error', err));When there is an error in the iframe that prevents the communication with the main application, silentRefresh will give you a timeout. To configure the timespan for this, you can set the property silentRefreshTimeout (msec). The default value is 20.000 (20 seconds).\nAutomatically refreshing a token when/ before it expires (Code Flow and Implicit Flow)\nTo automatically refresh a token when/ some time before it expires, just call the following method after configuring the OAuthService:\nthis.oauthService.setupAutomaticSilentRefresh();By default, this event is fired after 75% of the token's life time is over. You can adjust this factor by setting the property timeoutFactor to a value between 0 and 1. For instance, 0.5 means, that the event is fired after half of the life time is over and 0.33 triggers the event after a third.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/working-with-httpinterceptors.html":{"url":"additional-documentation/working-with-httpinterceptors.html","title":"additional-page - Working with HttpInterceptors","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nInterceptors\nSince 3.1 the library uses a default HttpInterceptor that takes care about transmitting the access_token to the resource server and about error handling for security related errors (HTTP status codes 401 and 403) received from the resource server. To put in on, just set sendAccessToken to true and set allowedUrls to an array with prefixes for the respective urls. Use lower case for the prefixes:\nOAuthModule.forRoot({\n resourceServer: {\n allowedUrls: ['http://www.angular.at/api'],\n sendAccessToken: true\n }\n})You can provide an error handler for the urls white listed here by provding a service for the token OAuthResourceServerErrorHandler.\nTo implement such a service, implement the abstract class OAuthResourceServerErrorHandler. The following example shows the default implemantion that just passes the cought error through:\nexport class OAuthNoopResourceServerErrorHandler implements OAuthResourceServerErrorHandler {\n\n handleError(err: HttpResponse): Observable {\n return _throw(err);\n }\n\n}Custom Interceptors\nFeel free to write custom interceptors but keep in mind that injecting the OAuthService into them creates a circular dependency which leads to an error. The easiest way to prevent this is to use the OAuthStorage directly which also provides the access_token:\nimport { Injectable, Inject, Optional } from '@angular/core';\nimport { OAuthService, OAuthStorage } from 'angular-oauth2-oidc';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';\nimport {Observable} from 'rxjs/Observable';\nimport { OAuthResourceServerErrorHandler } from \"./resource-server-error-handler\";\nimport { OAuthModuleConfig } from \"../oauth-module.config\";\n\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class DefaultOAuthInterceptor implements HttpInterceptor {\n\n constructor(\n private authStorage: OAuthStorage,\n private errorHandler: OAuthResourceServerErrorHandler,\n @Optional() private moduleConfig: OAuthModuleConfig\n ) {\n }\n\n private checkUrl(url: string): boolean {\n let found = this.moduleConfig.resourceServer.allowedUrls.find(u => url.startsWith(u));\n return !!found;\n }\n\n public intercept(req: HttpRequest, next: HttpHandler): Observable> {\n\n let url = req.url.toLowerCase();\n\n if (!this.moduleConfig) return next.handle(req);\n if (!this.moduleConfig.resourceServer) return next.handle(req);\n if (!this.moduleConfig.resourceServer.allowedUrls) return next.handle(req);\n if (!this.checkUrl(url)) return next.handle(req);\n\n let sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;\n\n if (sendAccessToken) {\n\n let token = this.authStorage.getItem('access_token');\n let header = 'Bearer ' + token;\n\n let headers = req.headers\n .set('Authorization', header);\n\n req = req.clone({ headers });\n }\n\n return next.handle(req).catch(err => this.errorHandler.handleError(err));\n\n }\n\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/callback-after-login.html":{"url":"additional-documentation/callback-after-login.html","title":"additional-page - Callback after login","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nCallback after login\nThere is a callback onTokenReceived, that is called after a successful login. In this case, the lib received the access_token as\nwell as the id_token, if it was requested. If there is an id_token, the lib validated it.\nthis.oauthService.tryLogin({\n onTokenReceived: context => {\n //\n // Output just for purpose of demonstration\n // Don't try this at home ... ;-)\n //\n console.debug(\"logged in\");\n console.debug(context);\n }\n});\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/popup-based-login.html":{"url":"additional-documentation/popup-based-login.html","title":"additional-page - Popup-based Login","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nLogging in With a Popup\nThanks to a great community contribution, this library also supports logging the user in via a popup. For this, you need to do two things:\n\nUse initLoginFlowInPopup instead of initLoginFlow.\nCreate and configure a silent-refresh.html as described here *.\n\n* Please note this does not mean that you have to use silent refresh too.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/custom-query-parameters.html":{"url":"additional-documentation/custom-query-parameters.html","title":"additional-page - Custom Query Parameters","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nCustom Query Parameters\nYou can set the property customQueryParams to a hash with custom parameter that are transmitted when starting implicit flow.\nthis.oauthService.customQueryParams = {\n 'tenant': '4711',\n 'otherParam': 'someValue'\n};\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/events.html":{"url":"additional-documentation/events.html","title":"additional-page - Events","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nEvents\nThe library informs you about its tasks and state using events.\nThis is an Observable which publishes a stream of events as they occur in the service.\nYou can log these events to the console for debugging information.\nA short snippet you could use:\nthis.oauthService.events.subscribe(e => console.log(e));Or a longer, more extensive version that logs them at different levels:\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\n\n// ...\n\nthis.authService.events.subscribe(event => {\n if (event instanceof OAuthErrorEvent) {\n console.error(event);\n } else {\n console.warn(event);\n }\n});Here's a list of the main events you might encounter:\n\ndiscovery_document_loaded is published whenever the service has retrieved the openid configuration and successfully saved the jwks information\ninvalid_nonce_in_state is published during tryLogin, when an access token has been requested and the state check was not disabled via the options, only in case the nonce is not as expected (see OAuth2 spec for more details about the nonce)\nuser_profile_loaded is published just before loadUserProfile() successfully resolves\ntoken_received is published whenever the requested token(s) have been successfully received and stored\nsilently_refreshed is published when the silent refresh timer has gone off and the library has also successfully refreshed the tokens (only applicable to Implicit Flow)\nsilent_refresh_timeout is published if the silent refresh timer has gone off but it takes too long to successfully refresh\nsession_error will only be published if the session checks encounter an error\n\nFor a full list of available events see the string based enum in the file events.ts.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/routing-with-the-hashstrategy.html":{"url":"additional-documentation/routing-with-the-hashstrategy.html","title":"additional-page - Routing with the HashStrategy","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nRouting with the HashStrategy\nIf you are leveraging the LocationStrategy which the Router is using by default, you can skip this section.\nWhen using the HashStrategy for Routing, the Router will override the received hash fragment with the tokens when it performs it initial navigation. This prevents the library from reading them. To avoid this, disable initial navigation when setting up the routes for your root module:\nexport let AppRouterModule = RouterModule.forRoot(APP_ROUTES, {\n useHash: true,\n initialNavigation: false\n});After tryLogin did its job, you can manually perform the initial navigation:\nthis.oauthService.tryLogin().then(_ => {\n this.router.navigate(['/']);\n})Another solution is the use a redirect uri that already contains the initial route. In this case the router will not override it. An example for such a redirect uri is\n http://localhost:8080/#/home\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/adapt-id_token-validation.html":{"url":"additional-documentation/adapt-id_token-validation.html","title":"additional-page - Adapt id_token Validation","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfigure/ Adapt id_token Validation\nYou can hook in an implementation of the interface TokenValidator to validate the signature of the received id_token and its at_hash property. This packages provides two implementations:\n\nJwksValidationHandler\nNullValidationHandler\n\nThe former one validates the signature against public keys received via the discovery document (property jwks) and the later one skips the validation on client side.\nimport { JwksValidationHandler } from 'angular-oauth2-oidc';\n\n[...]\n\nthis.oauthService.tokenValidationHandler = new JwksValidationHandler();In cases where no ValidationHandler is defined, you receive a warning on the console. This means that the library wants you to explicitly decide on this.\nDependency Injection\nYou can also setup a ValidationHandler by leveraging dependency injection:\n[...]\nproviders: [\n { provide: ValidationHandler, useClass: JwksValidationHandler },\n],\n[...]\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/session-checks.html":{"url":"additional-documentation/session-checks.html","title":"additional-page - Session Checks","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nSession Checks\nBeginning with version 2.1, you can receive a notification when the user signs out with the identity provider.\nThis is implemented as defined by the OpenID Connect Session Management 1.0 spec.\nWhen this option is activated, the library also automatically ends your local session. This means, the current tokens\nare deleted by calling logOut. In addition to that, the library sends a session_terminated event, you can register\nfor to perform a custom action.\nPlease note that this option can only be used when also the identity provider in question supports it.\nConfiguration\nTo activate the session checks that leads to the mentioned notifications, set the configuration property\nsessionChecksEnabled:\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n redirectUri: window.location.origin + '/index.html',\n silentRefreshRedirectUri: window.location.origin + '/silent-refresh.html',\n clientId: 'spa-demo',\n scope: 'openid profile email voucher',\n\n // Activate Session Checks:\n sessionChecksEnabled: true,\n}Events\nTo get notified, you can hook up for the event session_terminated:\nthis.oauthService.events.pipe(filter(e => e.type === 'session_terminated')).subscribe(e => {\n console.debug('Your session has been terminated!');\n})\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/server-side-rendering.html":{"url":"additional-documentation/server-side-rendering.html","title":"additional-page - Server Side Rendering","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nServer Side Rendering\nThere is a great blog post that shows how this library can be used together with server side rendering:\nhttps://medium.com/lankapura/angular-server-side-rendering-for-authenticated-users-a021627fd9d3The sample for this can be found here:\nhttps://github.com/lankaapura/Angular-AspNetCore-Idsvr\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{"url":"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html","title":"additional-page - Configure Library for Implicit Flow without discovery document","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfigure Library for Implicit Flow (without discovery document)\nWhen you don't have a discovery document, you have to configure more properties manually:\nPlease note that the following sample uses the original config API. For information about the new config API have a look to the project's README above.\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // Login-Url\n this.oauthService.loginUrl = \"https://steyer-identity-server.azurewebsites.net/identity/connect/authorize\"; //Id-Provider?\n\n // URL of the SPA to redirect the user to after login\n this.oauthService.redirectUri = window.location.origin + \"/index.html\";\n\n // The SPA's id. Register SPA with this id at the auth-server\n this.oauthService.clientId = \"spa-demo\";\n\n // set the scope for the permissions the client should request\n this.oauthService.scope = \"openid profile email voucher\";\n\n // Use setStorage to use sessionStorage or another implementation of the TS-type Storage\n // instead of localStorage\n this.oauthService.setStorage(sessionStorage);\n\n // To also enable single-sign-out set the url for your auth-server's logout-endpoint here\n this.oauthService.logoutUrl = \"https://steyer-identity-server.azurewebsites.net/identity/connect/endsession\";\n\n // This method just tries to parse the token(s) within the url when\n // the auth-server redirects the user back to the web-app\n // It doesn't send the user the the login page\n this.oauthService.tryLogin();\n\n\n }\n\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{"url":"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html","title":"additional-page - Using an ID Provider that Fails Discovery Document Validation","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nDiscovery Document Validation\nThe configuration parameter strictDiscoveryDocumentValidation is set true by default. This ensures that all of the endpoints provided via the ID Provider discovery document share the same base URL as the issuer parameter.\nSeveral ID Providers (i.e. Google OpenID, WS02-IS, PingOne) provide different domains or path params for various endpoints in the discovery document. These providers may still adhere to the OpenID Connect Provider Configuration specification, but will fail to pass this library's discovery document validation.\nTo use this library with an ID Provider that does not maintain a consistent base URL across the discovery document endpoints, set the strictDiscoveryDocumentValidation parameter to false in your configuration:\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n\n // Url of the Identity Provider\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n clientId: 'spa-demo',\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n scope: 'openid profile email voucher',\n\n // turn off validation that discovery document endpoints start with the issuer url defined above\n strictDiscoveryDocumentValidation: false\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-systemjs.html":{"url":"additional-documentation/using-systemjs.html","title":"additional-page - Using SystemJS","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nUsing SystemJS\nThanks to Kevin BEAUGRAND for adding this information regarding SystemJS.\nSystem.config({\n...\n meta: {\n 'angular-oauth2-oidc': {\n deps: ['jsrsasign']\n },\n }\n...\n});Also thanks to ppanthony for sharing his SystemJS config:\n'angular-oauth2-oidc': {\n main: 'angular-oauth2-oidc.umd.js',\n format: 'cjs',\n defaultExtension: 'js',\n map: {\n 'jsrsasign': '/node_modules/jsrsasign/lib/jsrsasign',\n },\n meta: {\n 'angular-oauth2-oidc': {\n deps: ['require','jsrsasign']\n },\n }\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-implicit-flow.html":{"url":"additional-documentation/using-implicit-flow.html","title":"additional-page - Using Implicit Flow","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfiguring for Implicit Flow\nThis section shows how to implement login leveraging implicit flow. This is the OAuth2/OIDC flow which was originally intended for Single Page Application. \nMeanwhile using Code Flow instead is a best practice and with OAuth 2.1 implicit flow will be deprecated*.\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n // Url of the Identity Provider\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // The SPA's id. The SPA is registered with this id at the auth-server\n clientId: 'spa-demo',\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n scope: 'openid profile email voucher',\n}Configure the OAuthService with this config object when the application starts up:\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { JwksValidationHandler } from 'angular-oauth2-oidc';\nimport { authConfig } from './auth.config';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'flight-app',\n templateUrl: './app.component.html'\n})\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n this.configure();\n }\n\n private configure() {\n this.oauthService.configure(authConfig);\n this.oauthService.tokenValidationHandler = new JwksValidationHandler();\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\n }\n}Implementing a Login Form\nAfter you've configured the library, you just have to call initImplicitFlow to login using OAuth2/ OIDC.\nimport { Component } from '@angular/core';\nimport { OAuthService } from 'angular-oauth2-oidc';\n\n@Component({\n templateUrl: \"app/home.html\"\n})\nexport class HomeComponent {\n\n constructor(private oauthService: OAuthService) {\n }\n\n public login() {\n this.oauthService.initLoginFlow();\n }\n\n public logoff() {\n this.oauthService.logOut();\n }\n\n public get name() {\n let claims = this.oauthService.getIdentityClaims();\n if (!claims) return null;\n return claims.given_name;\n }\n\n}The following snippet contains the template for the login page:\n\n Hallo\n\n\n Hallo, {{name}}\n\n\n\n Login\n\n\n Logout\n\n\n\n Username/Passwort zum Testen: max/geheim\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-password-flow.html":{"url":"additional-documentation/using-password-flow.html","title":"additional-page - Using Password Flow","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nUsing Password-Flow\nThis section shows how to use the password flow, which demands the user to directly enter his or her password into the client.\nPlease note that from an OAuth2/OIDC perspective, the code flow is better suited for logging into a SPA and the flow described here should only be used,\nwhen a) there is a strong trust relations ship between the client and the auth server and when b) other flows are not possible.\nPlease also note that with OAuth 2.1, password flow will be deprecated. \nConfigure Library for Password Flow (using discovery document)\nTo configure the library you just have to set some properties on startup. For this, the following sample uses the constructor of the AppComponent which is called before routing kicks in.\nPlease not, that this configuration is quite similar to the one for the implcit flow.\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // The SPA's id. Register SPA with this id at the auth-server\n this.oauthService.clientId = \"demo-resource-owner\";\n\n // set the scope for the permissions the client should request\n // The auth-server used here only returns a refresh token (see below), when the scope offline_access is requested\n this.oauthService.scope = \"openid profile email voucher offline_access\";\n\n // Use setStorage to use sessionStorage or another implementation of the TS-type Storage\n // instead of localStorage\n this.oauthService.setStorage(sessionStorage);\n\n // Set a dummy secret\n // Please note that the auth-server used here demand the client to transmit a client secret, although\n // the standard explicitly cites that the password flow can also be used without it. Using a client secret\n // does not make sense for a SPA that runs in the browser. That's why the property is called dummyClientSecret\n // Using such a dummy secret is as safe as using no secret.\n this.oauthService.dummyClientSecret = \"geheim\";\n\n // Load Discovery Document and then try to login the user\n let url = 'https://steyer-identity-server.azurewebsites.net/identity/.well-known/openid-configuration';\n this.oauthService.loadDiscoveryDocument(url).then(() => {\n // Do what ever you want here\n });\n\n }\n\n}Configure Library for Password Flow (without discovery document)\nIn cases where you don't have an OIDC based discovery document you have to configure some more properties manually:\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // Login-Url\n this.oauthService.tokenEndpoint = \"https://steyer-identity-server.azurewebsites.net/identity/connect/token\";\n\n // Url with user info endpoint\n // This endpont is described by OIDC and provides data about the loggin user\n // This sample uses it, because we don't get an id_token when we use the password flow\n // If you don't want this lib to fetch data about the user (e. g. id, name, email) you can skip this line\n this.oauthService.userinfoEndpoint = \"https://steyer-identity-server.azurewebsites.net/identity/connect/userinfo\";\n\n // The SPA's id. Register SPA with this id at the auth-server\n this.oauthService.clientId = \"demo-resource-owner\";\n\n // set the scope for the permissions the client should request\n this.oauthService.scope = \"openid profile email voucher offline_access\";\n\n // Set a dummy secret\n // Please note that the auth-server used here demand the client to transmit a client secret, although\n // the standard explicitly cites that the password flow can also be used without it. Using a client secret\n // does not make sense for a SPA that runs in the browser. That's why the property is called dummyClientSecret\n // Using such a dummy secret is as safe as using no secret.\n this.oauthService.dummyClientSecret = \"geheim\";\n\n }\n\n}Fetching an Access Token by providing the current user's credentials\nthis.oauthService.fetchTokenUsingPasswordFlow('max', 'geheim').then((resp) => {\n\n // Loading data about the user\n return this.oauthService.loadUserProfile();\n\n}).then(() => {\n\n // Using the loaded user data\n let claims = this.oAuthService.getIdentityClaims();\n if (claims) console.debug('given_name', claims.given_name);\n\n})There is also a short form for fetching the token and loading the user profile:\nthis.oauthService.fetchTokenUsingPasswordFlowAndLoadUserProfile('max', 'geheim').then(() => {\n let claims = this.oAuthService.getIdentityClaims();\n if (claims) console.debug('given_name', claims.given_name);\n});Refreshing the current Access Token\nUsing the password flow you MIGHT get a refresh token (which isn't the case with the implicit flow by design!). You can use this token later to get a new access token, e. g. after it expired.\nthis.oauthService.refreshToken().then(() => {\n console.debug('ok');\n})\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/configure-custom-oauthstorage.html":{"url":"additional-documentation/configure-custom-oauthstorage.html","title":"additional-page - Configure custom OAuthStorage","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfigure custom OAuthStorage\nThis library uses sessionStorage as the default storage provider. You can customize this by using localStorage or your own storage solution.\nUsing localStorage\nIf you want to use localStorage instead of sessionStorage, you can add a provider to your AppModule. This works as follows:\nimport { HttpClientModule } from '@angular/common/http';\nimport { OAuthModule } from 'angular-oauth2-oidc';\n// etc.\n\n// We need a factory, since localStorage is not available during AOT build time.\nexport function storageFactory() : OAuthStorage {\n return localStorage\n}\n\n@NgModule({\n imports: [ \n // etc.\n HttpClientModule,\n OAuthModule.forRoot()\n ],\n declarations: [\n AppComponent,\n HomeComponent,\n // etc.\n ],\n bootstrap: [\n AppComponent \n ],\n providers: [\n { provide: OAuthStorage, useFactory: storageFactory }\n ]\n})\nexport class AppModule {\n}Custom storage solution\nIf you want to use a custom storage solution, you can extend the OAuthStorage class. Documentation can be found here. Then add it as a provider, just like in the localStorage example above.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/manually-skipping-login-form.html":{"url":"additional-documentation/manually-skipping-login-form.html","title":"additional-page - Manually Skipping Login Form","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nManually Skipping the Login Form\nFirst, try to use the loadDiscoveryDocumentAndLogin method instead of loadDiscoveryDocumentAndTryLogin. If you need more control, the following could be interesting for you.\nthis.oauthService\n .loadDiscoveryDocumentAndTryLogin(/* { your LoginOptions }*/) // checks to see if the current url contains id token and access token\n .(hasReceivedTokens => {\n // this would have stored all the tokens needed\n if (hasReceivedTokens) {\n // carry on with your app\n return Promise.resolve();\n\n /* if you wish to do something when the user receives tokens from the identity server,\n * use the event stream or the `onTokenReceived` callback in LoginOptions.\n *\n * this.oauthService.events(filter(e => e.type === 'token_received')).subscribe()\n */\n } else {\n // may want to check if you were previously authenticated\n if (this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken()) {\n return Promise.resolve();\n } else {\n // to safe guard this from progressing through the calling promise,\n // resolve it when it directed to the sign up page\n return new Promise(resolve => {\n this.oauthService.initLoginFlow();\n // example if you are using explicit flow\n this.window.addEventListener('unload', () => {\n resolve(true);\n });\n });\n }\n }\n })\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/original-config-api.html":{"url":"additional-documentation/original-config-api.html","title":"additional-page - Original Config API","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nOriginal Config API\n\nThis describes the older config API which is nowadays only supported for the sake of backwards compatibility. \n\nTo configure the library you just have to set some properties on startup. For this, the following sample uses the constructor of the AppComponent which is called before routing kicks in.\nPlease note that the following sample uses the original config API. For information about the new config API have a look to the project's README above.\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // URL of the SPA to redirect the user to after login\n this.oauthService.redirectUri = window.location.origin + \"/index.html\";\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n this.oauthService.clientId = \"spa-demo\";\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n this.oauthService.scope = \"openid profile email voucher\";\n\n // The name of the auth-server that has to be mentioned within the token\n this.oauthService.issuer = \"https://steyer-identity-server.azurewebsites.net/identity\";\n\n // Load Discovery Document and then try to login the user\n this.oauthService.loadDiscoveryDocument().then(() => {\n\n // This method just tries to parse the token(s) within the url when\n // the auth-server redirects the user back to the web-app\n // It dosn't send the user the the login page\n this.oauthService.tryLogin();\n\n });\n\n }\n\n}If you find yourself receiving errors related to discovery document validation, your ID Provider may have OAuth2 endpoints that do not use the issuer value as a consistent base URL. You can turn off strict validation of discovery document endpoints for this scenario. See Discovery Document Validation for details.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"}} + "index": {"version":"2.3.8","fields":["title","body"],"fieldVectors":[["title/classes/AbstractValidationHandler.html",[0,0.116,1,3.042]],["body/classes/AbstractValidationHandler.html",[0,0.112,1,2.948,2,0.857,3,0.486,4,0.537,5,0.486,6,3.115,7,4.138,8,1.337,9,1.608,10,1.756,11,1.392,12,2.049,13,2.718,14,1.593,15,1.747,16,3.815,17,2.22,18,1.206,19,2.948,20,3.815,21,0.591,22,1.531,23,4.755,24,4.207,25,3.235,26,3.235,27,2.188,28,1.735,29,4.244,30,0.945,31,2.844,32,3.236,33,2.046,34,2.338,35,1.977,36,1.156,37,1.452,38,0.018,39,1.48,40,0.945,41,1.044,42,3.235,43,1.831,44,2.22,45,3.236,46,1.864,47,2.844,48,3.236,49,4.256,50,3.236,51,2.074,52,3.236,53,3.236,54,1.778,55,2.718,56,3.236,57,4.207,58,2.844,59,4.332,60,4.138,61,3.509,62,1.581,63,1.737,64,1.035,65,2.718,66,2.844,67,3.235,68,0.462,69,1.993,70,1.993,71,2.188,72,0.547,73,1.329,74,1.202,75,1.202,76,1.202,77,1.202,78,1.414,79,2.188,80,2.188,81,2.188,82,1.142,83,0.898,84,2.22,85,3.236,86,2.188,87,2.188,88,1.838,89,2.188,90,2.188,91,2.188,92,0.713,93,2.188,94,2.188,95,2.188,96,1.993,97,4.256,98,2.188,99,4.256,100,2.188,101,2.188,102,2.188,103,0.874,104,3.851,105,2.188,106,2.188,107,2.188,108,2.188,109,0.681,110,2.188,111,1.838,112,2.188,113,2.188,114,0.007,115,0.01,116,0.007]],["title/injectables/DefaultHashHandler.html",[117,1.436,118,3.042]],["body/injectables/DefaultHashHandler.html",[0,0.132,3,0.612,4,0.676,5,0.612,6,3.244,8,1.683,10,1.244,14,1.031,20,3.206,21,0.744,22,1.806,25,3.679,27,4.38,28,1.818,29,3.972,30,0.973,37,1.495,38,0.018,39,1.363,40,0.973,41,1.075,42,2.313,43,1.884,44,1.884,68,0.806,72,0.542,88,2.313,103,1.342,109,1.363,114,0.016,115,0.011,116,0.008,117,1.642,118,3.477,119,2.509,120,4.729,121,4.961,122,4.961,123,3.58,124,4.271,125,4.902,126,3.58,127,3.58,128,4.271,129,2.535,130,3.58,131,5.558,132,1.185,133,3.817,134,2.509,135,3.082,136,3.082,137,3.082,138,3.477,139,3.408,140,2.509,141,3.082,142,4.271,143,3.082,144,1.993,145,3.082,146,3.082,147,4.902,148,3.082,149,3.082,150,3.477,151,4.271,152,4.271,153,3.082,154,3.082,155,3.082,156,3.082,157,3.082,158,4.271,159,3.082,160,2.98,161,3.082,162,3.082]],["title/interceptors/DefaultOAuthInterceptor.html",[163,3.737,164,3.042]],["body/interceptors/DefaultOAuthInterceptor.html",[0,0.091,3,0.585,4,0.646,5,0.585,14,0.985,21,0.711,22,1.75,28,0.858,30,0.822,37,1.262,38,0.018,39,1.151,40,0.822,41,1.138,43,1.133,55,3.107,68,1.121,72,0.374,84,2.932,92,1.205,103,1.406,114,0.008,115,0.011,116,0.008,117,1.591,132,1.133,139,2.834,160,2.056,164,3.369,165,2.946,166,5.558,167,3.422,168,5.558,169,2.391,170,3.422,171,2.194,172,2.136,173,4.785,174,3.621,175,4.785,176,3.621,177,3.422,178,4.139,179,2.946,180,5.19,181,4.885,182,5.19,183,3.422,184,4.785,185,3.591,186,2.946,187,4.139,188,1.806,189,4.139,190,2.398,191,3.422,192,3.422,193,1.524,194,2.946,195,3.422,196,4.139,197,3.422,198,2.633,199,0.782,200,1.668,201,2.211,202,2.701,203,2.633,204,2.946,205,2.398,206,2.684,207,2.946,208,1.375,209,3.422,210,3.422,211,2.946,212,2.946,213,2.946,214,0.782,215,2.946,216,2.946,217,2.946,218,2.946,219,2.946,220,3.107,221,2.946,222,4.808,223,4.808,224,4.139,225,3.422,226,3.422,227,1.528,228,1.375,229,3.422,230,3.422,231,2.633,232,1.922,233,3.422,234,3.422,235,3.422,236,3.422,237,3.422,238,3.422,239,3.422,240,3.422,241,2.946,242,4.139,243,3.422,244,2.946]],["title/classes/HashHandler.html",[0,0.116,138,3.042]],["body/classes/HashHandler.html",[0,0.138,2,1.144,3,0.649,4,0.716,5,0.649,6,2.725,8,1.784,9,1.451,10,1.58,14,1.093,20,3.337,21,0.789,22,1.88,25,2.453,27,4.516,28,1.8,29,4.072,30,0.649,37,0.996,38,0.018,39,0.908,40,0.649,41,0.716,42,2.453,43,1.256,44,1.943,68,0.839,72,0.564,88,2.453,103,1.37,109,1.405,114,0.016,115,0.012,116,0.009,117,1.709,118,2.66,120,3.973,124,3.268,125,3.268,128,3.268,129,1.69,131,5.424,132,1.256,133,3.973,134,2.66,135,4.446,136,4.446,137,4.446,138,4.114,139,3.444,140,2.66,141,3.268,142,4.446,143,3.268,144,2.074,145,3.268,146,3.268,147,5.054,148,3.268,149,3.268,150,3.619,151,4.446,152,4.446,153,3.268,154,3.268,155,3.268,156,3.268,157,3.268,158,4.446,159,3.268,160,3.102,161,3.268,162,3.268,245,3.796]],["title/classes/JwksValidationHandler.html",[0,0.116,246,2.607]],["body/classes/JwksValidationHandler.html",[0,0.108,2,1.227,3,0.696,4,0.768,5,0.696,6,2.857,8,1.914,9,1.556,16,3.498,21,0.846,22,1.971,26,3.498,30,1.04,36,1.119,37,1.421,38,0.018,39,1.296,40,0.925,41,1.022,43,1.792,44,1.792,57,4.169,65,2.631,68,0.988,72,0.445,78,2.693,114,0.009,115,0.013,116,0.013,139,1.914,169,3.025,201,2.631,246,4.169,247,4.661,248,3.025,249,4.661,250,5.414,251,4.661,252,5.414,253,1.834,254,4.679,255,2.013,256,5.414,257,2.58,258,1.692,259,1.615,260,5.414,261,3.498,262,4.361,263,4.071,264,3.132,265,5.414,266,4.071,267,4.071,268,1.286,269,2.853,270,2.709,271,1.72,272,3.505,273,2.853,274,2.287,275,3.132,276,2.148,277,2.853,278,2.853,279,1.556,280,1.237,281,3.132,282,4.165,283,3.132,284,2.631,285,1.914,286,1.482,287,2.853,288,1.286,289,2.853,290,3.132,291,2.631,292,0.807,293,2.853,294,3.132,295,3.132,296,3.132,297,4.071,298,4.071]],["title/classes/LoginOptions.html",[0,0.116,299,1.933]],["body/classes/LoginOptions.html",[0,0.131,2,0.581,3,0.532,4,0.364,5,0.33,9,0.737,10,1.535,11,0.638,12,1.359,14,0.555,15,0.983,18,1.15,21,0.401,28,1.92,30,0.948,33,2.112,34,1.316,35,0.906,38,0.018,40,0.901,41,1.271,44,0.638,46,1.487,51,0.983,54,1.316,62,1.666,63,0.669,64,0.702,68,0.313,72,0.652,73,1.558,74,1.316,75,0.815,76,0.815,77,0.815,82,1.25,83,1.42,92,1.322,103,0.401,109,0.462,114,0.004,115,0.007,116,0.004,117,1.03,129,1.386,132,0.638,144,1.805,171,1.133,172,1.753,193,0.859,199,0.711,200,1.08,206,0.815,208,1.573,214,0.711,227,1.236,228,1.25,253,0.939,258,0.78,259,1.076,268,0.609,271,1.316,280,1.205,286,0.702,288,1.824,299,1.386,300,0.959,301,0.559,302,1.464,303,2.001,304,1.316,305,1.841,306,1.947,307,1.947,308,1.947,309,1.655,310,1.947,311,1.928,312,1.488,313,2.572,314,2.147,315,2.004,316,1.548,317,1.636,318,1.548,319,1.386,320,1.548,321,2.001,322,2.001,323,1.316,324,1.548,325,1.684,326,2.235,327,1.548,328,1.386,329,1.464,330,1.548,331,1.548,332,0.939,333,1.928,334,1.08,335,1.386,336,1.548,337,1.947,338,0.983,339,1.928,340,1.464,341,1.981,342,1.899,343,1.316,344,1.316,345,1.464,346,1.25,347,1.548,348,2.235,349,1.464,350,1.548,351,1.464,352,2.352,353,1.928,354,1.899,355,1.548,356,1.03,357,1.464,358,1.548,359,2.349,360,1.92,361,1.899,362,1.928,363,1.386,364,1.841,365,0.906,366,1.928,367,1.548,368,1.25,369,1.548,370,1.316,371,1.316,372,1.548,373,1.548,374,1.548,375,1.548,376,1.316,377,1.548,378,1.928,379,1.316,380,1.548,381,2.319,382,3.115,383,0.815,384,0.702,385,1.548,386,0.859,387,0.702,388,0.815,389,0.859,390,0.906,391,0.859,392,0.959,393,2.453,394,0.959,395,0.959,396,0.959,397,0.959,398,0.906,399,0.815,400,0.959,401,0.638,402,0.774,403,0.815,404,0.815,405,0.906,406,0.906,407,1.548,408,1.548,409,1.548,410,0.906,411,0.959,412,0.959,413,0.959,414,2.453,415,0.815,416,0.609,417,0.959,418,0.906,419,0.959,420,0.959,421,0.959,422,1.464,423,1.316,424,1.548,425,1.655,426,1.464,427,0.959,428,0.906,429,0.959,430,0.959,431,0.859,432,0.609,433,0.581,434,0.959,435,0.859,436,0.959,437,0.906,438,0.609,439,0.638,440,0.609,441,0.906,442,0.702,443,0.959,444,0.959,445,0.959,446,0.959,447,0.959,448,0.959,449,0.959,450,0.959,451,0.959,452,0.959,453,0.959,454,0.959,455,0.959,456,0.959,457,0.959,458,0.959,459,0.959,460,0.959,461,0.959,462,0.959,463,0.959,464,0.959,465,0.959,466,0.959,467,0.959,468,0.959,469,0.959,470,0.959]],["title/injectables/MemoryStorage.html",[117,1.436,410,2.04]],["body/injectables/MemoryStorage.html",[0,0.141,3,0.599,4,0.422,5,0.382,10,1.606,11,0.74,12,0.776,14,0.644,15,0.706,18,0.941,21,0.465,22,1.275,28,1.946,30,0.738,33,1.863,34,0.945,37,1.133,38,0.018,39,1.033,40,0.738,41,0.922,43,1.429,44,0.74,46,1.6,51,1.106,54,1.48,62,1.543,63,0.776,64,0.814,68,0.363,72,0.684,73,1.676,74,1.48,75,0.945,76,0.945,77,0.945,82,0.898,83,1.364,92,1.082,103,0.465,109,0.535,114,0.005,115,0.008,116,0.005,117,1.159,119,1.567,129,1.56,132,0.74,144,2.26,171,1.275,172,1.543,193,0.996,199,0.511,200,0.776,206,0.945,208,1.407,214,0.511,227,1.187,228,0.898,253,0.674,258,0.56,259,0.838,268,0.706,271,0.945,280,0.986,286,0.814,288,1.543,299,0.996,300,1.112,301,0.402,302,1.051,303,1.56,305,1.051,306,1.112,307,1.112,308,1.112,309,0.945,310,1.112,312,1.159,313,2.176,314,1.947,315,1.696,316,1.112,317,1.275,318,1.112,319,0.996,320,1.112,321,1.56,322,1.56,323,0.945,324,1.112,325,1.459,326,1.742,327,1.112,328,0.996,329,1.051,330,1.112,331,1.112,332,0.674,334,0.776,335,0.996,336,1.112,337,1.742,338,0.706,340,1.051,341,1.963,342,1.48,343,0.945,344,0.945,345,1.051,346,0.898,347,1.112,348,2.147,349,1.051,350,1.112,351,1.051,354,1.48,355,1.112,356,0.74,357,1.051,358,1.112,359,1.923,360,1.572,361,1.48,363,0.996,364,1.646,367,1.112,368,0.898,369,1.112,370,0.945,371,0.945,372,1.112,373,1.112,374,1.112,375,1.112,376,0.945,377,1.112,379,0.945,380,1.112,381,2.494,382,3.345,383,0.945,384,0.814,385,1.742,386,0.996,387,0.814,388,0.945,389,0.996,390,1.051,391,0.996,392,1.112,393,2.639,394,1.112,395,1.112,396,1.112,397,1.112,398,1.051,399,0.945,400,1.112,401,0.74,402,0.898,403,0.945,404,0.945,405,1.051,406,1.051,407,2.147,408,2.147,409,2.147,410,1.646,411,1.112,412,1.112,413,1.112,414,2.639,415,0.945,416,0.706,417,1.112,418,1.051,419,1.112,420,1.112,421,1.112,422,1.646,423,1.48,424,1.742,425,1.825,426,1.646,427,1.112,428,1.051,429,1.112,430,1.112,431,0.996,432,0.706,433,0.674,434,1.112,435,0.996,436,1.112,437,2.297,438,0.706,439,0.74,440,0.706,441,1.051,442,0.814,443,1.112,444,1.112,445,1.112,446,1.112,447,1.112,448,1.112,449,1.112,450,1.112,451,1.112,452,1.112,453,1.112,454,1.112,455,1.112,456,1.112,457,1.112,458,1.112,459,1.112,460,1.112,461,1.112,462,1.112,463,1.112,464,1.112,465,1.112,466,1.112,467,1.112,468,1.112,469,1.112,470,1.112,471,3.015,472,3.015,473,3.015,474,2.236,475,2.236,476,2.236]],["title/classes/NullValidationHandler.html",[0,0.116,262,2.805]],["body/classes/NullValidationHandler.html",[0,0.124,2,1.403,3,0.795,4,0.878,5,0.795,6,3.423,8,2.187,9,1.778,12,2.251,14,1.7,16,3.816,21,0.967,22,2.149,26,3.816,30,1.009,37,1.55,38,0.018,39,1.413,40,1.009,41,1.115,43,1.954,44,2.258,57,4.486,65,3.816,68,0.756,72,0.508,103,1.228,114,0.011,115,0.014,116,0.011,201,4.191,248,3.679,262,3.816,264,4.542,314,1.954,477,5.584,478,5.083,479,5.083,480,5.905,481,4.542,482,5.905,483,4.653,484,4.653,485,4.653,486,4.653]],["title/classes/OAuthErrorEvent.html",[0,0.116,487,2.607]],["body/classes/OAuthErrorEvent.html",[0,0.176,2,1.287,3,1.064,4,0.806,5,0.73,10,1.07,30,0.73,37,1.121,38,0.018,39,1.022,40,1.172,41,0.806,46,2.12,64,2.267,72,0.749,114,0.01,115,0.013,116,0.01,169,2.778,232,2.398,261,4.268,268,1.967,487,3.356,488,2.759,489,4.43,490,4.364,491,4.63,492,4.364,493,4.269,494,2.564,495,2.759,496,2.564,497,2.759,498,2.759,499,2.564,500,2.759,501,2.759,502,2.759,503,2.759,504,2.759,505,2.759,506,2.564,507,2.564,508,2.759,509,2.759,510,2.759,511,2.564,512,2.564,513,2.123,514,2.759,515,2.759,516,2.992,517,2.759,518,4.629,519,4.364,520,2.759]],["title/classes/OAuthEvent.html",[0,0.116,489,2.805]],["body/classes/OAuthEvent.html",[0,0.177,2,1.315,3,1.075,4,0.823,5,0.745,10,1.093,30,0.745,37,1.145,38,0.018,39,1.044,40,1.18,41,0.823,46,1.708,64,1.588,72,0.754,114,0.01,115,0.013,116,0.01,169,2.817,232,2.45,261,4.065,268,1.987,487,2.62,488,2.818,489,4.46,490,4.409,491,4.654,492,3.057,494,2.62,495,2.818,496,2.62,497,2.818,498,2.818,499,2.62,500,2.818,501,2.818,502,2.818,503,2.818,504,2.818,505,2.818,506,2.62,507,2.62,508,2.818,509,2.818,510,2.818,511,2.62,512,2.62,513,2.169,514,2.818,515,2.818,516,3.057,517,2.818,518,4.667,519,4.409,520,2.818,521,4.361]],["title/classes/OAuthInfoEvent.html",[0,0.116,520,2.805]],["body/classes/OAuthInfoEvent.html",[0,0.177,2,1.304,3,1.176,4,0.816,5,0.739,10,1.084,30,0.739,37,1.135,38,0.018,39,1.035,40,1.176,41,0.816,46,1.698,64,1.574,72,0.752,114,0.01,115,0.013,116,0.01,169,2.801,232,2.429,261,4.289,268,1.979,487,2.597,488,2.794,489,4.448,490,4.391,491,4.644,492,3.03,494,2.597,495,2.794,496,2.597,497,2.794,498,2.794,499,2.597,500,2.794,501,2.794,502,2.794,503,2.794,504,2.794,505,2.794,506,2.597,507,2.597,508,2.794,509,2.794,510,2.794,511,2.597,512,2.597,513,2.15,514,2.794,515,2.794,516,3.03,517,2.794,518,4.652,519,4.391,520,3.64,522,4.324]],["title/classes/OAuthLogger.html",[0,0.116,391,1.933]],["body/classes/OAuthLogger.html",[0,0.137,2,0.633,3,0.806,4,0.396,5,0.359,9,0.802,10,1.773,11,1.103,12,0.728,14,0.604,15,0.663,18,0.903,21,0.436,22,1.213,28,1.925,30,0.879,33,1.813,34,0.887,37,1.351,38,0.018,39,1.232,40,0.879,41,1.034,43,1.703,44,0.695,46,1.651,51,1.052,54,1.408,62,1.49,63,0.728,64,0.764,68,0.341,72,0.67,73,1.73,74,1.408,75,0.887,76,0.887,77,0.887,82,0.843,83,1.309,92,1.039,103,0.436,109,0.502,114,0.005,115,0.008,116,0.005,117,1.103,129,1.484,132,0.695,144,1.895,171,1.213,172,1.625,193,0.935,199,0.479,200,1.438,206,0.887,208,1.338,214,0.479,227,1.139,228,0.843,253,0.633,258,0.526,259,0.797,268,0.663,271,0.887,280,0.947,286,1.213,288,1.49,299,0.935,300,1.044,301,0.377,302,0.987,303,1.484,305,0.987,306,1.044,307,1.044,308,1.044,309,0.887,310,1.044,312,1.103,313,2.101,314,1.9,315,1.637,316,1.044,317,1.213,318,1.044,319,0.935,320,1.044,321,1.484,322,1.484,323,0.887,324,1.044,325,1.415,326,1.657,327,1.044,328,0.935,329,0.987,330,1.044,331,1.044,332,0.633,334,0.728,335,0.935,336,1.044,337,2.061,338,0.663,340,0.987,341,1.895,342,1.408,343,0.887,344,0.887,345,0.987,346,0.843,347,1.044,348,2.346,349,0.987,350,1.044,351,0.987,354,1.408,355,1.044,356,0.695,357,0.987,358,2.724,359,1.845,360,1.508,361,1.408,363,0.935,364,1.566,367,1.044,368,0.843,369,1.044,370,0.887,371,0.887,372,1.044,373,1.044,374,1.044,375,1.044,376,0.887,377,1.044,379,0.887,380,1.044,381,2.419,382,3.41,383,1.408,384,1.213,385,2.061,386,1.484,387,1.213,388,1.408,389,1.484,390,1.566,391,1.484,392,1.657,393,3.376,394,1.657,395,1.657,396,1.657,397,1.657,398,0.987,399,0.887,400,1.044,401,0.695,402,0.843,403,0.887,404,0.887,405,0.987,406,0.987,407,1.657,408,1.657,409,1.657,410,0.987,411,1.044,412,1.044,413,1.044,414,2.559,415,0.887,416,0.663,417,1.044,418,0.987,419,1.044,420,1.044,421,1.044,422,1.566,423,1.408,424,1.657,425,1.751,426,1.566,427,1.044,428,0.987,429,1.044,430,1.044,431,0.935,432,0.663,433,0.633,434,1.044,435,0.935,436,1.044,437,0.987,438,0.663,439,0.695,440,0.663,441,0.987,442,0.764,443,1.044,444,1.044,445,1.044,446,1.044,447,1.044,448,1.044,449,1.044,450,1.044,451,1.044,452,1.044,453,1.044,454,1.044,455,1.044,456,1.044,457,1.044,458,1.044,459,1.044,460,1.044,461,1.044,462,1.044,463,1.044,464,1.044,465,1.044,466,1.044,467,1.044,468,1.044,469,1.044,470,1.044,523,3.332,524,2.868,525,3.332,526,2.099,527,4.43,528,2.099,529,2.099,530,2.099,531,2.099]],["title/modules/OAuthModule.html",[532,3.339,533,2.805]],["body/modules/OAuthModule.html",[0,0.102,3,0.654,4,0.722,5,0.654,7,2.68,12,1.801,22,1.392,30,0.654,35,1.798,37,1.004,38,0.018,39,0.915,40,0.654,41,0.722,43,1.266,68,1.208,72,0.418,92,0.959,103,0.795,114,0.009,115,0.012,116,0.009,118,3.638,120,2.942,132,1.266,138,3.638,164,3.638,171,1.89,172,1.64,174,3.118,176,3.969,188,2.018,199,0.874,200,1.327,201,4.084,202,3.55,203,2.942,204,3.292,205,2.68,214,0.874,227,1.62,248,1.902,262,3.808,268,1.64,365,1.798,387,2.537,391,2.312,477,3.292,533,3.808,534,2.942,535,5.191,536,3.824,537,5.191,538,5.191,539,3.824,540,6.321,541,3.824,542,3.31,543,5.893,544,4.533,545,5.191,546,3.292,547,5.191,548,3.993,549,3.824,550,3.354,551,3.824,552,3.824,553,3.824,554,4.469,555,4.469,556,3.824,557,2.942,558,2.68,559,3.292,560,2.471,561,4.469,562,5.441,563,3.824,564,3.824]],["title/classes/OAuthModuleConfig.html",[0,0.116,176,2.607]],["body/classes/OAuthModuleConfig.html",[0,0.169,2,1.569,3,0.889,4,0.982,5,0.889,10,1.587,21,1.082,28,1.305,30,0.889,38,0.018,40,0.889,63,1.806,72,0.692,92,1.305,114,0.012,115,0.015,116,0.012,176,3.803,208,2.543,214,1.189,220,4.091,304,2.675,314,1.723,325,1.431,565,5.45,566,4.481,567,4.782,568,5.249,569,5.205,570,3.648,571,4.481,572,4.481,573,4.481,574,4.004,575,3.363,576,3.648,577,3.648,578,4.481]],["title/classes/OAuthNoopResourceServerErrorHandler.html",[0,0.116,550,2.805]],["body/classes/OAuthNoopResourceServerErrorHandler.html",[0,0.166,2,1.526,3,0.865,4,0.955,5,0.865,8,2.379,10,1.56,14,1.792,21,1.052,22,2.265,30,0.865,37,1.329,38,0.018,39,1.211,40,0.865,41,0.955,43,1.675,68,1.011,72,0.68,103,1.052,114,0.012,115,0.014,116,0.012,174,4.048,185,4.543,188,2.67,190,3.547,199,1.422,200,2.159,269,3.547,550,4.021,579,5.358,580,5.358,581,5.184,582,5.552,583,5.061,584,4.357,585,4.357]],["title/classes/OAuthResourceServerConfig.html",[0,0.116,568,3.339]],["body/classes/OAuthResourceServerConfig.html",[0,0.161,2,1.453,3,0.824,4,0.91,5,0.824,10,1.513,21,1.002,28,1.208,30,1.127,38,0.018,40,1.127,41,1.304,63,2.095,72,0.66,92,1.513,114,0.011,115,0.014,116,0.011,176,2.895,208,2.648,214,1.101,220,4.598,304,2.551,314,1.998,325,1.66,352,2.895,565,5.949,566,4.149,567,3.378,568,5.071,570,4.231,571,5.197,572,5.197,573,5.197,574,4.644,575,3.901,576,4.62,577,4.231,578,5.675,586,4.82,587,4.82,588,4.82]],["title/classes/OAuthResourceServerErrorHandler.html",[0,0.116,174,2.607]],["body/classes/OAuthResourceServerErrorHandler.html",[0,0.166,2,1.526,3,0.865,4,0.955,5,0.865,8,2.379,10,1.762,14,1.457,21,1.052,22,2.265,30,0.865,37,1.329,38,0.018,39,1.211,40,0.865,41,0.955,43,1.675,68,1.011,72,0.68,103,1.052,114,0.012,115,0.014,116,0.012,174,4.048,185,4.543,188,2.67,190,3.547,199,1.422,200,2.159,269,3.547,550,3.27,579,5.358,580,5.358,581,5.184,582,5.552,584,4.357,585,4.357,589,5.061]],["title/classes/OAuthStorage.html",[0,0.116,171,1.58]],["body/classes/OAuthStorage.html",[0,0.14,2,0.658,3,0.587,4,0.412,5,0.373,9,0.834,10,1.733,11,0.722,12,0.757,14,0.628,15,0.689,18,0.927,21,0.454,22,1.251,28,1.943,30,0.726,33,1.844,34,0.922,37,1.116,38,0.018,39,1.017,40,0.726,41,0.91,43,1.407,44,0.722,46,1.581,51,1.085,54,1.452,62,1.523,63,0.757,64,0.795,68,0.354,72,0.679,73,1.657,74,1.452,75,0.922,76,0.922,77,0.922,82,0.877,83,1.523,92,1.066,103,0.454,109,0.522,114,0.005,115,0.008,116,0.005,117,1.137,129,1.53,132,0.722,144,2.237,171,1.547,172,1.523,193,0.972,199,0.499,200,0.757,206,0.922,208,1.38,214,0.499,227,1.169,228,0.877,253,0.658,258,0.547,259,0.823,268,1.085,271,0.922,280,0.971,286,0.795,288,1.523,299,0.972,300,1.085,301,0.392,302,1.026,303,1.53,305,1.026,306,1.085,307,1.085,308,1.085,309,0.922,310,1.085,312,1.137,313,2.147,314,1.999,315,1.673,316,1.085,317,1.251,318,1.085,319,0.972,320,1.085,321,1.53,322,1.53,323,0.922,324,1.085,325,1.442,326,1.709,327,1.085,328,0.972,329,1.026,330,1.085,331,1.085,332,0.658,334,0.757,335,0.972,336,1.085,337,1.709,338,0.689,340,1.026,341,1.937,342,1.452,343,0.922,344,0.922,345,1.026,346,0.877,347,1.085,348,2.398,349,1.026,350,1.085,351,1.026,354,1.452,355,1.085,356,0.722,357,1.026,358,1.085,359,1.893,360,1.547,361,1.452,363,0.972,364,1.616,367,1.085,368,0.877,369,1.085,370,0.922,371,0.922,372,1.085,373,1.085,374,1.085,375,1.085,376,0.922,377,1.085,379,0.922,380,1.085,381,2.466,382,3.327,383,0.922,384,0.795,385,2.114,386,0.972,387,0.795,388,0.922,389,0.972,390,1.026,391,0.972,392,1.085,393,2.608,394,1.085,395,1.085,396,1.085,397,1.085,398,1.616,399,1.452,400,1.709,401,1.137,402,1.38,403,1.452,404,1.452,405,1.616,406,1.616,407,2.114,408,2.114,409,2.114,410,1.026,411,1.085,412,1.085,413,1.085,414,2.608,415,0.922,416,0.689,417,1.085,418,1.026,419,1.085,420,1.085,421,1.085,422,1.616,423,1.452,424,1.709,425,1.796,426,1.616,427,1.085,428,1.026,429,1.085,430,1.085,431,0.972,432,0.689,433,0.658,434,1.085,435,0.972,436,1.085,437,2.267,438,0.689,439,0.722,440,0.689,441,1.026,442,0.795,443,1.085,444,1.085,445,1.085,446,1.085,447,1.085,448,1.085,449,1.085,450,1.085,451,1.085,452,1.085,453,1.085,454,1.085,455,1.085,456,1.085,457,1.085,458,1.085,459,1.085,460,1.085,461,1.085,462,1.085,463,1.085,464,1.085,465,1.085,466,1.085,467,1.085,468,1.085,469,1.085,470,1.085,471,2.959,472,2.959,473,2.959,590,2.183,591,2.183,592,2.183]],["title/classes/OAuthSuccessEvent.html",[0,0.116,517,2.805]],["body/classes/OAuthSuccessEvent.html",[0,0.177,2,1.304,3,1.176,4,0.816,5,0.739,10,1.084,30,0.739,37,1.135,38,0.018,39,1.035,40,1.176,41,0.816,46,1.698,64,1.574,72,0.752,114,0.01,115,0.013,116,0.01,169,2.801,232,2.429,261,4.289,268,1.979,487,2.597,488,2.794,489,4.448,490,4.391,491,4.644,492,3.03,494,2.597,495,2.794,496,2.597,497,2.794,498,2.794,499,2.597,500,2.794,501,2.794,502,2.794,503,2.794,504,2.794,505,2.794,506,2.597,507,2.597,508,2.794,509,2.794,510,2.794,511,2.597,512,2.597,513,2.15,514,2.794,515,2.794,516,3.03,517,3.64,518,4.652,519,4.391,520,2.794,593,4.324]],["title/interfaces/OidcDiscoveryDoc.html",[73,1.371,441,2.04]],["body/interfaces/OidcDiscoveryDoc.html",[0,0.131,3,0.527,4,0.36,5,0.325,9,0.728,10,1.529,11,0.63,12,0.661,14,0.548,15,0.602,18,0.846,21,0.396,28,1.968,33,1.736,34,0.805,38,0.018,40,1.242,41,0.36,44,0.63,46,1.478,51,0.974,54,1.303,62,1.409,63,0.661,64,0.693,68,0.309,72,0.649,73,1.548,74,1.303,75,0.805,76,0.805,77,0.805,82,0.765,83,1.226,92,0.973,103,0.396,109,0.456,114,0.004,115,0.007,116,0.004,117,1.02,129,1.373,132,0.63,144,1.792,171,1.122,172,1.409,193,0.848,199,0.435,200,0.661,206,0.805,208,1.792,214,0.435,227,1.067,228,0.765,253,0.574,258,0.477,259,0.738,268,0.602,271,0.805,280,0.887,286,0.693,288,1.409,299,0.848,300,0.947,301,0.342,302,0.895,303,1.373,304,1.303,305,0.895,306,0.947,307,0.947,308,0.947,309,0.805,310,0.947,312,1.02,313,1.987,314,1.827,315,1.548,316,0.947,317,1.122,318,0.947,319,0.848,320,0.947,321,1.373,322,1.373,323,0.805,324,0.947,325,1.347,326,1.533,327,0.947,328,0.848,329,0.895,330,0.947,331,0.947,332,0.574,334,0.661,335,0.848,336,0.947,337,1.533,338,0.602,340,0.895,341,1.792,342,1.303,343,0.805,344,0.805,345,0.895,346,0.765,347,0.947,348,1.931,349,0.895,350,0.947,351,0.895,354,1.303,355,0.947,356,0.63,357,0.895,358,0.947,359,1.729,360,1.413,361,1.303,363,0.848,364,1.449,367,0.947,368,0.765,369,0.947,370,0.805,371,0.805,372,0.947,373,0.947,374,0.947,375,0.947,376,0.805,377,0.947,379,0.805,380,0.947,381,2.304,382,3.103,383,0.805,384,0.693,385,1.533,386,0.848,387,0.693,388,0.805,389,0.848,390,0.895,391,0.848,392,0.947,393,2.437,394,0.947,395,0.947,396,0.947,397,0.947,398,0.895,399,0.805,400,0.947,401,0.63,402,0.765,403,0.805,404,0.805,405,0.895,406,0.895,407,1.533,408,1.533,409,1.533,410,0.895,411,0.947,412,0.947,413,0.947,414,2.608,415,0.805,416,0.602,417,0.947,418,0.895,419,0.947,420,0.947,421,0.947,422,1.449,423,1.303,424,1.533,425,1.886,426,1.449,427,0.947,428,0.895,429,0.947,430,0.947,431,0.848,432,0.602,433,0.574,434,0.947,435,0.848,436,0.947,437,0.895,438,0.974,439,1.02,440,0.974,441,1.449,442,1.624,443,2.219,444,2.219,445,2.219,446,2.219,447,2.219,448,2.219,449,2.219,450,2.219,451,2.219,452,2.219,453,2.219,454,2.219,455,2.219,456,2.219,457,2.219,458,2.219,459,2.219,460,2.219,461,2.219,462,2.219,463,2.219,464,2.219,465,2.219,466,2.219,467,2.219,468,2.219,469,2.219,470,2.219,594,1.144]],["title/interfaces/ParsedIdToken.html",[73,1.371,418,2.04]],["body/interfaces/ParsedIdToken.html",[0,0.142,3,0.601,4,0.424,5,0.384,9,0.859,10,1.608,11,0.744,12,0.78,14,0.647,15,0.71,18,0.944,21,0.467,28,1.943,33,1.867,34,0.95,38,0.018,40,0.964,41,0.424,44,0.744,46,1.891,51,1.369,54,1.831,62,1.548,63,0.78,64,0.818,68,0.365,72,0.685,73,1.68,74,2.248,75,0.95,76,2.071,77,2.071,82,0.903,83,1.369,92,1.086,103,0.467,109,0.538,114,0.005,115,0.008,116,0.005,117,1.164,129,2.182,132,0.744,144,1.968,171,1.28,172,1.548,193,1.001,199,0.514,200,0.78,206,0.95,208,1.413,214,0.514,227,1.191,228,0.903,253,0.678,258,0.564,259,0.842,268,0.71,271,0.95,280,0.99,286,0.818,288,1.548,299,1.001,300,1.118,301,0.404,302,1.057,303,1.566,304,1.487,305,1.057,306,1.118,307,1.118,308,1.118,309,0.95,310,1.118,312,1.164,313,2.182,314,1.951,315,1.701,316,1.118,317,1.28,318,1.118,319,1.001,320,1.118,321,1.566,322,1.566,323,0.95,324,1.118,325,1.462,326,1.749,327,1.118,328,1.001,329,1.057,330,1.118,331,1.118,332,0.678,334,0.78,335,1.001,336,1.118,337,1.749,338,0.71,340,1.057,341,1.968,342,1.487,343,0.95,344,0.95,345,1.057,346,0.903,347,1.118,348,2.155,349,1.057,350,1.118,351,1.057,354,1.487,355,1.118,356,0.744,357,1.057,358,1.118,359,1.93,360,1.577,361,1.487,363,1.001,364,2.037,367,1.118,368,0.903,369,1.118,370,0.95,371,0.95,372,1.118,373,1.118,374,1.118,375,1.118,376,0.95,377,1.118,379,0.95,380,1.118,381,2.501,382,3.251,383,0.95,384,0.818,385,1.749,386,1.001,387,0.818,388,0.95,389,1.001,390,1.057,391,1.001,392,1.118,393,2.646,394,1.118,395,1.118,396,1.118,397,1.118,398,1.057,399,0.95,400,1.118,401,0.744,402,0.903,403,0.95,404,0.95,405,1.057,406,1.057,407,1.749,408,1.749,409,1.749,410,1.057,411,1.118,412,1.118,413,1.118,414,2.805,415,0.95,416,0.71,417,1.118,418,1.654,419,2.437,420,2.437,421,2.437,422,1.654,423,1.487,424,1.749,425,1.831,426,1.654,427,1.118,428,1.057,429,1.118,430,1.118,431,1.001,432,0.71,433,0.678,434,1.118,435,1.001,436,1.118,437,1.057,438,0.71,439,0.744,440,0.71,441,1.057,442,0.818,443,1.118,444,1.118,445,1.118,446,1.118,447,1.118,448,1.118,449,1.118,450,1.118,451,1.118,452,1.118,453,1.118,454,1.118,455,1.118,456,1.118,457,1.118,458,1.118,459,1.118,460,1.118,461,1.118,462,1.118,463,1.118,464,1.118,465,1.118,466,1.118,467,1.118,468,1.118,469,1.118,470,1.118,594,1.35]],["title/classes/ReceivedTokens.html",[0,0.116,381,2.04]],["body/classes/ReceivedTokens.html",[0,0.142,2,0.682,3,0.604,4,0.427,5,0.386,9,0.864,10,1.611,11,0.748,12,0.784,14,0.651,15,0.714,18,0.948,21,0.47,28,1.939,30,0.84,33,1.871,34,0.955,38,0.018,40,0.84,41,1.007,44,0.748,46,1.705,51,1.116,54,1.838,62,1.786,63,0.784,64,0.823,68,0.367,72,0.686,73,1.685,74,2.078,75,1.838,76,0.955,77,0.955,82,0.908,83,1.553,92,1.09,103,0.47,109,0.541,114,0.005,115,0.008,116,0.005,117,1.169,129,1.573,132,0.748,144,1.974,171,1.286,172,1.553,193,1.007,199,0.516,200,0.784,206,0.955,208,1.419,214,0.516,227,1.351,228,0.908,253,0.682,258,0.567,259,0.846,268,0.714,271,0.955,280,0.993,286,0.823,288,1.553,299,1.007,300,1.124,301,0.406,302,1.063,303,1.573,304,1.493,305,1.063,306,1.124,307,1.124,308,1.124,309,0.955,310,1.124,312,1.169,313,2.189,314,1.955,315,1.706,316,1.124,317,1.286,318,1.124,319,1.007,320,1.124,321,1.573,322,1.573,323,0.955,324,1.124,325,1.466,326,1.757,327,1.124,328,1.007,329,1.063,330,1.124,331,1.124,332,0.682,334,0.784,335,1.007,336,1.124,337,1.757,338,0.714,340,1.063,341,2.373,342,1.493,343,0.955,344,0.955,345,1.063,346,0.908,347,1.124,348,2.163,349,1.063,350,1.124,351,1.063,354,1.493,355,1.124,356,0.748,357,1.063,358,1.124,359,1.936,360,1.583,361,1.493,363,1.007,364,1.661,367,1.124,368,0.908,369,1.124,370,0.955,371,0.955,372,1.124,373,1.124,374,1.124,375,1.124,376,0.955,377,1.124,379,0.955,380,1.124,381,2.658,382,3.256,383,0.955,384,0.823,385,1.757,386,1.007,387,0.823,388,0.955,389,1.007,390,1.063,391,1.007,392,1.124,393,2.653,394,1.124,395,1.124,396,1.124,397,1.124,398,1.063,399,0.955,400,1.124,401,0.748,402,0.908,403,0.955,404,0.955,405,1.063,406,1.063,407,1.757,408,1.757,409,1.757,410,1.063,411,1.124,412,1.124,413,1.124,414,2.812,415,1.493,416,1.116,417,2.163,418,1.063,419,1.124,420,1.124,421,1.124,422,1.661,423,1.493,424,1.757,425,1.838,426,1.661,427,1.124,428,1.063,429,1.124,430,1.124,431,1.007,432,0.714,433,0.682,434,1.124,435,1.007,436,1.124,437,1.063,438,0.714,439,0.748,440,0.714,441,1.063,442,0.823,443,1.124,444,1.124,445,1.124,446,1.124,447,1.124,448,1.124,449,1.124,450,1.124,451,1.124,452,1.124,453,1.124,454,1.124,455,1.124,456,1.124,457,1.124,458,1.124,459,1.124,460,1.124,461,1.124,462,1.124,463,1.124,464,1.124,465,1.124,466,1.124,467,1.124,468,1.124,469,1.124,470,1.124,595,2.261,596,2.261,597,2.261,598,2.261]],["title/interfaces/TokenResponse.html",[73,1.371,428,2.04]],["body/interfaces/TokenResponse.html",[0,0.141,3,0.594,4,0.418,5,0.379,9,0.847,10,1.602,11,0.733,12,0.769,14,0.638,15,0.7,18,0.936,21,0.461,28,1.948,33,1.856,34,0.937,38,0.018,40,1.002,41,0.81,44,0.733,46,1.593,51,1.669,54,1.47,62,1.536,63,1.687,64,0.807,68,0.36,72,0.682,73,1.669,74,1.47,75,0.937,76,0.937,77,0.937,82,0.89,83,1.356,92,1.076,103,0.461,109,0.53,114,0.005,115,0.008,116,0.005,117,1.151,129,2.165,132,0.733,144,1.953,171,1.266,172,1.536,193,0.987,199,0.506,200,0.769,206,0.937,208,1.397,214,0.506,227,1.337,228,0.89,253,0.668,258,0.556,259,0.832,268,0.7,271,0.937,280,0.981,286,0.807,288,1.536,299,0.987,300,1.102,301,0.398,302,1.042,303,1.549,304,1.47,305,1.042,306,1.102,307,1.102,308,1.102,309,0.937,310,1.102,312,1.151,313,2.165,314,1.94,315,1.687,316,1.102,317,1.266,318,1.102,319,0.987,320,1.102,321,1.549,322,1.549,323,0.937,324,1.102,325,1.452,326,1.73,327,1.102,328,0.987,329,1.042,330,1.102,331,1.102,332,0.668,334,0.769,335,0.987,336,1.102,337,1.73,338,0.7,340,1.042,341,2.355,342,1.47,343,0.937,344,0.937,345,1.042,346,0.89,347,1.102,348,2.135,349,1.042,350,1.102,351,1.042,354,1.47,355,1.102,356,0.733,357,1.042,358,1.102,359,1.912,360,1.563,361,1.47,363,0.987,364,1.635,367,1.102,368,0.89,369,1.102,370,0.937,371,0.937,372,1.102,373,1.102,374,1.102,375,1.102,376,0.937,377,1.102,379,0.937,380,1.102,381,2.484,382,3.239,383,0.937,384,0.807,385,1.73,386,0.987,387,0.807,388,0.937,389,0.987,390,1.042,391,0.987,392,1.102,393,2.628,394,1.102,395,1.102,396,1.102,397,1.102,398,1.042,399,0.937,400,1.102,401,0.733,402,0.89,403,0.937,404,0.937,405,1.042,406,1.042,407,1.73,408,1.73,409,1.73,410,1.042,411,1.102,412,1.102,413,1.102,414,2.788,415,0.937,416,0.7,417,1.102,418,1.042,419,1.102,420,1.102,421,1.102,422,2.018,423,1.814,424,2.135,425,2.055,426,2.018,427,1.73,428,1.635,429,2.418,430,2.418,431,2.165,432,1.536,433,0.668,434,1.102,435,0.987,436,1.102,437,1.042,438,0.7,439,0.733,440,0.7,441,1.042,442,0.807,443,1.102,444,1.102,445,1.102,446,1.102,447,1.102,448,1.102,449,1.102,450,1.102,451,1.102,452,1.102,453,1.102,454,1.102,455,1.102,456,1.102,457,1.102,458,1.102,459,1.102,460,1.102,461,1.102,462,1.102,463,1.102,464,1.102,465,1.102,466,1.102,467,1.102,468,1.102,469,1.102,470,1.102,594,1.331]],["title/injectables/UrlHelperService.html",[117,1.436,548,3.339]],["body/injectables/UrlHelperService.html",[0,0.117,3,0.75,4,0.829,5,0.75,21,0.913,22,2.071,28,1.776,30,0.972,33,2.21,35,2.064,37,1.493,38,0.018,39,1.361,40,0.972,41,1.074,43,1.883,46,2.013,68,0.713,72,0.48,84,3.739,103,1.312,114,0.01,115,0.013,116,0.01,117,1.883,119,3.076,132,1.453,139,2.674,144,2.285,160,3.417,268,1.386,305,2.674,328,2.533,437,2.064,527,3.779,548,4.376,599,6.311,600,4.39,601,5.689,602,5.689,603,5.689,604,4.39,605,5.689,606,4.39,607,4.39,608,4.39,609,5.689,610,5.689,611,3.987,612,4.39,613,4.39,614,4.39,615,5.689,616,4.39,617,4.39,618,4.39,619,4.39,620,4.39]],["title/interfaces/UserInfo.html",[73,1.371,435,1.933]],["body/interfaces/UserInfo.html",[0,0.144,3,0.754,4,0.437,5,0.395,9,0.884,10,1.621,11,0.765,12,0.802,14,0.666,15,0.73,18,0.962,21,0.481,28,1.942,30,0.395,33,1.889,34,0.977,38,0.018,40,0.395,41,0.437,44,0.765,46,1.625,51,1.136,54,1.52,62,1.572,63,0.802,64,0.842,68,0.376,72,0.691,73,1.703,74,1.52,75,0.977,76,0.977,77,0.977,82,0.929,83,1.393,92,1.106,103,0.481,109,0.554,114,0.005,115,0.008,116,0.005,117,1.19,129,1.601,132,0.765,144,1.999,171,1.309,172,1.572,193,1.03,199,0.528,200,0.802,206,0.977,208,1.444,214,0.528,227,1.213,228,0.929,253,0.697,258,0.58,259,0.861,268,0.73,271,0.977,280,1.008,286,0.842,288,1.572,299,1.03,300,1.15,301,0.416,302,1.087,303,1.601,304,1.52,305,1.087,306,1.15,307,1.15,308,1.15,309,0.977,310,1.15,312,1.19,313,2.216,314,1.972,315,1.727,316,1.15,317,1.309,318,1.15,319,1.03,320,1.15,321,1.601,322,1.601,323,0.977,324,1.15,325,1.482,326,1.788,327,1.15,328,1.03,329,1.087,330,1.15,331,1.15,332,0.697,334,0.802,335,1.03,336,1.15,337,1.788,338,0.73,340,1.087,341,1.999,342,1.52,343,0.977,344,0.977,345,1.087,346,0.929,347,1.15,348,2.194,349,1.087,350,1.15,351,1.087,354,1.52,355,1.15,356,0.765,357,1.087,358,1.15,359,1.965,360,1.606,361,1.52,363,1.03,364,1.69,367,1.15,368,0.929,369,1.15,370,0.977,371,0.977,372,1.15,373,1.15,374,1.15,375,1.15,376,0.977,377,1.15,379,0.977,380,1.15,381,2.534,382,3.275,383,0.977,384,0.842,385,1.788,386,1.03,387,0.842,388,0.977,389,1.03,390,1.087,391,1.03,392,1.15,393,2.681,394,1.15,395,1.15,396,1.15,397,1.15,398,1.087,399,0.977,400,1.15,401,0.765,402,0.929,403,0.977,404,0.977,405,1.087,406,1.087,407,1.788,408,1.788,409,1.788,410,1.087,411,1.15,412,1.15,413,1.15,414,2.838,415,0.977,416,0.73,417,1.15,418,1.087,419,1.15,420,1.15,421,1.15,422,2.074,423,1.864,424,2.194,425,2.103,426,2.074,427,1.15,428,1.087,429,1.15,430,1.15,431,1.03,432,0.73,433,1.084,434,1.788,435,1.601,436,2.475,437,1.69,438,0.73,439,0.765,440,0.73,441,1.087,442,0.842,443,1.15,444,1.15,445,1.15,446,1.15,447,1.15,448,1.15,449,1.15,450,1.15,451,1.15,452,1.15,453,1.15,454,1.15,455,1.15,456,1.15,457,1.15,458,1.15,459,1.15,460,1.15,461,1.15,462,1.15,463,1.15,464,1.15,465,1.15,466,1.15,467,1.15,468,1.15,469,1.15,470,1.15,594,1.389,621,2.313,622,2.313]],["title/classes/ValidationHandler.html",[0,0.116,12,1.506]],["body/classes/ValidationHandler.html",[0,0.121,1,2.214,2,0.953,3,0.54,4,0.596,5,0.54,6,2.806,7,3.727,8,1.485,9,1.208,10,1.774,11,1.046,12,2.018,13,2.042,14,1.308,15,1.435,16,3.758,17,1.667,18,0.99,19,2.214,20,2.935,21,0.657,22,1.654,23,3.495,25,2.042,26,3.437,28,1.608,29,3.758,30,0.776,32,2.431,33,1.76,34,1.92,35,1.485,36,0.869,37,1.193,38,0.018,39,1.273,40,0.776,41,0.857,42,2.935,43,1.504,44,2.238,45,2.431,46,1.753,48,2.431,49,4.091,50,2.431,51,2.087,52,2.431,53,2.431,54,1.335,55,2.042,56,2.431,57,4.334,59,4.495,60,4.317,61,3.727,62,1.68,63,1.846,65,2.935,67,3.437,68,0.513,69,2.214,70,2.214,71,2.431,72,0.581,73,1.68,74,1.335,75,1.335,76,1.335,77,1.335,78,1.571,79,2.431,80,3.495,81,3.495,82,1.825,83,1.435,84,3.384,85,3.495,86,2.431,87,2.431,88,2.042,89,2.431,90,2.431,91,2.431,92,0.792,93,2.431,94,2.431,95,2.431,96,2.214,97,4.474,98,2.431,99,4.474,100,2.431,101,2.431,102,2.431,103,0.944,104,4.091,105,2.431,106,2.431,107,2.431,108,2.431,109,0.756,110,2.431,111,2.042,112,2.431,113,2.431,114,0.007,115,0.011,116,0.007,264,2.431,623,3.16,624,3.16]],["title/interfaces/ValidationParams.html",[57,2.607,73,1.371]],["body/interfaces/ValidationParams.html",[0,0.123,1,2.275,3,0.555,4,0.613,5,0.555,6,1.713,7,2.275,8,1.526,10,1.67,11,1.074,12,1.874,13,2.098,14,1.333,15,1.463,16,2.993,17,1.713,18,1.009,19,2.275,20,2.993,21,0.675,23,3.563,25,2.098,26,2.098,28,1.763,29,3.804,32,2.497,33,1.787,34,1.957,35,1.526,36,0.892,38,0.018,39,0.777,40,1.106,42,2.993,44,2.142,45,2.497,46,2.12,48,2.497,49,4.153,50,2.497,51,1.966,52,2.497,53,2.497,54,1.372,55,2.098,56,2.497,57,4.091,59,4.126,60,4.126,61,3.246,62,1.463,63,1.607,65,2.098,67,2.993,68,0.527,69,2.275,70,2.275,71,2.497,72,0.59,73,1.463,74,2.488,75,2.488,76,2.488,77,2.488,78,2.928,79,4.529,80,2.497,81,2.497,82,1.304,83,1.025,84,2.444,85,3.563,86,2.497,87,2.497,88,2.098,89,2.497,90,2.497,91,2.497,92,0.814,93,2.497,94,2.497,95,2.497,96,2.275,97,4.529,98,2.497,99,4.529,100,2.497,101,2.497,102,2.497,103,0.963,104,4.153,105,2.497,106,2.497,107,2.497,108,2.497,109,0.777,110,2.497,111,2.098,112,2.497,113,2.497,114,0.008,115,0.011,116,0.008,304,1.957,352,2.782,594,1.95]],["title/classes/WebHttpUrlEncodingCodec.html",[0,0.116,625,3.737]],["body/classes/WebHttpUrlEncodingCodec.html",[0,0.115,2,1.306,3,0.741,4,0.818,5,0.741,9,1.656,14,1.624,21,0.901,22,2.053,28,1.932,30,1.135,37,1.744,38,0.018,39,1.59,40,1.135,41,1.254,43,2.199,68,0.704,72,0.473,103,1.381,114,0.01,115,0.013,116,0.01,140,3.953,188,2.286,312,1.867,314,1.867,625,4.856,626,4.333,627,5.641,628,5.641,629,5.641,630,6.272,631,5.641,632,5.641,633,5.641,634,5.641,635,5.641,636,4.333,637,5.641,638,5.641,639,4.333,640,5.641,641,5.641,642,4.333,643,5.641,644,4.333,645,4.333,646,4.333,647,4.333,648,4.333]],["title/changelog.html",[649,2.266,650,2.437,651,3.247]],["body/changelog.html",[18,1.236,33,1.447,36,1.559,38,0.013,92,1.096,109,1.046,114,0.01,115,0.013,116,0.01,150,3.063,214,0.998,257,1.67,279,2.168,280,1.646,283,3.362,286,1.591,288,2.181,317,1.591,323,1.847,328,1.946,338,1.38,341,2.529,351,2.055,651,3.763,652,4.371,653,4.371,654,4.371,655,4.371,656,3.763,657,4.371,658,3.362,659,4.371,660,4.371,661,4.371,662,3.763,663,4.371,664,4.371,665,4.371,666,4.371,667,4.371,668,4.371,669,3.362,670,2.824,671,3.763,672,4.371,673,3.407,674,3.763,675,3.362,676,2.174,677,3.763,678,4.883,679,3.763,680,4.371,681,4.371,682,4.414,683,3.407,684,3.362,685,4.371,686,4.371,687,2.455,688,3.063,689,3.362,690,4.371,691,3.763,692,3.763,693,4.371,694,3.362,695,4.371,696,4.371,697,3.063,698,2.625,699,4.371,700,4.371,701,4.371,702,4.371,703,3.362,704,4.371,705,4.371,706,4.371,707,4.371,708,4.371,709,4.371,710,4.371,711,3.763,712,4.371,713,4.371,714,4.371,715,4.371,716,4.371,717,4.371,718,4.845,719,5.673,720,4.371,721,4.371,722,4.371,723,4.371,724,4.371,725,4.371,726,4.371,727,3.763,728,3.763,729,4.371,730,4.371,731,4.371,732,4.371,733,4.371,734,4.371,735,4.371,736,4.371,737,3.763,738,4.371,739,4.371]],["title/dependencies.html",[740,3.772,741,3.956]],["body/dependencies.html",[38,0.018,70,3.394,78,2.408,114,0.011,115,0.014,116,0.011,132,1.603,133,3.725,134,4.244,140,3.394,190,4.244,257,2.314,258,1.518,259,1.449,274,2.72,546,4.169,658,3.725,741,3.725,742,4.843,743,7.52,744,4.843,745,4.843,746,4.843,747,6.055,748,5.213,749,4.843,750,4.843,751,4.843,752,4.843,753,4.843,754,4.843,755,4.843,756,4.843,757,3.394,758,4.843,759,4.843,760,4.843,761,4.843,762,4.843,763,4.843,764,4.843,765,4.843,766,4.843,767,4.843,768,4.843,769,4.843,770,4.843,771,4.843,772,4.843,773,4.843,774,4.843,775,4.843]],["title/miscellaneous/functions.html",[776,2.266,777,4.427]],["body/miscellaneous/functions.html",[21,1.141,28,1.376,37,1.716,38,0.017,39,1.564,41,1.234,43,1.816,69,4.58,114,0.013,115,0.015,116,0.013,554,6.009,555,6.009,776,3.296,777,4.724,778,6.536,779,6.536,780,6.98,781,6.536,782,5.488,783,5.488,784,5.627,785,5.488,786,5.488]],["title/index.html",[21,0.784,649,2.266,650,2.437]],["body/index.html",[0,0.052,4,0.365,5,0.33,11,0.64,13,1.25,15,0.611,17,1.647,18,1.301,30,0.33,36,1.358,38,0.018,51,0.611,67,1.25,68,0.858,72,0.341,78,0.962,83,0.611,92,0.983,96,1.355,109,0.463,111,1.25,114,0.004,115,0.007,116,0.007,139,0.909,163,1.665,188,1.02,199,1.364,202,2.967,214,0.713,220,2.016,227,1.527,246,2.357,253,0.941,254,1.488,255,2.074,257,2.698,258,1.601,259,1.5,270,0.861,273,1.355,274,3.121,275,3.463,276,2.07,277,1.355,279,2.124,280,1.555,281,2.401,282,3.8,284,1.25,285,0.909,286,0.704,287,2.187,288,2.017,289,2.187,290,1.488,291,2.016,292,0.383,293,2.187,294,2.401,295,2.401,296,1.488,312,1.033,314,1.033,315,0.671,322,0.861,325,1.079,332,0.941,334,0.671,338,1.239,343,1.319,344,0.817,346,1.253,352,1.162,356,1.748,363,0.861,365,0.909,368,1.253,379,0.817,383,1.903,388,1.319,401,1.033,402,0.777,415,0.817,416,0.986,423,1.658,425,1.319,426,1.467,432,1.239,433,1.592,435,0.861,438,1.239,439,1.033,440,1.239,442,1.136,479,2.687,513,0.962,533,1.25,544,2.401,557,1.488,558,1.355,567,1.355,570,1.355,576,2.187,577,1.355,656,2.687,662,2.687,670,2.016,673,2.704,676,0.962,678,1.665,679,1.665,684,1.488,687,2.204,688,3.701,691,1.665,692,1.665,694,1.488,698,1.874,703,1.488,711,1.665,757,1.355,787,2.687,788,1.934,789,3.923,790,2.749,791,1.934,792,1.934,793,1.934,794,2.457,795,3.121,796,1.934,797,1.934,798,3.121,799,1.934,800,3.121,801,1.934,802,1.934,803,1.934,804,3.8,805,3.923,806,1.934,807,1.665,808,1.488,809,1.934,810,1.934,811,1.934,812,1.934,813,1.934,814,1.934,815,1.934,816,1.934,817,1.934,818,1.934,819,3.121,820,4.502,821,1.934,822,1.665,823,3.121,824,1.934,825,1.934,826,1.934,827,2.909,828,1.934,829,1.934,830,1.934,831,3.121,832,1.934,833,1.934,834,4.502,835,2.687,836,1.934,837,1.934,838,1.934,839,3.923,840,3.121,841,1.25,842,1.934,843,3.121,844,1.934,845,1.934,846,1.934,847,3.121,848,1.934,849,1.934,850,1.934,851,1.934,852,3.923,853,3.121,854,1.934,855,1.934,856,1.665,857,1.934,858,1.665,859,1.488,860,1.934,861,1.934,862,1.934,863,1.934,864,1.934,865,1.934,866,1.934,867,1.934,868,1.355,869,1.934,870,1.934,871,1.934,872,1.934,873,1.934,874,4.939,875,1.934,876,1.488,877,3.121,878,1.552,879,2.401,880,1.934,881,1.355,882,1.25,883,1.934,884,1.355,885,1.162,886,1.488,887,3.121,888,1.665,889,2.016,890,1.665,891,1.934,892,3.121,893,1.934,894,2.401,895,1.25,896,1.934,897,1.665,898,1.934,899,1.934,900,1.934,901,1.934,902,2.401,903,2.016,904,1.665,905,1.934,906,1.934,907,1.665,908,1.934,909,1.934,910,1.934,911,2.375,912,1.934,913,3.923,914,1.934,915,1.934,916,1.934,917,1.355,918,1.934,919,1.934,920,2.687,921,3.377,922,2.401,923,1.874,924,1.488,925,1.665,926,1.488,927,1.934,928,2.016,929,1.934,930,1.665,931,1.934,932,0.817,933,1.355,934,3.121,935,2.016,936,1.934,937,1.934,938,1.576,939,1.25,940,1.086,941,1.086,942,1.086,943,1.355,944,2.016,945,1.934,946,1.665,947,2.687,948,3.121,949,1.488,950,2.687,951,1.488,952,1.934,953,1.934,954,1.934,955,1.355,956,1.665,957,1.086,958,1.647,959,1.162,960,1.934,961,1.934,962,2.401,963,2.535,964,1.25,965,1.162,966,1.02,967,1.02,968,1.934,969,1.934,970,1.934,971,1.934,972,3.121,973,1.665,974,1.934,975,1.934,976,1.934,977,2.687,978,1.355,979,1.934,980,1.934,981,1.665,982,1.934,983,1.934,984,2.016,985,1.355,986,1.934,987,1.934,988,1.934,989,1.665,990,2.016,991,1.355,992,1.488,993,1.934,994,1.934,995,1.355,996,1.355,997,1.934,998,1.665,999,1.934,1000,2.687,1001,1.665,1002,1.665,1003,1.086,1004,1.665,1005,2.357,1006,1.934,1007,2.401,1008,1.488,1009,3.121,1010,1.934,1011,1.934,1012,1.934,1013,1.665,1014,1.665,1015,1.934,1016,1.665,1017,1.25,1018,1.488,1019,1.086,1020,1.934,1021,1.934,1022,1.934,1023,1.934,1024,1.162,1025,1.934,1026,1.934,1027,1.934,1028,1.355,1029,1.934,1030,3.923,1031,1.934,1032,1.665,1033,1.934,1034,1.488,1035,1.934,1036,1.488,1037,1.934,1038,1.934,1039,1.934]],["title/license.html",[649,2.266,650,2.437,1040,3.772]],["body/license.html",[18,1.31,38,0.014,114,0.011,115,0.014,116,0.011,189,4.12,332,1.443,357,2.249,727,4.12,728,4.12,804,3.681,808,3.681,859,3.681,895,3.092,1016,4.12,1019,2.688,1041,6.571,1042,4.785,1043,4.785,1044,6.01,1045,4.785,1046,4.785,1047,4.785,1048,4.785,1049,4.785,1050,6.01,1051,7.505,1052,4.785,1053,4.785,1054,4.785,1055,4.246,1056,4.785,1057,6.01,1058,4.12,1059,4.785,1060,4.785,1061,4.785,1062,4.785,1063,4.785,1064,4.785,1065,4.785,1066,6.01,1067,4.785,1068,4.785,1069,4.785,1070,4.785,1071,4.785,1072,6.01,1073,6.01,1074,4.785,1075,4.785,1076,4.785,1077,4.785,1078,4.785,1079,4.785,1080,4.785,1081,4.785,1082,4.785,1083,4.785,1084,4.785,1085,4.12,1086,4.785,1087,2.874,1088,4.785,1089,4.785,1090,4.785,1091,4.785,1092,4.785,1093,4.785,1094,4.785,1095,4.12,1096,4.785,1097,4.785,1098,4.785,1099,4.785,1100,4.785]],["title/modules.html",[534,4.344]],["body/modules.html",[38,0.016,114,0.014,115,0.016,116,0.014,533,3.884,534,4.624,1028,4.212,1101,6.011,1102,6.011]],["title/overview.html",[1103,4.861]],["body/overview.html",[2,1.735,38,0.016,114,0.013,115,0.016,116,0.013,119,4.032,532,5.17,558,4.032,559,4.953,560,3.718,594,3.456,611,4.032,675,4.426,741,4.426,757,4.032,895,3.718,1103,4.953,1104,5.754,1105,6.721,1106,5.754,1107,5.754,1108,5.754]],["title/miscellaneous/typealiases.html",[776,2.266,1109,5.142]],["body/miscellaneous/typealiases.html",[21,1.093,38,0.018,40,0.899,114,0.012,115,0.015,116,0.012,232,2.954,488,3.398,491,4.117,494,3.159,495,3.398,496,3.159,497,3.398,498,3.398,499,3.159,500,3.398,501,3.398,502,3.398,503,3.398,504,3.398,505,3.398,506,3.159,507,3.159,508,3.398,509,3.398,510,3.398,511,3.159,512,3.159,513,2.616,514,3.398,515,3.398,776,3.159,1110,5.259,1111,5.259]],["title/miscellaneous/variables.html",[776,2.266,1112,4.427]],["body/miscellaneous/variables.html",[6,2.605,8,2.881,21,1.026,35,2.881,36,1.357,38,0.017,68,0.995,78,3.048,109,1.182,114,0.011,115,0.014,116,0.014,246,3.682,247,4.251,248,3.048,253,1.489,254,3.798,255,1.634,257,2.547,258,1.671,259,1.595,269,4.295,270,2.968,271,2.087,272,4.251,273,3.46,274,2.773,275,3.798,276,2.605,277,3.46,278,3.46,279,1.887,280,1.4,281,3.798,282,4.715,283,3.798,284,3.19,285,2.321,286,1.797,287,3.46,288,1.559,289,3.46,290,3.798,291,3.19,292,0.978,293,3.46,294,3.798,295,3.798,296,3.798,365,2.881,776,2.966,1112,4.251,1113,6.129,1114,4.937,1115,4.937,1116,4.937,1117,4.937]],["title/additional-documentation/getting-started.html",[292,0.661,301,0.599,649,2.003,650,2.155]],["body/additional-documentation/getting-started.html",[38,0.016,114,0.014,115,0.016,116,0.014,270,2.645,649,4.112,650,4.424,978,4.163,1019,3.337,1118,5.114,1119,5.94]],["title/additional-documentation/preserving-state-(like-the-requested-url).html",[214,0.618,292,0.536,301,0.486,341,1.087,1120,2.331,1121,1.749]],["body/additional-documentation/preserving-state-(like-the-requested-url).html",[3,0.969,38,0.017,41,1.071,114,0.013,115,0.015,116,0.013,214,1.523,271,2.397,309,2.397,319,2.526,341,2.843,938,2.278,995,3.976,1120,4.884,1121,4.307,1122,4.884,1123,5.673,1124,5.673,1125,3.976,1126,5.673,1127,5.673]],["title/additional-documentation/refreshing-a-token.html",[227,0.917,292,0.661,301,0.599,882,2.155]],["body/additional-documentation/refreshing-a-token.html",[15,1.862,17,2.449,35,2.182,36,1.781,38,0.014,114,0.011,115,0.014,116,0.011,160,2.788,172,1.466,194,3.996,202,2.608,227,1.934,253,1.4,270,2.626,279,2.253,280,1.608,285,2.182,288,2.047,332,1.4,338,2.153,343,1.962,344,1.962,346,1.864,360,1.69,365,2.182,431,2.067,432,1.466,440,1.466,611,3.253,669,3.571,670,3,868,3.253,881,3.253,882,3.81,884,4.541,885,3.892,886,4.536,888,3.996,928,3,930,3.996,950,3.996,958,2.449,962,3.571,1058,3.996,1087,3.892,1128,3.253,1129,3.996,1130,3.571,1131,4.642,1132,4.642,1133,3.996,1134,5.896,1135,3.571,1136,4.642,1137,4.642,1138,4.642,1139,4.536,1140,4.642,1141,3.571,1142,3.996,1143,5.076,1144,3.996,1145,3.996,1146,5.076,1147,5.076,1148,3.996,1149,3.996,1150,3.996,1151,3.571,1152,3.996,1153,3.996,1154,3.253,1155,3.996,1156,3.996,1157,3.996,1158,3.996]],["title/additional-documentation/silent-refresh.html",[292,0.661,301,0.599,317,1.214,338,1.053]],["body/additional-documentation/silent-refresh.html",[3,0.485,5,0.854,11,1.389,15,1.326,17,1.496,18,1.089,28,0.711,30,0.485,33,1.389,35,1.973,36,1.698,38,0.018,46,0.855,51,0.896,62,1.326,68,0.46,72,0.31,83,1.863,92,1.052,103,0.589,109,1.005,114,0.007,115,0.01,116,0.007,139,1.333,160,2.522,172,1.579,181,2.181,196,2.441,199,1.142,200,1.734,214,1.142,227,1.804,228,1.686,253,0.855,257,1.604,258,0.711,259,1.005,270,2.226,274,1.593,276,1.496,279,2.36,280,1.58,284,2.713,285,1.333,288,2.073,313,1.869,317,2.389,323,1.198,325,1.519,332,1.666,334,1.734,335,1.869,338,2.117,342,1.198,352,1.703,356,1.654,360,2.147,365,2.35,376,1.198,384,1.032,387,1.032,388,1.774,398,1.333,401,0.939,416,1.326,422,1.333,431,1.263,432,1.326,433,1.666,438,0.896,442,1.032,542,1.593,575,1.832,611,1.987,649,1.703,669,2.181,670,1.832,671,2.441,676,1.41,683,1.703,687,1.593,688,1.987,784,2.441,794,2.088,868,1.987,878,1.41,881,2.942,882,3.23,884,3.503,885,2.522,886,3.229,911,2.915,917,3.503,932,1.198,933,1.987,935,3.23,938,1.139,939,1.832,940,2.808,941,1.593,942,1.593,943,1.987,944,1.832,949,2.181,951,2.181,957,1.593,958,1.496,959,1.703,963,1.832,964,1.832,965,1.703,966,1.496,967,1.496,991,1.987,998,3.614,1003,1.593,1005,1.703,1008,2.181,1017,1.832,1032,2.441,1034,2.181,1036,2.181,1055,1.832,1087,3.002,1135,2.181,1139,3.229,1141,2.181,1142,2.441,1143,3.614,1144,2.441,1145,2.441,1146,3.614,1147,3.614,1148,2.441,1149,2.441,1150,2.441,1151,2.181,1152,2.441,1153,2.441,1154,1.987,1155,2.441,1156,2.441,1157,2.441,1158,2.441,1159,2.836,1160,4.198,1161,2.181,1162,3.229,1163,2.836,1164,2.836,1165,2.836,1166,2.836,1167,2.836,1168,2.836,1169,4.198,1170,4.998,1171,1.987,1172,2.441,1173,2.836,1174,2.836,1175,2.836,1176,2.836,1177,2.836,1178,3.614,1179,2.836,1180,1.593,1181,1.832,1182,2.836,1183,1.987,1184,1.987,1185,1.593,1186,2.836,1187,2.836,1188,2.836,1189,2.441,1190,2.441,1191,3.229,1192,2.441,1193,2.836,1194,2.836,1195,2.836,1196,2.836,1197,3.229,1198,2.181,1199,2.836,1200,2.836,1201,2.836,1202,2.836,1203,4.198,1204,2.836,1205,2.836,1206,2.836,1207,2.836,1208,2.836,1209,2.441,1210,2.836,1211,2.836,1212,2.836,1213,2.836,1214,2.441,1215,2.836,1216,2.836,1217,2.181,1218,4.198,1219,2.836,1220,2.836,1221,2.836,1222,2.836,1223,2.836,1224,2.836,1225,2.181,1226,2.836,1227,2.836,1228,2.836,1229,2.836,1230,2.836,1231,2.836,1232,2.836]],["title/additional-documentation/working-with-httpinterceptors.html",[292,0.661,301,0.599,1233,3.335,1234,3.335]],["body/additional-documentation/working-with-httpinterceptors.html",[0,0.15,10,0.883,14,1.413,18,1.07,28,0.883,38,0.018,41,0.926,55,3.171,62,1.113,63,1.703,68,1.107,72,0.536,84,1.859,92,1.23,103,1.418,114,0.008,115,0.011,116,0.008,117,1.624,132,1.166,164,2.47,165,4.861,169,1.753,171,2.055,172,1.55,173,3.034,174,3.856,175,3.034,176,2.948,178,3.034,179,3.034,180,4.225,181,2.711,182,4.225,184,3.034,185,3.648,186,3.034,187,4.861,188,1.859,198,4.343,199,1.29,200,2.227,201,3.171,202,1.979,203,2.711,205,3.439,206,2.58,207,3.034,208,1.415,211,3.034,212,3.034,213,3.034,214,0.805,215,3.034,216,3.034,217,3.034,218,3.034,219,5.256,220,3.945,221,3.034,224,3.034,227,1.552,241,3.034,242,4.225,244,3.034,255,1.166,257,1.347,258,0.883,259,0.843,286,1.283,312,1.624,325,1.349,332,1.062,346,1.415,365,2.307,384,1.283,387,1.283,389,1.569,550,2.277,567,2.47,570,3.439,576,3.439,577,2.47,581,2.711,582,3.775,677,3.034,858,3.034,859,2.711,922,2.711,951,2.711,955,2.47,991,2.47,1000,4.225,1001,3.034,1002,3.034,1003,1.979,1004,3.034,1135,2.711,1189,3.034,1198,2.711,1235,3.524,1236,3.524,1237,3.524,1238,3.034,1239,3.034,1240,3.524,1241,3.524,1242,3.524,1243,3.524,1244,3.524,1245,3.524,1246,3.524,1247,3.524,1248,2.117,1249,3.524,1250,4.225,1251,2.277,1252,2.47,1253,3.524,1254,3.524,1255,3.524,1256,3.524,1257,3.524,1258,3.524,1259,3.524,1260,3.524,1261,3.034,1262,3.524,1263,3.524,1264,2.711,1265,3.524,1266,3.524,1267,3.524,1268,3.524,1269,3.775,1270,3.524,1271,3.524,1272,3.524,1273,3.524]],["title/additional-documentation/callback-after-login.html",[292,0.661,301,0.599,938,1.339,1274,2.565]],["body/additional-documentation/callback-after-login.html",[38,0.018,51,2.058,62,1.724,63,1.894,114,0.013,115,0.015,116,0.013,309,2.753,354,2.307,364,2.566,370,2.753,388,2.307,841,3.527,938,2.617,985,3.825,1003,3.066,1085,4.699,1121,3.527,1125,3.825,1209,4.699,1274,5.012,1275,5.458,1276,5.458,1277,5.458,1278,5.458,1279,5.458,1280,5.458]],["title/additional-documentation/popup-based-login.html",[292,0.592,301,0.537,321,1.331,697,2.094,938,1.2]],["body/additional-documentation/popup-based-login.html",[17,2.76,18,1.384,38,0.016,114,0.012,115,0.015,116,0.012,255,1.732,268,1.652,270,2.828,276,2.76,285,2.985,315,1.815,317,2.489,321,2.828,338,1.652,346,2.101,383,2.684,405,2.459,433,1.577,684,4.025,694,4.025,718,4.025,807,4.504,827,3.381,868,3.667,917,3.667,926,4.025,932,2.211,965,3.143,973,4.504,1161,4.025,1192,4.504,1225,4.025,1248,3.143,1281,4.504,1282,5.232,1283,4.504,1284,5.232,1285,5.232,1286,5.232,1287,5.232,1288,5.232,1289,5.232,1290,4.025,1291,5.232,1292,5.232,1293,5.232,1294,5.232,1295,5.232,1296,5.232]],["title/additional-documentation/custom-query-parameters.html",[37,0.785,292,0.592,301,0.537,312,0.989,376,1.263]],["body/additional-documentation/custom-query-parameters.html",[33,1.899,37,1.506,38,0.017,114,0.013,115,0.016,116,0.013,279,2.193,280,1.311,312,2.221,325,1.577,360,2.089,376,2.425,1297,5.737,1298,4.939,1299,5.737,1300,5.737,1301,5.737,1302,5.737,1303,5.737,1304,5.737,1305,5.737]],["title/additional-documentation/events.html",[292,0.747,301,0.678,361,1.594]],["body/additional-documentation/events.html",[5,0.73,18,0.931,28,1.07,36,1.174,38,0.018,62,1.348,68,0.693,78,2.123,83,1.348,114,0.01,115,0.013,116,0.01,185,2.759,200,1.481,205,3.915,227,1.174,232,2.398,255,1.849,257,1.632,258,1.4,259,1.022,274,2.398,279,1.632,280,0.975,302,2.007,303,1.901,317,2.033,338,1.967,341,2.244,342,1.804,349,2.626,361,2.972,363,3.053,371,1.804,386,1.901,438,1.348,487,3.356,494,2.564,496,2.564,499,2.564,506,2.564,507,2.564,511,2.564,524,3.675,682,2.992,683,2.564,687,3.138,689,3.284,697,2.992,827,2.759,885,2.564,889,2.759,996,2.992,1003,2.398,1005,3.356,1024,3.356,1028,2.992,1087,2.564,1121,3.61,1133,4.809,1191,3.284,1198,3.284,1306,4.269,1307,4.269,1308,4.269,1309,3.675,1310,4.269,1311,4.269,1312,3.675,1313,3.675,1314,4.269,1315,4.269,1316,4.269,1317,4.269,1318,4.269,1319,3.675,1320,4.269,1321,4.269,1322,4.269,1323,4.269,1324,4.269,1325,4.269,1326,5.586,1327,7.165,1328,5.586,1329,4.269,1330,4.269,1331,3.675,1332,4.269,1333,4.269,1334,3.675,1335,4.269,1336,4.269,1337,3.675,1338,5.586,1339,5.586,1340,4.269,1341,4.269,1342,4.269,1343,4.269,1344,4.269,1345,4.269]],["title/additional-documentation/routing-with-the-hashstrategy.html",[292,0.661,301,0.599,698,2.003,1018,2.565]],["body/additional-documentation/routing-with-the-hashstrategy.html",[13,3.262,18,1.1,19,4.355,33,1.671,36,1.708,38,0.017,62,1.595,72,0.552,83,1.595,92,1.266,114,0.012,115,0.014,116,0.012,228,2.028,255,1.671,303,2.248,313,2.248,334,2.156,335,2.767,340,2.373,345,2.373,365,2.373,481,3.884,532,3.884,670,3.262,698,3.733,737,4.346,822,5.795,933,3.538,955,3.538,990,3.262,1003,2.836,1013,4.346,1017,3.262,1018,4.78,1171,3.538,1217,3.884,1225,3.884,1251,3.262,1346,3.884,1347,5.049,1348,4.346,1349,7.025,1350,6.732,1351,5.049,1352,5.049,1353,5.049,1354,5.049,1355,5.049,1356,5.049,1357,5.049,1358,3.262,1359,5.049,1360,5.049,1361,3.884,1362,5.049]],["title/additional-documentation/adapt-id_token-validation.html",[51,0.944,248,1.486,292,0.592,301,0.537,1363,2.573]],["body/additional-documentation/adapt-id_token-validation.html",[11,1.63,12,2.31,30,0.842,38,0.018,51,1.933,59,3.452,60,3.452,61,3.452,62,1.933,67,3.954,68,0.8,73,1.556,78,2.45,82,1.978,84,2.599,109,1.179,114,0.011,115,0.014,116,0.011,246,3.999,248,3.044,253,1.845,255,1.63,257,1.882,258,1.235,259,1.179,262,3.183,286,2.228,360,2.228,379,2.081,386,2.193,387,1.793,390,2.877,401,1.63,402,1.978,406,2.315,439,1.63,440,1.556,560,3.183,562,4.24,827,3.183,932,2.081,1008,3.789,1154,3.452,1197,3.789,1264,3.789,1283,4.24,1346,3.789,1363,4.24,1364,4.925,1365,4.925,1366,4.925,1367,4.925,1368,4.24,1369,4.925,1370,4.24,1371,4.925,1372,4.24,1373,4.925,1374,4.24,1375,4.925]],["title/additional-documentation/session-checks.html",[292,0.661,301,0.599,682,2.337,683,2.003]],["body/additional-documentation/session-checks.html",[30,0.692,36,1.667,38,0.017,68,0.657,72,0.442,83,1.703,92,1.014,114,0.009,115,0.012,116,0.009,139,1.902,199,1.232,227,1.482,231,3.113,255,1.785,257,1.547,258,1.014,259,0.969,270,2.401,273,2.836,274,3.029,276,2.135,279,1.547,280,1.232,285,2.535,288,1.278,293,2.836,312,1.339,314,1.785,317,2.208,325,1.112,329,1.902,338,2.188,356,1.339,360,1.473,361,1.71,370,1.71,379,1.71,425,1.71,432,1.278,433,1.22,438,1.703,442,1.473,512,3.239,513,2.013,675,3.113,676,2.013,682,5.035,683,3.643,688,2.836,787,3.484,790,2.836,794,3.217,878,2.682,881,2.836,889,3.484,895,2.615,911,2.135,917,2.836,926,3.113,928,3.919,932,1.71,935,3.919,939,2.615,940,3.029,941,2.273,944,2.615,966,2.135,967,2.135,977,3.484,990,2.615,995,2.836,1024,2.431,1087,3.239,1095,3.484,1130,3.113,1154,3.779,1178,3.484,1180,2.273,1181,2.615,1185,2.273,1217,3.113,1251,2.615,1261,3.484,1334,3.484,1348,3.484,1372,3.484,1376,4.047,1377,4.047,1378,4.047,1379,4.047,1380,4.047,1381,5.392,1382,4.047,1383,4.047,1384,4.047,1385,4.047,1386,4.047,1387,4.047,1388,3.113,1389,5.392,1390,4.047,1391,5.392,1392,4.047,1393,4.047,1394,4.047,1395,4.047,1396,4.047,1397,4.047,1398,4.047,1399,4.047,1400,4.047,1401,4.047,1402,4.047,1403,4.047,1404,4.047]],["title/additional-documentation/server-side-rendering.html",[199,0.683,292,0.592,301,0.537,402,1.2,1405,2.573]],["body/additional-documentation/server-side-rendering.html",[38,0.015,114,0.013,115,0.015,116,0.013,199,1.615,251,4.87,255,1.872,314,1.872,402,2.839,673,3.398,674,4.87,1248,3.398,1252,3.965,1269,4.352,1281,4.87,1405,6.086,1406,5.657,1407,5.657,1408,5.657,1409,5.657,1410,4.87,1411,5.657,1412,5.657,1413,5.657]],["title/additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html",[255,0.699,279,0.807,280,0.482,292,0.418,301,0.379,439,0.699,440,0.667,932,0.892,1055,1.364]],["body/additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html",[0,0.114,11,1.416,15,1.351,18,1.219,38,0.018,40,0.731,72,0.467,109,1.024,114,0.01,115,0.013,116,0.01,172,1.767,199,1.278,214,1.51,255,1.416,270,1.905,279,1.635,280,0.977,285,2.011,291,2.764,292,0.848,304,1.808,315,1.484,325,1.538,332,1.29,334,1.484,356,2.063,371,1.808,384,1.557,399,1.808,401,1.416,403,1.808,404,1.808,416,1.969,423,1.808,432,1.351,433,1.879,438,1.351,439,1.851,440,1.767,513,2.128,542,3.142,575,2.764,673,2.57,676,2.128,794,2.782,878,2.128,894,3.291,895,2.764,897,3.683,902,3.291,903,2.764,911,3.289,923,2.57,932,2.364,938,2.503,940,2.403,941,2.403,942,2.403,957,2.403,958,2.257,963,3.615,966,2.257,967,2.257,978,2.998,985,2.998,992,3.291,1005,2.57,1007,3.291,1019,2.403,1024,2.57,1055,2.764,1125,2.998,1128,2.998,1162,3.291,1171,2.998,1180,3.142,1185,2.403,1248,2.57,1290,3.291,1358,2.764,1388,3.291,1414,3.683,1415,2.998,1416,2.998,1417,4.278,1418,4.278,1419,3.683,1420,3.291,1421,3.291,1422,3.683,1423,3.683,1424,3.683,1425,4.278,1426,4.278,1427,4.278,1428,3.683,1429,3.683,1430,4.278]],["title/additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html",[36,0.58,248,1.05,292,0.418,301,0.379,416,0.667,439,0.699,440,0.667,878,1.05,1431,2.112]],["body/additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html",[18,0.923,30,0.949,38,0.018,64,1.541,68,0.687,72,0.463,92,1.061,114,0.01,115,0.013,116,0.01,139,1.99,199,0.967,214,1.562,228,2.231,248,3.084,253,1.276,255,1.401,257,1.618,258,1.061,259,1.33,319,1.885,323,1.789,325,1.705,334,1.469,356,1.401,365,1.99,387,1.541,401,1.401,416,2.159,425,1.789,432,1.755,433,1.276,438,1.959,439,2.322,440,2.216,442,2.257,560,3.59,676,2.105,794,2.763,808,3.257,827,2.735,878,3.274,889,4.007,911,3.272,935,4.007,938,1.7,939,2.735,940,2.378,941,2.378,942,2.378,943,2.967,944,2.735,957,2.378,958,2.234,959,2.543,964,2.735,965,2.543,966,2.234,967,2.234,1014,3.644,1019,2.378,1172,3.644,1180,2.378,1181,2.735,1183,2.967,1184,2.967,1185,2.378,1298,5.338,1319,3.644,1432,6.201,1433,4.233,1434,5.668,1435,4.233,1436,4.783,1437,4.233,1438,4.233,1439,4.233,1440,4.233,1441,4.233,1442,4.233,1443,4.233,1444,4.233,1445,4.233,1446,4.233,1447,4.233,1448,4.233,1449,3.644,1450,3.644,1451,4.233]],["title/additional-documentation/using-systemjs.html",[36,0.917,292,0.661,301,0.599,1452,2.871]],["body/additional-documentation/using-systemjs.html",[36,1.438,38,0.018,114,0.012,115,0.015,116,0.012,134,3.667,193,2.33,257,2.718,258,1.783,259,1.637,542,2.939,658,4.885,718,4.885,890,4.504,1024,3.143,1191,4.025,1452,5.887,1453,5.232,1454,5.232,1455,5.232,1456,5.232,1457,6.351,1458,6.351,1459,5.232,1460,5.232,1461,5.232,1462,5.232,1463,5.232,1464,5.232,1465,5.232,1466,5.232]],["title/additional-documentation/using-implicit-flow.html",[36,0.822,279,1.142,280,0.683,292,0.592,301,0.537]],["body/additional-documentation/using-implicit-flow.html",[0,0.134,30,0.623,36,1.381,38,0.018,39,1.202,46,1.099,68,1.118,72,0.628,84,3.033,103,1.044,109,0.872,114,0.008,115,0.012,116,0.008,132,1.663,139,1.713,172,2.174,199,0.833,202,2.047,206,1.54,214,1.148,246,3.017,253,1.099,255,1.206,257,2.367,258,1.629,259,1.608,268,1.151,277,2.554,278,2.554,279,2.197,280,1.484,284,3.246,288,1.151,291,2.355,292,0.995,315,1.265,325,1.002,332,1.099,334,1.265,343,1.54,344,1.54,356,1.206,359,1.623,401,1.206,415,2.123,416,1.587,432,1.587,433,1.099,438,1.151,442,1.327,513,1.813,542,2.047,574,2.804,676,1.813,790,2.554,794,2.498,878,1.813,903,2.355,907,3.138,911,3.033,923,2.189,924,2.804,932,2.123,935,4.003,938,2.764,939,2.355,940,2.047,941,2.047,942,2.047,944,2.355,949,2.804,957,2.047,958,1.923,959,2.189,964,2.355,965,2.189,966,1.923,967,1.923,984,2.355,989,3.138,990,2.355,1017,2.355,1122,3.138,1139,2.804,1141,2.804,1180,2.047,1181,2.355,1183,2.554,1184,2.554,1185,2.047,1250,3.138,1252,2.554,1313,3.138,1346,2.804,1361,2.804,1370,3.138,1415,4.341,1416,3.52,1467,3.645,1468,3.645,1469,3.645,1470,3.645,1471,3.645,1472,3.645,1473,3.645,1474,5.023,1475,3.645,1476,3.645,1477,3.645,1478,3.645,1479,3.645,1480,3.138,1481,3.645,1482,3.645,1483,3.138,1484,3.138,1485,3.645,1486,5.023,1487,3.645,1488,3.645,1489,3.645]],["title/additional-documentation/using-password-flow.html",[36,0.822,280,0.683,292,0.592,301,0.537,879,2.299]],["body/additional-documentation/using-password-flow.html",[0,0.106,3,0.45,11,0.871,17,2.095,18,1.245,36,1.84,38,0.018,39,0.63,40,0.45,43,0.871,51,0.831,72,0.434,103,0.547,109,0.63,114,0.006,115,0.009,116,0.006,144,2.139,150,2.783,169,1.309,172,1.682,198,3.055,199,1.372,202,1.479,214,1.092,227,1.714,249,4.584,253,0.794,255,1.582,259,0.95,270,2.545,278,1.845,279,1.006,280,1.592,285,2.503,288,0.831,304,1.678,314,1.988,315,0.913,322,1.172,325,1.571,332,0.794,338,1.254,354,2.021,356,1.988,359,1.172,360,1.445,368,1.595,370,1.112,383,1.112,384,1.445,399,1.112,401,2.215,403,1.112,404,1.112,415,2.25,416,1.805,423,1.112,432,1.51,433,1.935,438,1.254,439,1.762,440,1.682,478,2.266,481,2.025,673,2.385,676,1.975,687,1.479,697,1.845,698,1.581,703,3.055,748,3.418,790,1.845,794,2.378,841,1.701,856,3.418,876,3.055,879,5.149,882,1.701,885,1.581,889,2.566,904,3.418,911,3.015,923,2.872,928,2.566,932,2.25,938,1.595,942,2.23,946,2.266,947,5.763,955,2.783,956,3.418,957,2.23,958,2.095,962,3.678,966,2.523,967,2.523,981,2.266,984,1.701,985,3.351,991,1.845,996,3.351,1003,1.479,1005,1.581,1017,1.701,1055,3.089,1121,1.701,1129,3.418,1151,2.025,1161,3.055,1171,1.845,1180,2.686,1185,2.23,1190,2.266,1197,2.025,1214,2.266,1248,3.432,1252,1.845,1264,2.025,1312,2.266,1358,1.701,1368,2.266,1374,3.418,1388,3.055,1415,2.783,1416,2.783,1420,3.055,1421,3.055,1422,2.266,1423,2.266,1424,2.266,1483,3.418,1484,3.418,1490,2.632,1491,2.632,1492,2.632,1493,2.632,1494,2.632,1495,2.632,1496,2.632,1497,2.632,1498,2.632,1499,2.632,1500,2.266,1501,2.266,1502,2.632,1503,2.632,1504,2.632,1505,3.971,1506,2.632,1507,3.971,1508,3.971,1509,3.971,1510,3.971,1511,3.971,1512,3.971,1513,3.971,1514,2.266,1515,2.632,1516,2.632,1517,2.632,1518,2.632,1519,2.632,1520,2.632,1521,2.632,1522,2.632,1523,2.632,1524,3.971,1525,2.632,1526,2.632,1527,2.632,1528,2.632,1529,2.632,1530,3.971,1531,2.632,1532,3.971,1533,2.632,1534,2.632,1535,2.632,1536,2.632,1537,2.632,1538,2.632]],["title/additional-documentation/configure-custom-oauthstorage.html",[171,1.088,292,0.592,301,0.537,312,0.989,932,1.263]],["body/additional-documentation/configure-custom-oauthstorage.html",[0,0.156,18,1.274,36,1.607,38,0.018,68,0.949,72,0.639,103,0.952,114,0.011,115,0.014,116,0.011,171,2.469,188,2.416,255,1.516,257,1.75,258,1.148,259,1.096,276,2.416,312,2.131,315,1.589,352,2.751,365,2.153,368,2.348,384,1.667,387,1.667,399,2.866,403,3.028,404,2.47,533,2.959,544,3.522,557,3.522,558,3.209,560,2.959,561,3.942,757,3.209,804,3.522,878,3.202,884,3.209,920,5.032,921,5.543,922,3.522,923,3.511,924,3.522,925,5.032,932,1.935,933,4.512,1019,2.572,1028,3.209,1034,4.496,1036,3.522,1248,2.751,1251,2.959,1269,3.522,1331,3.942,1539,4.579,1540,4.579,1541,4.579,1542,4.579,1543,4.579,1544,5.845,1545,4.579]],["title/additional-documentation/manually-skipping-login-form.html",[292,0.536,301,0.486,938,1.087,984,1.749,1358,1.749,1546,2.331]],["body/additional-documentation/manually-skipping-login-form.html",[15,1.424,18,1.261,36,1.239,38,0.018,44,1.492,83,1.828,103,1.329,109,1.079,114,0.01,115,0.013,116,0.01,199,1.03,214,1.03,227,1.591,231,3.467,276,2.378,280,1.03,287,3.159,292,0.893,299,2.577,309,1.905,315,1.564,332,1.359,342,1.905,368,1.81,389,2.007,416,1.424,433,1.359,683,2.708,687,2.532,794,2.242,841,2.913,876,3.467,894,3.467,903,2.913,928,2.913,938,1.81,959,2.708,984,2.913,990,2.913,995,3.159,996,3.159,1005,2.708,1087,2.708,1251,2.913,1274,3.467,1309,3.88,1337,3.88,1358,2.913,1361,3.467,1410,3.88,1480,3.88,1546,3.88,1547,4.507,1548,5.786,1549,4.507,1550,4.507,1551,4.507,1552,5.786,1553,4.507,1554,5.786,1555,4.507,1556,4.507,1557,4.507,1558,4.507,1559,4.507,1560,4.507,1561,4.507,1562,4.507,1563,4.507,1564,4.507,1565,4.507,1566,4.507,1567,4.507,1568,4.507,1569,4.507,1570,4.507]],["title/additional-documentation/original-config-api.html",[292,0.592,301,0.537,542,1.679,963,1.931,1128,2.094]],["body/additional-documentation/original-config-api.html",[0,0.107,15,1.265,18,0.873,30,0.685,35,1.883,38,0.018,39,0.959,72,0.438,109,0.959,111,2.589,114,0.009,115,0.012,116,0.009,169,1.993,172,1.692,199,1.378,214,1.378,227,1.101,248,3.001,253,1.208,255,1.326,258,1.004,259,0.959,270,1.784,285,1.883,289,2.808,292,0.794,304,1.693,325,1.473,332,1.615,334,1.39,354,1.693,356,1.997,371,1.693,384,1.95,401,1.326,416,1.906,432,1.265,433,1.942,438,1.265,439,2.132,440,2.035,442,1.458,542,3.618,575,2.589,673,3.218,676,1.993,687,2.25,689,3.082,698,2.407,794,1.993,835,3.449,841,2.589,878,1.993,885,2.407,902,3.082,903,2.589,911,3.184,923,3.218,932,1.693,938,2.424,940,2.25,941,2.25,942,2.25,943,2.808,957,2.25,958,2.114,959,2.407,963,4.162,964,2.589,965,2.407,966,2.114,967,2.114,978,2.808,992,3.082,1007,3.082,1019,2.25,1024,2.407,1118,3.449,1125,2.808,1128,3.754,1130,3.082,1162,4.12,1180,2.25,1181,2.589,1183,2.808,1184,2.808,1185,2.25,1238,3.449,1239,3.449,1290,3.082,1414,3.449,1415,2.808,1416,2.808,1419,3.449,1420,3.082,1421,3.082,1428,3.449,1429,3.449,1434,4.611,1436,3.449,1449,3.449,1450,3.449,1500,3.449,1501,3.449,1514,3.449,1571,4.006,1572,4.006,1573,4.006,1574,4.006,1575,4.006,1576,4.006,1577,4.006,1578,4.006,1579,4.006,1580,4.006,1581,4.006]]],"invertedIndex":[["",{"_index":38,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["0",{"_index":160,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"injectables/UrlHelperService.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["0.10.2",{"_index":775,"title":{},"body":{"dependencies.html":{}}}],["0.33",{"_index":1156,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["0.38.1",{"_index":771,"title":{},"body":{"dependencies.html":{}}}],["0.5",{"_index":1153,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["0.9.0",{"_index":759,"title":{},"body":{"dependencies.html":{}}}],["03",{"_index":654,"title":{},"body":{"changelog.html":{}}}],["07bb62d",{"_index":715,"title":{},"body":{"changelog.html":{}}}],["0f03d39",{"_index":696,"title":{},"body":{"changelog.html":{}}}],["1",{"_index":611,"title":{},"body":{"injectables/UrlHelperService.html":{},"overview.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["1.0",{"_index":1380,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["1.0.1",{"_index":769,"title":{},"body":{"dependencies.html":{}}}],["1.11.1",{"_index":773,"title":{},"body":{"dependencies.html":{}}}],["1.2.1",{"_index":763,"title":{},"body":{"dependencies.html":{}}}],["1.2.4",{"_index":753,"title":{},"body":{"dependencies.html":{}}}],["1.3.0",{"_index":756,"title":{},"body":{"dependencies.html":{}}}],["11",{"_index":695,"title":{},"body":{"changelog.html":{}}}],["19",{"_index":1107,"title":{},"body":{"overview.html":{}}}],["1_0.html#tokenendpoint",{"_index":427,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["1_0.html#userinfo",{"_index":434,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["2",{"_index":96,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{}}}],["2.0",{"_index":930,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["2.1",{"_index":790,"title":{},"body":{"index.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["2/oidc",{"_index":1020,"title":{},"body":{"index.html":{}}}],["20",{"_index":1032,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{}}}],["20.000",{"_index":1231,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["2017",{"_index":1043,"title":{},"body":{"license.html":{}}}],["2020",{"_index":653,"title":{},"body":{"changelog.html":{}}}],["23",{"_index":655,"title":{},"body":{"changelog.html":{}}}],["3.1",{"_index":1235,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["3.3.7",{"_index":758,"title":{},"body":{"dependencies.html":{}}}],["31c6273",{"_index":663,"title":{},"body":{"changelog.html":{}}}],["3d331f2",{"_index":717,"title":{},"body":{"changelog.html":{}}}],["3f44eca",{"_index":699,"title":{},"body":{"changelog.html":{}}}],["4",{"_index":675,"title":{},"body":{"changelog.html":{},"overview.html":{},"additional-documentation/session-checks.html":{}}}],["4.3",{"_index":846,"title":{},"body":{"index.html":{}}}],["4.x",{"_index":840,"title":{},"body":{"index.html":{}}}],["401",{"_index":1243,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["403",{"_index":1244,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["4202",{"_index":914,"title":{},"body":{"index.html":{}}}],["4202]/index.html",{"_index":915,"title":{},"body":{"index.html":{}}}],["4202]/silent",{"_index":916,"title":{},"body":{"index.html":{}}}],["4711",{"_index":1303,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["4bf8901",{"_index":690,"title":{},"body":{"changelog.html":{}}}],["4th",{"_index":1184,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["5",{"_index":1108,"title":{},"body":{"overview.html":{}}}],["5.x",{"_index":843,"title":{},"body":{"index.html":{}}}],["58c6354",{"_index":681,"title":{},"body":{"changelog.html":{}}}],["6",{"_index":839,"title":{},"body":{"index.html":{}}}],["6.5.2",{"_index":766,"title":{},"body":{"dependencies.html":{}}}],["6.5.4",{"_index":764,"title":{},"body":{"dependencies.html":{}}}],["687",{"_index":706,"title":{},"body":{"changelog.html":{}}}],["7",{"_index":837,"title":{},"body":{"index.html":{}}}],["7.x",{"_index":838,"title":{},"body":{"index.html":{}}}],["71b705c",{"_index":705,"title":{},"body":{"changelog.html":{}}}],["75",{"_index":1144,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["77cb37a",{"_index":660,"title":{},"body":{"changelog.html":{}}}],["7eac8ae",{"_index":710,"title":{},"body":{"changelog.html":{}}}],["8",{"_index":662,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["8.0.12",{"_index":760,"title":{},"body":{"dependencies.html":{}}}],["8.x",{"_index":836,"title":{},"body":{"index.html":{}}}],["8ab853b",{"_index":668,"title":{},"body":{"changelog.html":{}}}],["8fa99ff",{"_index":701,"title":{},"body":{"changelog.html":{}}}],["9",{"_index":275,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["9.0.0",{"_index":755,"title":{},"body":{"dependencies.html":{}}}],["9.0.1",{"_index":754,"title":{},"body":{"dependencies.html":{}}}],["9.0.7",{"_index":743,"title":{},"body":{"dependencies.html":{}}}],["9.1.0",{"_index":652,"title":{},"body":{"changelog.html":{}}}],["9.x",{"_index":833,"title":{},"body":{"index.html":{}}}],["93902a5",{"_index":672,"title":{},"body":{"changelog.html":{}}}],["9]{3",{"_index":107,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["_throw(err",{"_index":1256,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["a021627fd9d3the",{"_index":1411,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["above",{"_index":1019,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["abstract",{"_index":10,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["abstraction",{"_index":135,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["abstractvalidationhandler",{"_index":1,"title":{"classes/AbstractValidationHandler.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["access",{"_index":996,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["access_token",{"_index":63,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{}}}],["accesstoken",{"_index":75,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["acr_values_supported",{"_index":454,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["action",{"_index":1095,"title":{},"body":{"license.html":{},"additional-documentation/session-checks.html":{}}}],["activate",{"_index":1389,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["activated",{"_index":1382,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["actual",{"_index":316,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["adapt",{"_index":1363,"title":{"additional-documentation/adapt-id_token-validation.html":{}},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["add",{"_index":1034,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["adding",{"_index":1455,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["addition",{"_index":1386,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["additional",{"_index":301,"title":{"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["adhere",{"_index":1444,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["adjust",{"_index":1148,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["advanced",{"_index":1202,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["against",{"_index":61,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["alg",{"_index":49,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["alg.match(/^.s[0",{"_index":106,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["alg.substr(2",{"_index":113,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["algorithm",{"_index":29,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["algorithms",{"_index":137,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["aliases",{"_index":1110,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["alice/alice",{"_index":909,"title":{},"body":{"index.html":{}}}],["align",{"_index":927,"title":{},"body":{"index.html":{}}}],["allow",{"_index":669,"title":{},"body":{"changelog.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["allowedurls",{"_index":576,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["allows",{"_index":627,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["already",{"_index":13,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["alternative",{"_index":1186,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["although",{"_index":1508,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["analyzing",{"_index":739,"title":{},"body":{"changelog.html":{}}}],["and/or",{"_index":1064,"title":{},"body":{"license.html":{}}}],["angular",{"_index":257,"title":{},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["angular/animations",{"_index":742,"title":{},"body":{"dependencies.html":{}}}],["angular/common",{"_index":546,"title":{},"body":{"modules/OAuthModule.html":{},"dependencies.html":{}}}],["angular/common/http",{"_index":188,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["angular/compiler",{"_index":744,"title":{},"body":{"dependencies.html":{}}}],["angular/core",{"_index":132,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"dependencies.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["angular/elements",{"_index":745,"title":{},"body":{"dependencies.html":{}}}],["angular/forms",{"_index":746,"title":{},"body":{"dependencies.html":{}}}],["angular/platform",{"_index":747,"title":{},"body":{"dependencies.html":{}}}],["angular/router",{"_index":750,"title":{},"body":{"dependencies.html":{}}}],["another",{"_index":1171,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["anymore",{"_index":373,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["aot",{"_index":1543,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["api",{"_index":963,"title":{"additional-documentation/original-config-api.html":{}},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["app",{"_index":903,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["app.component.html",{"_index":1475,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["app/home.html",{"_index":1479,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["appcomponent",{"_index":923,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["applicable",{"_index":1341,"title":{},"body":{"additional-documentation/events.html":{}}}],["application",{"_index":284,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["applications",{"_index":293,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/session-checks.html":{}}}],["appmodule",{"_index":925,"title":{},"body":{"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["approach",{"_index":1177,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["approutermodule",{"_index":1354,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["arising",{"_index":1098,"title":{},"body":{"license.html":{}}}],["array",{"_index":577,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["arraybuffer",{"_index":125,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["aspnetcore",{"_index":1413,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["asset",{"_index":1213,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["assets",{"_index":1216,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["associated",{"_index":1052,"title":{},"body":{"license.html":{}}}],["asstring",{"_index":91,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["assumes",{"_index":901,"title":{},"body":{"index.html":{}}}],["async",{"_index":25,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["at_hash",{"_index":60,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["athash",{"_index":97,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["attacks",{"_index":347,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["auth",{"_index":356,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["auth.config",{"_index":1471,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["auth0",{"_index":1039,"title":{},"body":{"index.html":{}}}],["auth_config",{"_index":1113,"title":{},"body":{"miscellaneous/variables.html":{}}}],["authcodeflowconfig",{"_index":936,"title":{},"body":{"index.html":{}}}],["authconfig",{"_index":935,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["authenticated",{"_index":1410,"title":{},"body":{"additional-documentation/server-side-rendering.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["authentication",{"_index":1030,"title":{},"body":{"index.html":{}}}],["authorization_endpoint",{"_index":443,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["authors",{"_index":1088,"title":{},"body":{"license.html":{}}}],["authstorage",{"_index":178,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["automate",{"_index":997,"title":{},"body":{"index.html":{}}}],["automatic",{"_index":664,"title":{},"body":{"changelog.html":{}}}],["automatically",{"_index":881,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{}}}],["available",{"_index":1028,"title":{},"body":{"index.html":{},"modules.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["avoid",{"_index":345,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["await",{"_index":88,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["awesome",{"_index":736,"title":{},"body":{"changelog.html":{}}}],["b",{"_index":1498,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["b64decodeunicode",{"_index":778,"title":{},"body":{"miscellaneous/functions.html":{}}}],["b64decodeunicode(str",{"_index":783,"title":{},"body":{"miscellaneous/functions.html":{}}}],["back",{"_index":1290,"title":{},"body":{"additional-documentation/popup-based-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["backend",{"_index":797,"title":{},"body":{"index.html":{}}}],["backwards",{"_index":1573,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["base",{"_index":1436,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["base64",{"_index":70,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"dependencies.html":{}}}],["base64urlencode",{"_index":69,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/functions.html":{}}}],["base64urlencode(leftmosthalf",{"_index":98,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["base64urlencode(str",{"_index":785,"title":{},"body":{"miscellaneous/functions.html":{}}}],["based",{"_index":697,"title":{"additional-documentation/popup-based-login.html":{}},"body":{"changelog.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["bearer",{"_index":241,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["beaugrand",{"_index":1454,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["before",{"_index":885,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["beginning",{"_index":273,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/session-checks.html":{}}}],["below",{"_index":1506,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["best",{"_index":343,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["better",{"_index":1492,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["between",{"_index":1151,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["big",{"_index":719,"title":{},"body":{"changelog.html":{}}}],["bind",{"_index":1395,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["blog",{"_index":1406,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["bob/bob",{"_index":908,"title":{},"body":{"index.html":{}}}],["boolean",{"_index":208,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["bootstrap",{"_index":757,"title":{},"body":{"dependencies.html":{},"index.html":{},"overview.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["bootstrapping",{"_index":980,"title":{},"body":{"index.html":{}}}],["breaking",{"_index":811,"title":{},"body":{"index.html":{}}}],["brecht",{"_index":721,"title":{},"body":{"changelog.html":{}}}],["browse",{"_index":1102,"title":{},"body":{"modules.html":{}}}],["browser",{"_index":748,"title":{},"body":{"dependencies.html":{},"additional-documentation/using-password-flow.html":{}}}],["browsers",{"_index":899,"title":{},"body":{"index.html":{}}}],["buffer",{"_index":127,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["bug",{"_index":691,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["bugfixes",{"_index":855,"title":{},"body":{"index.html":{}}}],["build",{"_index":1036,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["bundle",{"_index":295,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["bundling",{"_index":826,"title":{},"body":{"index.html":{}}}],["bytearray",{"_index":131,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["bytearray].map(value",{"_index":155,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["c",{"_index":1042,"title":{},"body":{"license.html":{}}}],["calchash",{"_index":20,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["calchash(valuetohash",{"_index":27,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["calculates",{"_index":32,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["call",{"_index":1139,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["callback",{"_index":1274,"title":{"additional-documentation/callback-after-login.html":{}},"body":{"additional-documentation/callback-after-login.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["called",{"_index":354,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["calling",{"_index":995,"title":{},"body":{"index.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["calls",{"_index":571,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["care",{"_index":1135,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["carefully",{"_index":272,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{}}}],["carlier",{"_index":722,"title":{},"body":{"changelog.html":{}}}],["carry",{"_index":1553,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["case",{"_index":1003,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{}}}],["cases",{"_index":1197,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["catch",{"_index":1012,"title":{},"body":{"index.html":{}}}],["catch(err",{"_index":1222,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["catcherror",{"_index":191,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["catcherror(_",{"_index":234,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["change",{"_index":812,"title":{},"body":{"index.html":{}}}],["changelog",{"_index":651,"title":{"changelog.html":{}},"body":{"changelog.html":{}}}],["changes",{"_index":1392,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["charactes",{"_index":628,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["charge",{"_index":1047,"title":{},"body":{"license.html":{}}}],["check",{"_index":342,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["check_session_iframe",{"_index":448,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["checks",{"_index":683,"title":{"additional-documentation/session-checks.html":{}},"body":{"changelog.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["checkurl(url",{"_index":207,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["circular",{"_index":1260,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["cites",{"_index":1509,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["cjs",{"_index":1463,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["claim",{"_index":1091,"title":{},"body":{"license.html":{}}}],["claim_types_supported",{"_index":466,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["claims",{"_index":415,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["claims.given_name",{"_index":1484,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["claims_parameter_supported",{"_index":468,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["claims_supported",{"_index":467,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["claimsathash",{"_index":99,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["class",{"_index":0,"title":{"classes/AbstractValidationHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"classes/ReceivedTokens.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["classes",{"_index":2,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"classes/ReceivedTokens.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"overview.html":{}}}],["clear",{"_index":369,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["cli",{"_index":1211,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["cli.json",{"_index":1215,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["client",{"_index":401,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["clientid",{"_index":944,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["clientids",{"_index":910,"title":{},"body":{"index.html":{}}}],["code",{"_index":288,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["code_error",{"_index":502,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["codes",{"_index":1242,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["come",{"_index":1179,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["commands",{"_index":872,"title":{},"body":{"index.html":{}}}],["commonjs",{"_index":825,"title":{},"body":{"index.html":{}}}],["commonmodule",{"_index":545,"title":{},"body":{"modules/OAuthModule.html":{}}}],["communication",{"_index":1226,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["community",{"_index":807,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{}}}],["compat",{"_index":765,"title":{},"body":{"dependencies.html":{}}}],["compatibility",{"_index":1574,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["compatible",{"_index":385,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["compensates",{"_index":1166,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["compodoc/compodoc",{"_index":873,"title":{},"body":{"index.html":{}}}],["component",{"_index":1415,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["conditions",{"_index":1071,"title":{},"body":{"license.html":{}}}],["config",{"_index":542,"title":{"additional-documentation/original-config-api.html":{}},"body":{"modules/OAuthModule.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["configuration",{"_index":889,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["configure",{"_index":932,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["configured",{"_index":949,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["configuring",{"_index":1141,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["connect",{"_index":425,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["connection",{"_index":1099,"title":{},"body":{"license.html":{}}}],["consistent",{"_index":1449,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["console",{"_index":386,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["console.debug(\"logged",{"_index":1279,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["console.debug('given_name",{"_index":1532,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["console.debug('ok",{"_index":1538,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["console.debug('refresh",{"_index":1220,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["console.debug('state",{"_index":1126,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["console.debug('your",{"_index":1403,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["console.debug(context",{"_index":1280,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["console.error('actual",{"_index":102,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["console.error('exptected",{"_index":101,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["console.error('refresh",{"_index":1223,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["console.error(err",{"_index":298,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["console.error(event",{"_index":1323,"title":{},"body":{"additional-documentation/events.html":{}}}],["console.log(e));or",{"_index":1315,"title":{},"body":{"additional-documentation/events.html":{}}}],["console.warn(event",{"_index":1324,"title":{},"body":{"additional-documentation/events.html":{}}}],["const",{"_index":139,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/UrlHelperService.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["constructor",{"_index":169,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/JwksValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["constructor(authstorage",{"_index":170,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["constructor(private",{"_index":1416,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["constructor(readonly",{"_index":516,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["constructor(type",{"_index":490,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["contain",{"_index":852,"title":{},"body":{"index.html":{}}}],["contains",{"_index":1361,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["context",{"_index":1276,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["contract",{"_index":1096,"title":{},"body":{"license.html":{}}}],["contribute",{"_index":865,"title":{},"body":{"index.html":{}}}],["contributers",{"_index":720,"title":{},"body":{"changelog.html":{}}}],["contribution",{"_index":1282,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["contributions",{"_index":857,"title":{},"body":{"index.html":{}}}],["control",{"_index":1549,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["controls",{"_index":374,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["convenience",{"_index":972,"title":{},"body":{"index.html":{}}}],["cookie",{"_index":1174,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["cookies",{"_index":680,"title":{},"body":{"changelog.html":{}}}],["copied",{"_index":1208,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["copies",{"_index":1066,"title":{},"body":{"license.html":{}}}],["copy",{"_index":1050,"title":{},"body":{"license.html":{}}}],["copyright",{"_index":1041,"title":{},"body":{"license.html":{}}}],["core",{"_index":426,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{}}}],["cought",{"_index":1255,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["count",{"_index":1205,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["create",{"_index":405,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/popup-based-login.html":{}}}],["createdefaultlogger",{"_index":554,"title":{},"body":{"modules/OAuthModule.html":{},"miscellaneous/functions.html":{}}}],["createdefaultstorage",{"_index":555,"title":{},"body":{"modules/OAuthModule.html":{},"miscellaneous/functions.html":{}}}],["creates",{"_index":1259,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["credentials",{"_index":1527,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["credits",{"_index":791,"title":{},"body":{"index.html":{}}}],["critical",{"_index":854,"title":{},"body":{"index.html":{}}}],["crypto",{"_index":136,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["current",{"_index":928,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["custom",{"_index":312,"title":{"additional-documentation/custom-query-parameters.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["customhashfragment",{"_index":305,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{}}}],["customize",{"_index":1539,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["customqueryparams",{"_index":1297,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["customredirecturi",{"_index":306,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["customurlvalidation",{"_index":578,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["cycle",{"_index":848,"title":{},"body":{"index.html":{}}}],["damages",{"_index":1092,"title":{},"body":{"license.html":{}}}],["daniel",{"_index":723,"title":{},"body":{"changelog.html":{}}}],["data",{"_index":144,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-password-flow.html":{}}}],["deal",{"_index":1054,"title":{},"body":{"license.html":{}}}],["dealings",{"_index":1100,"title":{},"body":{"license.html":{}}}],["debug",{"_index":523,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["debug(message",{"_index":392,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["debugging",{"_index":1311,"title":{},"body":{"additional-documentation/events.html":{}}}],["decide",{"_index":1375,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["declarations",{"_index":558,"title":{},"body":{"modules/OAuthModule.html":{},"index.html":{},"overview.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["decodekey",{"_index":631,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodekey(k",{"_index":635,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodeuricomponent(hash",{"_index":608,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["decodeuricomponent(k",{"_index":647,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodeuricomponent(v",{"_index":648,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodevalue",{"_index":632,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["decodevalue(v",{"_index":638,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["default",{"_index":365,"title":{},"body":{"classes/LoginOptions.html":{},"modules/OAuthModule.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["defaultextension",{"_index":1464,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["defaulthashhandler",{"_index":118,"title":{"injectables/DefaultHashHandler.html":{}},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"modules/OAuthModule.html":{}}}],["defaultoauthinterceptor",{"_index":164,"title":{"interceptors/DefaultOAuthInterceptor.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["defaults",{"_index":1182,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["define",{"_index":1212,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["defined",{"_index":30,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"classes/ReceivedTokens.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["defines",{"_index":348,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["deleted",{"_index":1385,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["demand",{"_index":856,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["demands",{"_index":946,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["demo",{"_index":676,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["demonstration",{"_index":1277,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["dependancy",{"_index":659,"title":{},"body":{"changelog.html":{}}}],["dependencies",{"_index":741,"title":{"dependencies.html":{}},"body":{"dependencies.html":{},"overview.html":{}}}],["dependency",{"_index":286,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["depending",{"_index":975,"title":{},"body":{"index.html":{}}}],["deprecated",{"_index":359,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["deps",{"_index":1458,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["described",{"_index":1161,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-password-flow.html":{}}}],["describes",{"_index":1571,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["description",{"_index":9,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{}}}],["design",{"_index":1535,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["details",{"_index":689,"title":{},"body":{"changelog.html":{},"additional-documentation/events.html":{},"additional-documentation/original-config-api.html":{}}}],["detects",{"_index":355,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["different",{"_index":1319,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["directed",{"_index":1566,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["directly",{"_index":991,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-password-flow.html":{}}}],["directory",{"_index":1210,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["disable",{"_index":340,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["disabled",{"_index":1332,"title":{},"body":{"additional-documentation/events.html":{}}}],["disableoauth2statecheck",{"_index":307,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["disablepkci",{"_index":969,"title":{},"body":{"index.html":{}}}],["discovery",{"_index":439,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["discovery_document_load_error",{"_index":497,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["discovery_document_loaded",{"_index":494,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["discovery_document_validation_error",{"_index":498,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["display",{"_index":986,"title":{},"body":{"index.html":{}}}],["display_values_supported",{"_index":465,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["displayed",{"_index":372,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["distribute",{"_index":1062,"title":{},"body":{"license.html":{}}}],["docs",{"_index":688,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{}}}],["document",{"_index":440,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["documentation",{"_index":804,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["documentation/implicit",{"_index":1022,"title":{},"body":{"index.html":{}}}],["documentation/refreshing",{"_index":1010,"title":{},"body":{"index.html":{}}}],["doesn't",{"_index":1430,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["doing",{"_index":351,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{}}}],["domains",{"_index":1442,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["don't",{"_index":985,"title":{},"body":{"index.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["dosn't",{"_index":1577,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["draft",{"_index":929,"title":{},"body":{"index.html":{}}}],["dummy",{"_index":249,"title":{},"body":{"classes/JwksValidationHandler.html":{},"additional-documentation/using-password-flow.html":{}}}],["dummyclientsecret",{"_index":956,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["during",{"_index":1331,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["dynamic",{"_index":749,"title":{},"body":{"dependencies.html":{}}}],["e",{"_index":150,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"changelog.html":{},"additional-documentation/using-password-flow.html":{}}}],["e.type",{"_index":231,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["e2599e0",{"_index":707,"title":{},"body":{"changelog.html":{}}}],["each",{"_index":851,"title":{},"body":{"index.html":{}}}],["ease",{"_index":888,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["easier",{"_index":1164,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["easiest",{"_index":1262,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["edge",{"_index":1200,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["elements",{"_index":752,"title":{},"body":{"dependencies.html":{}}}],["email",{"_index":967,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["enable",{"_index":1425,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["encodekey",{"_index":633,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodekey(k",{"_index":641,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encoder",{"_index":140,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"dependencies.html":{}}}],["encoder.encode(valuetohash",{"_index":145,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["encodeuricomponent(k",{"_index":645,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodeuricomponent(v",{"_index":646,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodevalue",{"_index":634,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encodevalue(v",{"_index":643,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["encounter",{"_index":1326,"title":{},"body":{"additional-documentation/events.html":{}}}],["end_session_endpoint",{"_index":449,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["endpoint",{"_index":423,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["endpoints",{"_index":1434,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["endpont",{"_index":1520,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["ends",{"_index":1383,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["enforce",{"_index":952,"title":{},"body":{"index.html":{}}}],["enhancements",{"_index":863,"title":{},"body":{"index.html":{}}}],["ensure",{"_index":994,"title":{},"body":{"index.html":{}}}],["ensures",{"_index":1433,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["enter",{"_index":1490,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["enters",{"_index":880,"title":{},"body":{"index.html":{}}}],["enum",{"_index":1344,"title":{},"body":{"additional-documentation/events.html":{}}}],["environment",{"_index":821,"title":{},"body":{"index.html":{}}}],["err",{"_index":269,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"miscellaneous/variables.html":{}}}],["err));when",{"_index":1224,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["error",{"_index":200,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["error('algorithm",{"_index":110,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["error(message",{"_index":397,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["errorhandler",{"_index":173,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["errors",{"_index":1239,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/original-config-api.html":{}}}],["escapedkey",{"_index":618,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["escapedvalue",{"_index":619,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["etc",{"_index":921,"title":{},"body":{"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["event",{"_index":1087,"title":{},"body":{"license.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["events",{"_index":361,"title":{"additional-documentation/events.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["events.ts",{"_index":1345,"title":{},"body":{"additional-documentation/events.html":{}}}],["eventtype",{"_index":491,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["example",{"_index":1251,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["examples",{"_index":900,"title":{},"body":{"index.html":{}}}],["execute",{"_index":979,"title":{},"body":{"index.html":{}}}],["expected",{"_index":1333,"title":{},"body":{"additional-documentation/events.html":{}}}],["expired",{"_index":1536,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["expires",{"_index":886,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["expires_in",{"_index":430,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["explicit",{"_index":1568,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["explicitly",{"_index":1374,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["export",{"_index":72,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["exports",{"_index":559,"title":{},"body":{"modules/OAuthModule.html":{},"overview.html":{}}}],["express",{"_index":1078,"title":{},"body":{"license.html":{}}}],["extend",{"_index":1545,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["extends",{"_index":261,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["extensive",{"_index":1317,"title":{},"body":{"additional-documentation/events.html":{}}}],["fact",{"_index":1167,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["factor",{"_index":1149,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["factories",{"_index":556,"title":{},"body":{"modules/OAuthModule.html":{}}}],["factory",{"_index":1542,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["fail",{"_index":1446,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["fails",{"_index":1431,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{}}],["fall",{"_index":1289,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["false",{"_index":228,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["far",{"_index":1163,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["features",{"_index":656,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["feel",{"_index":858,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["fetch",{"_index":981,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["fetching",{"_index":1524,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["field",{"_index":50,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["file",{"_index":5,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{}}}],["files",{"_index":1053,"title":{},"body":{"license.html":{}}}],["filter",{"_index":192,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["filter(e",{"_index":230,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["filter(token",{"_index":226,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["find",{"_index":1118,"title":{},"body":{"additional-documentation/getting-started.html":{},"additional-documentation/original-config-api.html":{}}}],["fine",{"_index":1015,"title":{},"body":{"index.html":{}}}],["fired",{"_index":1143,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["first",{"_index":959,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["fitness",{"_index":1083,"title":{},"body":{"license.html":{}}}],["fixed",{"_index":693,"title":{},"body":{"changelog.html":{}}}],["fixes",{"_index":692,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["flight",{"_index":1473,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["flow",{"_index":280,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["flow.html",{"_index":1023,"title":{},"body":{"index.html":{}}}],["flows",{"_index":322,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["folder",{"_index":867,"title":{},"body":{"index.html":{}}}],["followed",{"_index":327,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["following",{"_index":332,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"license.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["follows",{"_index":1541,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["for(var",{"_index":1206,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["form",{"_index":984,"title":{"additional-documentation/manually-skipping-login-form.html":{}},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["format",{"_index":1462,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["former",{"_index":1366,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["forroot",{"_index":538,"title":{},"body":{"modules/OAuthModule.html":{}}}],["forroot(config",{"_index":539,"title":{},"body":{"modules/OAuthModule.html":{}}}],["found",{"_index":1269,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["foundation",{"_index":931,"title":{},"body":{"index.html":{}}}],["four",{"_index":960,"title":{},"body":{"index.html":{}}}],["fragment",{"_index":313,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["free",{"_index":859,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["full",{"_index":1343,"title":{},"body":{"additional-documentation/events.html":{}}}],["function",{"_index":352,"title":{},"body":{"classes/LoginOptions.html":{},"classes/OAuthResourceServerConfig.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["functions",{"_index":777,"title":{"miscellaneous/functions.html":{}},"body":{"miscellaneous/functions.html":{}}}],["furnished",{"_index":1069,"title":{},"body":{"license.html":{}}}],["further",{"_index":892,"title":{},"body":{"index.html":{}}}],["g",{"_index":703,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["geheim",{"_index":1513,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["geheim').then",{"_index":1534,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["geheim').then((resp",{"_index":1529,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["general",{"_index":948,"title":{},"body":{"index.html":{}}}],["generate",{"_index":871,"title":{},"body":{"index.html":{}}}],["gethashfragmentparams",{"_index":601,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["gethashfragmentparams(customhashfragment",{"_index":603,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["getitem",{"_index":471,"title":{},"body":{"injectables/MemoryStorage.html":{},"classes/OAuthStorage.html":{}}}],["getitem(key",{"_index":407,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["getting",{"_index":649,"title":{"changelog.html":{},"index.html":{},"license.html":{},"additional-documentation/getting-started.html":{}},"body":{"additional-documentation/getting-started.html":{},"additional-documentation/silent-refresh.html":{}}}],["give",{"_index":1227,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["go",{"_index":1201,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["gone",{"_index":1339,"title":{},"body":{"additional-documentation/events.html":{}}}],["google",{"_index":1439,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["grant_types_supported",{"_index":456,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["granted",{"_index":1046,"title":{},"body":{"license.html":{}}}],["graph",{"_index":1101,"title":{},"body":{"modules.html":{}}}],["great",{"_index":1281,"title":{},"body":{"additional-documentation/popup-based-login.html":{},"additional-documentation/server-side-rendering.html":{}}}],["guard",{"_index":1563,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["guards",{"_index":810,"title":{},"body":{"index.html":{}}}],["guide",{"_index":1119,"title":{},"body":{"additional-documentation/getting-started.html":{}}}],["half",{"_index":1155,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["hallo",{"_index":1486,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["handle(req",{"_index":222,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["handleerror",{"_index":580,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["handleerror(err",{"_index":581,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["handler",{"_index":201,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["handler.ts",{"_index":8,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/variables.html":{}}}],["handler.ts:10",{"_index":583,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{}}}],["handler.ts:11",{"_index":483,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["handler.ts:14",{"_index":123,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["handler.ts:20",{"_index":624,"title":{},"body":{"classes/ValidationHandler.html":{}}}],["handler.ts:25",{"_index":263,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["handler.ts:26",{"_index":130,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["handler.ts:27",{"_index":623,"title":{},"body":{"classes/ValidationHandler.html":{}}}],["handler.ts:34",{"_index":126,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["handler.ts:41",{"_index":66,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:46",{"_index":58,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:5",{"_index":589,"title":{},"body":{"classes/OAuthResourceServerErrorHandler.html":{}}}],["handler.ts:71",{"_index":47,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:8",{"_index":484,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["handler.ts:88",{"_index":31,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["handler.ts:9",{"_index":245,"title":{},"body":{"classes/HashHandler.html":{}}}],["handlers",{"_index":80,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["handling",{"_index":1237,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["hash",{"_index":33,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"changelog.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["hash.indexof",{"_index":609,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["hash.substr(1",{"_index":613,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["hash.substr(questionmarkposition",{"_index":612,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["hashalg",{"_index":85,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["hasharray",{"_index":142,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hashhandler",{"_index":138,"title":{"classes/HashHandler.html":{}},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"modules/OAuthModule.html":{}}}],["hashing",{"_index":793,"title":{},"body":{"index.html":{}}}],["hashlocationstrategy",{"_index":824,"title":{},"body":{"index.html":{}}}],["hashstrategy",{"_index":1018,"title":{"additional-documentation/routing-with-the-hashstrategy.html":{}},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["hashstring",{"_index":147,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hasreceivedtokens",{"_index":1552,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["header",{"_index":55,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["headers",{"_index":242,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["helper",{"_index":71,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["helper.service",{"_index":549,"title":{},"body":{"modules/OAuthModule.html":{}}}],["helper.service.ts",{"_index":600,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["helper.service.ts:25",{"_index":606,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["helper.service.ts:5",{"_index":604,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["helper.ts",{"_index":780,"title":{},"body":{"miscellaneous/functions.html":{}}}],["hence",{"_index":875,"title":{},"body":{"index.html":{}}}],["here",{"_index":1248,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["here's",{"_index":1325,"title":{},"body":{"additional-documentation/events.html":{}}}],["hereby",{"_index":1045,"title":{},"body":{"license.html":{}}}],["hexcode",{"_index":156,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexcode.padstart(2",{"_index":159,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexcodes",{"_index":154,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexcodes.join",{"_index":161,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hexstring(buffer",{"_index":153,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["hidden",{"_index":1169,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["holders",{"_index":1089,"title":{},"body":{"license.html":{}}}],["home",{"_index":1278,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["homecomponent",{"_index":924,"title":{},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["hook",{"_index":379,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{}}}],["hooked",{"_index":81,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["http",{"_index":1240,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["http://localhost:4200",{"_index":905,"title":{},"body":{"index.html":{}}}],["http://localhost:8080/#/home",{"_index":1362,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["http://openid.net/specs/openid",{"_index":424,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["http://www.angular.at/api",{"_index":1004,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["http_interceptors",{"_index":547,"title":{},"body":{"modules/OAuthModule.html":{}}}],["httpclientmodule",{"_index":920,"title":{},"body":{"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["httperrorresponse",{"_index":1266,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpevent",{"_index":186,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httphandler",{"_index":182,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpinterceptor",{"_index":187,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpinterceptors",{"_index":1234,"title":{"additional-documentation/working-with-httpinterceptors.html":{}},"body":{}}],["httpmodule",{"_index":709,"title":{},"body":{"changelog.html":{}}}],["httpparametercodec",{"_index":630,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["httprequest",{"_index":180,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["httpresponse",{"_index":582,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["https://demo.identityserver.io",{"_index":937,"title":{},"body":{"index.html":{}}}],["https://github.com/jeroenheijmans/sample",{"_index":809,"title":{},"body":{"index.html":{}}}],["https://github.com/lankaapura/angular",{"_index":1412,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["https://github.com/manfredsteyer/angular",{"_index":803,"title":{},"body":{"index.html":{}}}],["https://manfredsteyer.github.io/angular",{"_index":805,"title":{},"body":{"index.html":{}}}],["https://medium.com/lankapura/angular",{"_index":1409,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["https://steyer",{"_index":1180,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["i.e",{"_index":1438,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["i=0",{"_index":1207,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["id",{"_index":416,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["id_token",{"_index":51,"title":{"additional-documentation/adapt-id_token-validation.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["id_token's",{"_index":53,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["id_token_encryption_alg_values_supported",{"_index":462,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["id_token_encryption_enc_values_supported",{"_index":463,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["id_token_signing_alg_values_supported",{"_index":461,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["idclaims",{"_index":417,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ideas",{"_index":862,"title":{},"body":{"index.html":{}}}],["identity",{"_index":794,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["identityserver",{"_index":830,"title":{},"body":{"index.html":{}}}],["idsvr",{"_index":674,"title":{},"body":{"changelog.html":{},"additional-documentation/server-side-rendering.html":{}}}],["idtoken",{"_index":74,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["idtokenclaims",{"_index":77,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["idtokenclaimsjson",{"_index":419,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["idtokenexpiresat",{"_index":421,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["idtokenheader",{"_index":76,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["idtokenheaderjson",{"_index":420,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ie",{"_index":694,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/popup-based-login.html":{}}}],["iframe",{"_index":1170,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["iframes",{"_index":320,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["implcit",{"_index":1504,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["implemantion",{"_index":1253,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["implement",{"_index":1250,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["implementation",{"_index":11,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["implementations",{"_index":406,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["implemented",{"_index":1378,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["implementing",{"_index":277,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["implements",{"_index":14,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["implicit",{"_index":279,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{}},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["implied",{"_index":1079,"title":{},"body":{"license.html":{}}}],["import",{"_index":68,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["important",{"_index":961,"title":{},"body":{"index.html":{}}}],["imports",{"_index":557,"title":{},"body":{"modules/OAuthModule.html":{},"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["included",{"_index":357,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"license.html":{}}}],["includes",{"_index":350,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["including",{"_index":1057,"title":{},"body":{"license.html":{}}}],["index",{"_index":21,"title":{"index.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["index.html",{"_index":941,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["indexable",{"_index":621,"title":{},"body":{"interfaces/UserInfo.html":{}}}],["inferhashalgorithm",{"_index":24,"title":{},"body":{"classes/AbstractValidationHandler.html":{}}}],["inferhashalgorithm(jwtheader",{"_index":45,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["infers",{"_index":48,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["info",{"_index":3,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["info(message",{"_index":394,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["info.state",{"_index":1127,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["information",{"_index":1024,"title":{},"body":{"index.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/original-config-api.html":{}}}],["informs",{"_index":1306,"title":{},"body":{"additional-documentation/events.html":{}}}],["inherited",{"_index":265,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["initial",{"_index":1349,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["initialize",{"_index":970,"title":{},"body":{"index.html":{}}}],["initializes",{"_index":974,"title":{},"body":{"index.html":{}}}],["initialnavigation",{"_index":1357,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["initimplicitflow",{"_index":1122,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/using-implicit-flow.html":{}}}],["initloginflow",{"_index":973,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{}}}],["initloginflowinpopup",{"_index":1285,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["inject",{"_index":1265,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["injectable",{"_index":117,"title":{"injectables/DefaultHashHandler.html":{},"injectables/MemoryStorage.html":{},"injectables/UrlHelperService.html":{}},"body":{"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["injectables",{"_index":119,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"injectables/MemoryStorage.html":{},"injectables/UrlHelperService.html":{},"overview.html":{}}}],["injecting",{"_index":1258,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["injection",{"_index":390,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["injectiontoken('auth_config",{"_index":1117,"title":{},"body":{"miscellaneous/variables.html":{}}}],["install",{"_index":281,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["installing",{"_index":918,"title":{},"body":{"index.html":{}}}],["instance",{"_index":1152,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["instanceof",{"_index":1322,"title":{},"body":{"additional-documentation/events.html":{}}}],["instead",{"_index":315,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["intended",{"_index":1468,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["interaction",{"_index":1176,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["intercept",{"_index":168,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["intercept(req",{"_index":179,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["intercepted",{"_index":572,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["interceptor",{"_index":163,"title":{"interceptors/DefaultOAuthInterceptor.html":{}},"body":{"index.html":{}}}],["interceptors",{"_index":165,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["interceptors/default",{"_index":552,"title":{},"body":{"modules/OAuthModule.html":{}}}],["interceptors/resource",{"_index":551,"title":{},"body":{"modules/OAuthModule.html":{}}}],["interesting",{"_index":1550,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["interface",{"_index":73,"title":{"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"interfaces/ValidationParams.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["interfaces",{"_index":594,"title":{},"body":{"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"interfaces/ValidationParams.html":{},"overview.html":{}}}],["internally",{"_index":337,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["invalid_nonce_in_state",{"_index":496,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["ionic",{"_index":1037,"title":{},"body":{"index.html":{}}}],["isn't",{"_index":478,"title":{},"body":{"classes/NullValidationHandler.html":{},"additional-documentation/using-password-flow.html":{}}}],["isresponse(str",{"_index":1204,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["issuer",{"_index":442,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["issues",{"_index":678,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["issuing",{"_index":1168,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["java",{"_index":800,"title":{},"body":{"index.html":{}}}],["jeroenheijmans",{"_index":735,"title":{},"body":{"changelog.html":{}}}],["jie",{"_index":725,"title":{},"body":{"changelog.html":{}}}],["job",{"_index":737,"title":{},"body":{"changelog.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["js",{"_index":134,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"dependencies.html":{},"additional-documentation/using-systemjs.html":{}}}],["jsrasign",{"_index":792,"title":{},"body":{"index.html":{}}}],["jsrsasign",{"_index":658,"title":{},"body":{"changelog.html":{},"dependencies.html":{},"additional-documentation/using-systemjs.html":{}}}],["jwks",{"_index":78,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["jwks';instead",{"_index":817,"title":{},"body":{"index.html":{}}}],["jwks_load_error",{"_index":495,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["jwks_uri",{"_index":450,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["jwksvalidationhandler",{"_index":246,"title":{"classes/JwksValidationHandler.html":{}},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["jwksvalidationhandler();in",{"_index":1371,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["jwtheader",{"_index":52,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["jwtheader['alg",{"_index":105,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["k",{"_index":637,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["keep",{"_index":1189,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["kevin",{"_index":1453,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["key",{"_index":437,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{}}}],["keycloak",{"_index":798,"title":{},"body":{"index.html":{}}}],["keys",{"_index":1367,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["kicks",{"_index":1501,"title":{},"body":{"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["kind",{"_index":1077,"title":{},"body":{"license.html":{}}}],["known",{"_index":1165,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["known/openid",{"_index":1516,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["labat",{"_index":733,"title":{},"body":{"changelog.html":{}}}],["labels",{"_index":864,"title":{},"body":{"index.html":{}}}],["laing",{"_index":731,"title":{},"body":{"changelog.html":{}}}],["later",{"_index":1368,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["leads",{"_index":1261,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/session-checks.html":{}}}],["leftmosthalf",{"_index":93,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["legend",{"_index":1104,"title":{},"body":{"overview.html":{}}}],["levels",{"_index":1320,"title":{},"body":{"additional-documentation/events.html":{}}}],["leveraging",{"_index":1346,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["liability",{"_index":1093,"title":{},"body":{"license.html":{}}}],["liable",{"_index":1090,"title":{},"body":{"license.html":{}}}],["lib",{"_index":370,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{}}}],["library",{"_index":255,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["library's",{"_index":1447,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["license",{"_index":1040,"title":{"license.html":{}},"body":{}}],["life",{"_index":1146,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["lifetime",{"_index":1397,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["limitation",{"_index":1058,"title":{},"body":{"license.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["limited",{"_index":1080,"title":{},"body":{"license.html":{}}}],["lin",{"_index":726,"title":{},"body":{"changelog.html":{}}}],["line",{"_index":1214,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["list",{"_index":1133,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/events.html":{}}}],["listed",{"_index":1247,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["lite",{"_index":768,"title":{},"body":{"dependencies.html":{}}}],["load",{"_index":1514,"title":{},"body":{"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["loaddiscoverydocumentandlogin",{"_index":1547,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["loaddiscoverydocumentandtrylogin",{"_index":1548,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["loaded",{"_index":1190,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["loading",{"_index":1530,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["loadkeys",{"_index":79,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["loaduserprofile",{"_index":1335,"title":{},"body":{"additional-documentation/events.html":{}}}],["local",{"_index":1384,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["localhost:[4200",{"_index":913,"title":{},"body":{"index.html":{}}}],["localstorage",{"_index":403,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["location.origin",{"_index":1195,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["location.search",{"_index":1194,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["locationstrategy",{"_index":1347,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["log",{"_index":524,"title":{},"body":{"classes/OAuthLogger.html":{},"additional-documentation/events.html":{}}}],["log(message",{"_index":395,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["logged",{"_index":1173,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["loggin",{"_index":1521,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["logging",{"_index":383,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-password-flow.html":{}}}],["login",{"_index":938,"title":{"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/manually-skipping-login-form.html":{}},"body":{"index.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["loginoptions",{"_index":299,"title":{"classes/LoginOptions.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["logoff",{"_index":1481,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["logout",{"_index":513,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"index.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["logs",{"_index":1318,"title":{},"body":{"additional-documentation/events.html":{}}}],["long",{"_index":1342,"title":{},"body":{"additional-documentation/events.html":{}}}],["longer",{"_index":1316,"title":{},"body":{"additional-documentation/events.html":{}}}],["look",{"_index":1007,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["lookup",{"_index":1021,"title":{},"body":{"index.html":{}}}],["lower",{"_index":1002,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["main",{"_index":1191,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/using-systemjs.html":{}}}],["maintain",{"_index":1448,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["major",{"_index":850,"title":{},"body":{"index.html":{}}}],["make",{"_index":17,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-password-flow.html":{}}}],["making",{"_index":1296,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["management",{"_index":1379,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["manfred",{"_index":727,"title":{},"body":{"changelog.html":{},"license.html":{}}}],["manner",{"_index":324,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["manually",{"_index":1358,"title":{"additional-documentation/manually-skipping-login-form.html":{}},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["map",{"_index":193,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-systemjs.html":{}}}],["map(_",{"_index":236,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["mark",{"_index":330,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["matching",{"_index":115,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["max/geheim",{"_index":907,"title":{},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["mccloghry",{"_index":730,"title":{},"body":{"changelog.html":{}}}],["mean",{"_index":1286,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["means",{"_index":1154,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{}}}],["meanwhile",{"_index":1469,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["memorystorage",{"_index":410,"title":{"injectables/MemoryStorage.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["mentioned",{"_index":1130,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/original-config-api.html":{}}}],["merchantability",{"_index":1082,"title":{},"body":{"license.html":{}}}],["merge",{"_index":189,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"license.html":{}}}],["mergemap",{"_index":195,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["mergemap(token",{"_index":240,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["message",{"_index":358,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["meta",{"_index":1457,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["method",{"_index":15,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["methods",{"_index":22,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{}}}],["mind",{"_index":951,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["minutes",{"_index":1033,"title":{},"body":{"index.html":{}}}],["miscellaneous",{"_index":776,"title":{"miscellaneous/functions.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}},"body":{"miscellaneous/functions.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["missing",{"_index":708,"title":{},"body":{"changelog.html":{}}}],["moderating",{"_index":738,"title":{},"body":{"changelog.html":{}}}],["modern",{"_index":898,"title":{},"body":{"index.html":{}}}],["modify",{"_index":1060,"title":{},"body":{"license.html":{}}}],["module",{"_index":532,"title":{"modules/OAuthModule.html":{}},"body":{"overview.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["module.config",{"_index":203,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["module.config.ts",{"_index":566,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:11",{"_index":586,"title":{},"body":{"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:12",{"_index":588,"title":{},"body":{"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:13",{"_index":587,"title":{},"body":{"classes/OAuthResourceServerConfig.html":{}}}],["module.config.ts:2",{"_index":569,"title":{},"body":{"classes/OAuthModuleConfig.html":{}}}],["moduleconfig",{"_index":175,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["modules",{"_index":534,"title":{"modules.html":{}},"body":{"modules/OAuthModule.html":{},"modules.html":{}}}],["modulewithproviders",{"_index":543,"title":{},"body":{"modules/OAuthModule.html":{}}}],["moment",{"_index":1399,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["moos",{"_index":724,"title":{},"body":{"changelog.html":{}}}],["more",{"_index":1005,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["moved",{"_index":254,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["msec",{"_index":1230,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["much",{"_index":844,"title":{},"body":{"index.html":{}}}],["multi",{"_index":564,"title":{},"body":{"modules/OAuthModule.html":{}}}],["name",{"_index":39,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["namely",{"_index":256,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["navigation",{"_index":1350,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["need",{"_index":276,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["needed",{"_index":287,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["needs",{"_index":1394,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["net",{"_index":831,"title":{},"body":{"index.html":{}}}],["net/.net",{"_index":796,"title":{},"body":{"index.html":{}}}],["new",{"_index":109,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["newer",{"_index":842,"title":{},"body":{"index.html":{}}}],["newest",{"_index":1393,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["next",{"_index":181,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["next.handle(req",{"_index":219,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["next.handle(req).catch(err",{"_index":1273,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["ngmodule",{"_index":544,"title":{},"body":{"modules/OAuthModule.html":{},"index.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["ngx",{"_index":761,"title":{},"body":{"dependencies.html":{}}}],["ngzone",{"_index":714,"title":{},"body":{"changelog.html":{}}}],["node_modules/jsrsasign/lib/jsrsasign",{"_index":1465,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["nonce",{"_index":349,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{}}}],["noninfringement",{"_index":1086,"title":{},"body":{"license.html":{}}}],["normally",{"_index":367,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["note",{"_index":285,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["notes",{"_index":1159,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["nothing",{"_index":480,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["notice",{"_index":1072,"title":{},"body":{"license.html":{}}}],["notification",{"_index":1376,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["notifications",{"_index":1390,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["notified",{"_index":1400,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["now",{"_index":685,"title":{},"body":{"changelog.html":{}}}],["nowadays",{"_index":289,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/original-config-api.html":{}}}],["npm",{"_index":282,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["null",{"_index":268,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["nullvalidationhandler",{"_index":262,"title":{"classes/NullValidationHandler.html":{}},"body":{"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["nullvalidationhandler:11",{"_index":266,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["nullvalidationhandler:8",{"_index":267,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["number",{"_index":129,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["oauth",{"_index":202,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["oauth.interceptor",{"_index":553,"title":{},"body":{"modules/OAuthModule.html":{}}}],["oauth.interceptor.ts",{"_index":167,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["oauth.interceptor.ts:24",{"_index":177,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["oauth.interceptor.ts:46",{"_index":183,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["oauth2",{"_index":258,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["oauth2/oidc",{"_index":278,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["oautherrorevent",{"_index":487,"title":{"classes/OAuthErrorEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"additional-documentation/events.html":{}}}],["oauthevent",{"_index":489,"title":{"classes/OAuthEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["oauthinfoevent",{"_index":520,"title":{"classes/OAuthInfoEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["oauthlogger",{"_index":391,"title":{"classes/OAuthLogger.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["oauthmodule",{"_index":533,"title":{"modules/OAuthModule.html":{}},"body":{"modules/OAuthModule.html":{},"index.html":{},"modules.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["oauthmodule.forroot",{"_index":922,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["oauthmoduleconfig",{"_index":176,"title":{"classes/OAuthModuleConfig.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["oauthnoopresourceservererrorhandler",{"_index":550,"title":{"classes/OAuthNoopResourceServerErrorHandler.html":{}},"body":{"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["oauthresourceserverconfig",{"_index":568,"title":{"classes/OAuthResourceServerConfig.html":{}},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["oauthresourceservererrorhandler",{"_index":174,"title":{"classes/OAuthResourceServerErrorHandler.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["oauthservice",{"_index":172,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["oauthstorage",{"_index":171,"title":{"classes/OAuthStorage.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["oauthsuccessevent",{"_index":517,"title":{"classes/OAuthSuccessEvent.html":{}},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["object",{"_index":46,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["observable",{"_index":185,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["obtaining",{"_index":1049,"title":{},"body":{"license.html":{}}}],["occur",{"_index":1310,"title":{},"body":{"additional-documentation/events.html":{}}}],["of(null",{"_index":235,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["of(this.oauthservice.getaccesstoken()).pipe",{"_index":225,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["offline_access",{"_index":962,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-password-flow.html":{}}}],["oidc",{"_index":259,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["oidc';please",{"_index":818,"title":{},"body":{"index.html":{}}}],["oidc.module.ts",{"_index":536,"title":{},"body":{"modules/OAuthModule.html":{}}}],["oidc.module.ts:29",{"_index":541,"title":{},"body":{"modules/OAuthModule.html":{}}}],["oidc.umd.js",{"_index":1461,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["oidc/docs",{"_index":806,"title":{},"body":{"index.html":{}}}],["oidc/docs/additional",{"_index":1009,"title":{},"body":{"index.html":{}}}],["oidcdiscoverydoc",{"_index":441,"title":{"interfaces/OidcDiscoveryDoc.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ok",{"_index":1221,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["okta",{"_index":1031,"title":{},"body":{"index.html":{}}}],["older",{"_index":835,"title":{},"body":{"index.html":{},"additional-documentation/original-config-api.html":{}}}],["one",{"_index":253,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["online",{"_index":1029,"title":{},"body":{"index.html":{}}}],["onloginerror",{"_index":308,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["ontokenreceived",{"_index":309,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["opener",{"_index":1293,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["openid",{"_index":438,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["option",{"_index":1381,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["optional",{"_index":41,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["optionalparams",{"_index":393,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["options",{"_index":302,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{}}}],["original",{"_index":1128,"title":{"additional-documentation/original-config-api.html":{}},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["originally",{"_index":1467,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["otherparam",{"_index":1304,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["otherwise",{"_index":1016,"title":{},"body":{"index.html":{},"license.html":{}}}],["out",{"_index":895,"title":{},"body":{"index.html":{},"license.html":{},"overview.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["output",{"_index":1209,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{}}}],["outside",{"_index":713,"title":{},"body":{"changelog.html":{}}}],["over",{"_index":1147,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["override",{"_index":19,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["overview",{"_index":1103,"title":{"overview.html":{}},"body":{"overview.html":{}}}],["owner",{"_index":1505,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["package",{"_index":740,"title":{"dependencies.html":{}},"body":{}}],["packages",{"_index":1365,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["paddedhexcode",{"_index":158,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["page",{"_index":292,"title":{"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["pair",{"_index":616,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["pairs",{"_index":615,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["param",{"_index":104,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["parameter",{"_index":1298,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["parameters",{"_index":37,"title":{"additional-documentation/custom-query-parameters.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/custom-query-parameters.html":{}}}],["params",{"_index":64,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["params.idtokenclaims['at_hash'].replace(/=/g",{"_index":100,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["parse",{"_index":1429,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["parsed",{"_index":54,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["parsedidtoken",{"_index":418,"title":{"interfaces/ParsedIdToken.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["parsequerystring",{"_index":602,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["parsequerystring(querystring",{"_index":605,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["particular",{"_index":1084,"title":{},"body":{"license.html":{}}}],["pass",{"_index":319,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["passed",{"_index":34,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["passes",{"_index":1254,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["passing",{"_index":702,"title":{},"body":{"changelog.html":{}}}],["password",{"_index":879,"title":{"additional-documentation/using-password-flow.html":{}},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["passwords",{"_index":629,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["path",{"_index":1014,"title":{},"body":{"index.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["pathlocationstrategy",{"_index":823,"title":{},"body":{"index.html":{}}}],["perform",{"_index":1217,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{}}}],["performs",{"_index":1348,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{}}}],["permission",{"_index":1044,"title":{},"body":{"license.html":{}}}],["permissions",{"_index":957,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["permit",{"_index":1067,"title":{},"body":{"license.html":{}}}],["person",{"_index":1048,"title":{},"body":{"license.html":{}}}],["persons",{"_index":1068,"title":{},"body":{"license.html":{}}}],["perspective",{"_index":1491,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["phil",{"_index":729,"title":{},"body":{"changelog.html":{}}}],["pingone",{"_index":1441,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["pipe",{"_index":238,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["pipe(catcherror(err",{"_index":223,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["pkce",{"_index":874,"title":{},"body":{"index.html":{}}}],["plan",{"_index":849,"title":{},"body":{"index.html":{}}}],["please",{"_index":270,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["pls",{"_index":686,"title":{},"body":{"changelog.html":{}}}],["popup",{"_index":321,"title":{"additional-documentation/popup-based-login.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/popup-based-login.html":{}}}],["popup_blocked",{"_index":515,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["popup_closed",{"_index":514,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["portions",{"_index":1075,"title":{},"body":{"license.html":{}}}],["possible",{"_index":1499,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["post",{"_index":1407,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["ppanthony",{"_index":1459,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["practice",{"_index":344,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["practices",{"_index":953,"title":{},"body":{"index.html":{}}}],["prefixes",{"_index":1000,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["prepared",{"_index":788,"title":{},"body":{"index.html":{}}}],["present",{"_index":331,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["preserving",{"_index":1120,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["prevent",{"_index":677,"title":{},"body":{"changelog.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["preventclearhashafterlogin",{"_index":310,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["prevents",{"_index":1225,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["previously",{"_index":1560,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["private",{"_index":206,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["profile",{"_index":966,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["progressing",{"_index":1564,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["project's",{"_index":1414,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["projects/.../base64",{"_index":779,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/.../events.ts",{"_index":1111,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["projects/.../factories.ts",{"_index":781,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/.../jwks",{"_index":1115,"title":{},"body":{"miscellaneous/variables.html":{}}}],["projects/.../tokens.ts",{"_index":1114,"title":{},"body":{"miscellaneous/variables.html":{}}}],["projects/lib/src/angular",{"_index":535,"title":{},"body":{"modules/OAuthModule.html":{}}}],["projects/lib/src/base64",{"_index":782,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/lib/src/encoder.ts",{"_index":626,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:10",{"_index":644,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:14",{"_index":636,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:18",{"_index":639,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/encoder.ts:6",{"_index":642,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["projects/lib/src/events.ts",{"_index":488,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["projects/lib/src/events.ts:26",{"_index":521,"title":{},"body":{"classes/OAuthEvent.html":{}}}],["projects/lib/src/events.ts:30",{"_index":593,"title":{},"body":{"classes/OAuthSuccessEvent.html":{}}}],["projects/lib/src/events.ts:36",{"_index":522,"title":{},"body":{"classes/OAuthInfoEvent.html":{}}}],["projects/lib/src/events.ts:42",{"_index":493,"title":{},"body":{"classes/OAuthErrorEvent.html":{}}}],["projects/lib/src/factories.ts",{"_index":786,"title":{},"body":{"miscellaneous/functions.html":{}}}],["projects/lib/src/interceptors/default",{"_index":166,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["projects/lib/src/interceptors/resource",{"_index":579,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["projects/lib/src/oauth",{"_index":565,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["projects/lib/src/token",{"_index":6,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/variables.html":{}}}],["projects/lib/src/tokens.ts",{"_index":1116,"title":{},"body":{"miscellaneous/variables.html":{}}}],["projects/lib/src/types.ts",{"_index":300,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["projects/lib/src/types.ts:102",{"_index":475,"title":{},"body":{"injectables/MemoryStorage.html":{}}}],["projects/lib/src/types.ts:106",{"_index":476,"title":{},"body":{"injectables/MemoryStorage.html":{}}}],["projects/lib/src/types.ts:116",{"_index":597,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:117",{"_index":595,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:118",{"_index":596,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:119",{"_index":598,"title":{},"body":{"classes/ReceivedTokens.html":{}}}],["projects/lib/src/types.ts:13",{"_index":362,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:153",{"_index":622,"title":{},"body":{"interfaces/UserInfo.html":{}}}],["projects/lib/src/types.ts:20",{"_index":378,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:28",{"_index":353,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:40",{"_index":311,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:50",{"_index":339,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:58",{"_index":366,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:65",{"_index":333,"title":{},"body":{"classes/LoginOptions.html":{}}}],["projects/lib/src/types.ts:75",{"_index":526,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:76",{"_index":529,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:77",{"_index":530,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:78",{"_index":531,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:79",{"_index":528,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["projects/lib/src/types.ts:89",{"_index":590,"title":{},"body":{"classes/OAuthStorage.html":{}}}],["projects/lib/src/types.ts:90",{"_index":591,"title":{},"body":{"classes/OAuthStorage.html":{}}}],["projects/lib/src/types.ts:91",{"_index":592,"title":{},"body":{"classes/OAuthStorage.html":{}}}],["projects/lib/src/types.ts:98",{"_index":474,"title":{},"body":{"injectables/MemoryStorage.html":{}}}],["projects/lib/src/url",{"_index":599,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["promise",{"_index":44,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["promise(resolve",{"_index":1567,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["promise.resolve",{"_index":1554,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["promise.resolve(null",{"_index":485,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["promise.resolve(true",{"_index":486,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["properties",{"_index":304,"title":{},"body":{"classes/LoginOptions.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["property",{"_index":360,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{}}}],["proposes",{"_index":1131,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["protected",{"_index":23,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["provding",{"_index":1249,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["provide",{"_index":387,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["provided",{"_index":808,"title":{},"body":{"index.html":{},"license.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["provider",{"_index":878,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["providers",{"_index":560,"title":{},"body":{"modules/OAuthModule.html":{},"overview.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["provides",{"_index":1264,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-password-flow.html":{}}}],["providing",{"_index":1525,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["prs",{"_index":853,"title":{},"body":{"index.html":{}}}],["public",{"_index":84,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["publish",{"_index":1061,"title":{},"body":{"license.html":{}}}],["published",{"_index":1327,"title":{},"body":{"additional-documentation/events.html":{}}}],["publishes",{"_index":1308,"title":{},"body":{"additional-documentation/events.html":{}}}],["pull",{"_index":860,"title":{},"body":{"index.html":{}}}],["purpose",{"_index":1085,"title":{},"body":{"license.html":{},"additional-documentation/callback-after-login.html":{}}}],["put",{"_index":1245,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["pwa",{"_index":1035,"title":{},"body":{"index.html":{}}}],["query",{"_index":376,"title":{"additional-documentation/custom-query-parameters.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/custom-query-parameters.html":{}}}],["querying",{"_index":887,"title":{},"body":{"index.html":{}}}],["querystring",{"_index":328,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"changelog.html":{}}}],["querystring.split",{"_index":620,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["question",{"_index":329,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/session-checks.html":{}}}],["questionmarkposition",{"_index":610,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["quite",{"_index":1502,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["read",{"_index":271,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"miscellaneous/variables.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["reading",{"_index":1351,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["readme",{"_index":978,"title":{},"body":{"index.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["readonly",{"_index":518,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["real",{"_index":252,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["reason",{"_index":492,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["receive",{"_index":1372,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{}}}],["received",{"_index":62,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["receivedtokens",{"_index":381,"title":{"classes/ReceivedTokens.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["receives",{"_index":1557,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["receiving",{"_index":1579,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["recommended",{"_index":819,"title":{},"body":{"index.html":{}}}],["recommented",{"_index":290,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["redhat",{"_index":799,"title":{},"body":{"index.html":{}}}],["redhat's",{"_index":832,"title":{},"body":{"index.html":{}}}],["redirect",{"_index":334,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["redirected",{"_index":877,"title":{},"body":{"index.html":{}}}],["redirecting",{"_index":896,"title":{},"body":{"index.html":{}}}],["redirects",{"_index":992,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["redirecturi",{"_index":939,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["redirecturis",{"_index":912,"title":{},"body":{"index.html":{}}}],["refresh",{"_index":338,"title":{"additional-documentation/silent-refresh.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{}}}],["refresh.html",{"_index":917,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{}}}],["refresh.html\";please",{"_index":1188,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["refresh_token",{"_index":431,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["refresh_tokens",{"_index":1136,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["refreshed",{"_index":1340,"title":{},"body":{"additional-documentation/events.html":{}}}],["refreshes",{"_index":318,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["refreshing",{"_index":882,"title":{"additional-documentation/refreshing-a-token.html":{}},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-password-flow.html":{}}}],["regarding",{"_index":890,"title":{},"body":{"index.html":{},"additional-documentation/using-systemjs.html":{}}}],["regards",{"_index":813,"title":{},"body":{"index.html":{}}}],["regfesh.html",{"_index":1287,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["register",{"_index":1388,"title":{},"body":{"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["registerd",{"_index":943,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["registered",{"_index":574,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["registration_endpoint",{"_index":451,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["related",{"_index":1238,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/original-config-api.html":{}}}],["relations",{"_index":1496,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["release",{"_index":847,"title":{},"body":{"index.html":{}}}],["remove",{"_index":657,"title":{},"body":{"changelog.html":{}}}],["removeitem",{"_index":472,"title":{},"body":{"injectables/MemoryStorage.html":{},"classes/OAuthStorage.html":{}}}],["removeitem(key",{"_index":408,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["removing",{"_index":375,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["rendering",{"_index":1405,"title":{"additional-documentation/server-side-rendering.html":{}},"body":{"additional-documentation/server-side-rendering.html":{}}}],["represents",{"_index":414,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["req",{"_index":184,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["req.clone",{"_index":244,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["req.headers",{"_index":1271,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["req.headers.set('authorization",{"_index":243,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["req.url.tolowercase",{"_index":215,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["request",{"_index":958,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["request_object_signing_alg_values_supported",{"_index":464,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["requested",{"_index":1121,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["requests",{"_index":861,"title":{},"body":{"index.html":{}}}],["require','jsrsasign",{"_index":1466,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["requirements",{"_index":1134,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["reset",{"_index":1106,"title":{},"body":{"overview.html":{}}}],["resolve",{"_index":1565,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["resolve(true",{"_index":1570,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["resolves",{"_index":1336,"title":{},"body":{"additional-documentation/events.html":{}}}],["resource",{"_index":198,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-password-flow.html":{}}}],["resources",{"_index":801,"title":{},"body":{"index.html":{}}}],["resourceserver",{"_index":567,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["resourceservererrorhandler",{"_index":573,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{}}}],["respect",{"_index":1137,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["respective",{"_index":1001,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["respond",{"_index":1175,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["response",{"_index":422,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{}}}],["response_modes_supported",{"_index":455,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["response_types_supported",{"_index":453,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["responsetype",{"_index":934,"title":{},"body":{"index.html":{}}}],["restriction",{"_index":1056,"title":{},"body":{"license.html":{}}}],["result",{"_index":114,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["results",{"_index":116,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"changelog.html":{},"dependencies.html":{},"miscellaneous/functions.html":{},"index.html":{},"license.html":{},"modules.html":{},"overview.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{},"additional-documentation/getting-started.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["retrieved",{"_index":1329,"title":{},"body":{"additional-documentation/events.html":{}}}],["retrieving",{"_index":336,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["return",{"_index":103,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["returns",{"_index":43,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/using-password-flow.html":{}}}],["rights",{"_index":1059,"title":{},"body":{"license.html":{}}}],["risk",{"_index":482,"title":{},"body":{"classes/NullValidationHandler.html":{}}}],["robin",{"_index":732,"title":{},"body":{"changelog.html":{}}}],["root",{"_index":1353,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["route",{"_index":1013,"title":{},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["router",{"_index":822,"title":{},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["routermodule.forroot(app_routes",{"_index":1355,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["routes",{"_index":1352,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["routing",{"_index":698,"title":{"additional-documentation/routing-with-the-hashstrategy.html":{}},"body":{"changelog.html":{},"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["run",{"_index":711,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["runs",{"_index":904,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["rxjs",{"_index":190,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"dependencies.html":{}}}],["rxjs/add/operator/catch",{"_index":1268,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["rxjs/observable",{"_index":1267,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["rxjs/operators",{"_index":197,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["safe",{"_index":876,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["sake",{"_index":1572,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["same",{"_index":323,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["sample",{"_index":673,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["save",{"_index":283,"title":{},"body":{"classes/JwksValidationHandler.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["saveafter",{"_index":816,"title":{},"body":{"index.html":{}}}],["saved",{"_index":1330,"title":{},"body":{"additional-documentation/events.html":{}}}],["saveimporting",{"_index":919,"title":{},"body":{"index.html":{}}}],["scenario",{"_index":1581,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["scope",{"_index":432,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["scopes_supported",{"_index":452,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["search",{"_index":1199,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["seconds",{"_index":1232,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["secret",{"_index":947,"title":{},"body":{"index.html":{},"additional-documentation/using-password-flow.html":{}}}],["section",{"_index":1017,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["security",{"_index":346,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{}}}],["see",{"_index":687,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["selector",{"_index":1472,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["sell",{"_index":1065,"title":{},"body":{"license.html":{}}}],["semantic",{"_index":762,"title":{},"body":{"dependencies.html":{}}}],["send",{"_index":575,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["sendaccesstoken",{"_index":220,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["sends",{"_index":1387,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["sense",{"_index":1510,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["separatorindex",{"_index":617,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["server",{"_index":199,"title":{"additional-documentation/server-side-rendering.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["server's",{"_index":897,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["server.azurewebsites.net/identity",{"_index":1181,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["server.azurewebsites.net/identity/.well",{"_index":1515,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["server.azurewebsites.net/identity/connect/authorize",{"_index":1418,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["server.azurewebsites.net/identity/connect/endsession",{"_index":1427,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["server.azurewebsites.net/identity/connect/token",{"_index":1519,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["server.azurewebsites.net/identity/connect/userinfo",{"_index":1523,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["server.code",{"_index":945,"title":{},"body":{"index.html":{}}}],["servers",{"_index":1027,"title":{},"body":{"index.html":{}}}],["service",{"_index":205,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["service_documentation",{"_index":469,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["session",{"_index":682,"title":{"additional-documentation/session-checks.html":{}},"body":{"changelog.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["session's",{"_index":1396,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["session_changed",{"_index":510,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["session_error",{"_index":511,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["session_state",{"_index":700,"title":{},"body":{"changelog.html":{}}}],["session_terminated",{"_index":512,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/session-checks.html":{}}}],["session_terminated')).subscribe(e",{"_index":1402,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["sessionchecksenabled",{"_index":1391,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["sessionstorage",{"_index":404,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["set",{"_index":325,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/custom-query-parameters.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["set('authorization",{"_index":1272,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["setitem",{"_index":473,"title":{},"body":{"injectables/MemoryStorage.html":{},"classes/OAuthStorage.html":{}}}],["setitem(key",{"_index":409,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["sets",{"_index":1292,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["setstorage",{"_index":1422,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["setting",{"_index":670,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["settings",{"_index":1295,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["setup",{"_index":1008,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["several",{"_index":1437,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["sha",{"_index":112,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["sha256",{"_index":133,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"dependencies.html":{}}}],["sha256(accesstoken",{"_index":90,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["sha256.array(valuetohash",{"_index":146,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["shaking",{"_index":815,"title":{},"body":{"index.html":{}}}],["shall",{"_index":1073,"title":{},"body":{"license.html":{}}}],["share",{"_index":1435,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["sharing",{"_index":1460,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["ship",{"_index":1497,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["short",{"_index":1312,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/using-password-flow.html":{}}}],["showdebuginformation",{"_index":968,"title":{},"body":{"index.html":{}}}],["shown",{"_index":977,"title":{},"body":{"index.html":{},"additional-documentation/session-checks.html":{}}}],["shows",{"_index":1252,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["side",{"_index":402,"title":{"additional-documentation/server-side-rendering.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/server-side-rendering.html":{}}}],["sign",{"_index":894,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["signature",{"_index":67,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["signs",{"_index":1377,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["silent",{"_index":317,"title":{"additional-documentation/silent-refresh.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["silent_refresh_error",{"_index":505,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["silent_refresh_timeout",{"_index":507,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["silently_refreshed",{"_index":506,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["silentrefresh",{"_index":1218,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["silentrefreshredirecturi",{"_index":1178,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{}}}],["silentrefreshtimeout",{"_index":1229,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["similar",{"_index":1503,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["simple",{"_index":398,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{}}}],["single",{"_index":291,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["site",{"_index":679,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["size",{"_index":845,"title":{},"body":{"index.html":{}}}],["sizes",{"_index":296,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["skip",{"_index":481,"title":{},"body":{"classes/NullValidationHandler.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{}}}],["skipping",{"_index":1546,"title":{"additional-documentation/manually-skipping-login-form.html":{}},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["skips",{"_index":1369,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["smaller",{"_index":294,"title":{},"body":{"classes/JwksValidationHandler.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["snippet",{"_index":1313,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["software",{"_index":1051,"title":{},"body":{"license.html":{}}}],["solution",{"_index":933,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["something",{"_index":1556,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["somevalue",{"_index":1305,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["source",{"_index":4,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{}}}],["sources",{"_index":802,"title":{},"body":{"index.html":{}}}],["spa",{"_index":911,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["spa's",{"_index":942,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["spas",{"_index":950,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["spec",{"_index":1334,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["specific",{"_index":965,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["specification",{"_index":1445,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["specifies",{"_index":1132,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["specs",{"_index":891,"title":{},"body":{"index.html":{}}}],["src",{"_index":866,"title":{},"body":{"index.html":{}}}],["standard",{"_index":1129,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/using-password-flow.html":{}}}],["start",{"_index":1451,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["started",{"_index":650,"title":{"changelog.html":{},"index.html":{},"license.html":{},"additional-documentation/getting-started.html":{}},"body":{"additional-documentation/getting-started.html":{}}}],["starting",{"_index":1300,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["starts",{"_index":1470,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["startup",{"_index":1500,"title":{},"body":{"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["state",{"_index":341,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/events.html":{}}}],["static",{"_index":537,"title":{},"body":{"modules/OAuthModule.html":{}}}],["status",{"_index":1241,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["steyer",{"_index":728,"title":{},"body":{"changelog.html":{},"license.html":{}}}],["still",{"_index":1172,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["stopautomaticrefresh",{"_index":665,"title":{},"body":{"changelog.html":{}}}],["stops",{"_index":666,"title":{},"body":{"changelog.html":{}}}],["storage",{"_index":399,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["storagefactory",{"_index":1544,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["stored",{"_index":1337,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["storing",{"_index":400,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["str",{"_index":784,"title":{},"body":{"miscellaneous/functions.html":{},"additional-documentation/silent-refresh.html":{}}}],["strategy",{"_index":1160,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["stream",{"_index":1309,"title":{},"body":{"additional-documentation/events.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["strict",{"_index":1580,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["strictdiscoverydocumentvalidation",{"_index":1432,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["string",{"_index":28,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/functions.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["string.fromcharcode(e",{"_index":151,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["strong",{"_index":1494,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["sub",{"_index":436,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["subject",{"_index":1070,"title":{},"body":{"license.html":{}}}],["subject_types_supported",{"_index":457,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["sublicense",{"_index":1063,"title":{},"body":{"license.html":{}}}],["substantial",{"_index":1074,"title":{},"body":{"license.html":{}}}],["succeeded",{"_index":1124,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["successful",{"_index":1275,"title":{},"body":{"additional-documentation/callback-after-login.html":{}}}],["successfully",{"_index":363,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/events.html":{}}}],["such",{"_index":955,"title":{},"body":{"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/using-password-flow.html":{}}}],["sufficient",{"_index":1196,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["suited",{"_index":1493,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["summary.json",{"_index":870,"title":{},"body":{"index.html":{}}}],["super",{"_index":297,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["super(type",{"_index":519,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{}}}],["support",{"_index":787,"title":{},"body":{"index.html":{},"additional-documentation/session-checks.html":{}}}],["supported",{"_index":111,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/original-config-api.html":{}}}],["supports",{"_index":926,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{}}}],["sure",{"_index":868,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{}}}],["switching",{"_index":999,"title":{},"body":{"index.html":{}}}],["symbol",{"_index":326,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["system.config",{"_index":1456,"title":{},"body":{"additional-documentation/using-systemjs.html":{}}}],["systemjs",{"_index":1452,"title":{"additional-documentation/using-systemjs.html":{}},"body":{"additional-documentation/using-systemjs.html":{}}}],["take",{"_index":194,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/refreshing-a-token.html":{}}}],["take(1",{"_index":239,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["takes",{"_index":1198,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{}}}],["targeting",{"_index":1288,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["task",{"_index":998,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{}}}],["tasks",{"_index":1307,"title":{},"body":{"additional-documentation/events.html":{}}}],["telling",{"_index":250,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["tells",{"_index":987,"title":{},"body":{"index.html":{}}}],["template",{"_index":1485,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["templateurl",{"_index":1474,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["tenant",{"_index":1302,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["terminated",{"_index":1404,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["tested",{"_index":820,"title":{},"body":{"index.html":{}}}],["testen",{"_index":1489,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["testing",{"_index":795,"title":{},"body":{"index.html":{}}}],["text",{"_index":767,"title":{},"body":{"dependencies.html":{}}}],["textencoder",{"_index":141,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["thanks",{"_index":718,"title":{},"body":{"changelog.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/using-systemjs.html":{}}}],["that's",{"_index":1511,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["then(info",{"_index":1219,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["things",{"_index":1284,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["third",{"_index":1158,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["this.authservice.events.subscribe(event",{"_index":1321,"title":{},"body":{"additional-documentation/events.html":{}}}],["this.authstorage.getitem('access_token",{"_index":1270,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.calchash(params.accesstoken",{"_index":89,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["this.checkurl(url",{"_index":218,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.configure",{"_index":1476,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["this.data.delete(key",{"_index":412,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["this.data.get(key",{"_index":411,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["this.data.set(key",{"_index":413,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["this.errorhandler.handleerror(err",{"_index":224,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.inferhashalgorithm(params.idtokenheader",{"_index":86,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["this.moduleconfig",{"_index":216,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver",{"_index":217,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver.allowedurls",{"_index":211,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver.allowedurls.find(u",{"_index":212,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.moduleconfig.resourceserver.customurlvalidation",{"_index":209,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.moduleconfig.resourceserver.customurlvalidation(url",{"_index":210,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.moduleconfig.resourceserver.sendaccesstoken",{"_index":221,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["this.oauthservice",{"_index":1551,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.clientid",{"_index":1420,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.configure(authcodeflowconfig",{"_index":982,"title":{},"body":{"index.html":{}}}],["this.oauthservice.configure(authconfig",{"_index":1477,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.customqueryparams",{"_index":1301,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["this.oauthservice.dummyclientsecret",{"_index":1512,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.events(filter(e",{"_index":1558,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.events.pipe",{"_index":229,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.oauthservice.events.pipe(filter(e",{"_index":1401,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["this.oauthservice.events.subscribe(e",{"_index":1314,"title":{},"body":{"additional-documentation/events.html":{}}}],["this.oauthservice.fetchtokenusingpasswordflow('max",{"_index":1528,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.fetchtokenusingpasswordflowandloaduserprofile('max",{"_index":1533,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.getaccesstoken",{"_index":237,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["this.oauthservice.getidentityclaims",{"_index":1483,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.hasvalidaccesstoken",{"_index":1561,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.hasvalididtoken",{"_index":1562,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.initcodeflow();there",{"_index":971,"title":{},"body":{"index.html":{}}}],["this.oauthservice.initimplicitflow('http://www.myurl.com/x/y/z');after",{"_index":1123,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}}}],["this.oauthservice.initloginflow",{"_index":1480,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["this.oauthservice.initloginflow();also",{"_index":976,"title":{},"body":{"index.html":{}}}],["this.oauthservice.issuer",{"_index":1575,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.loaddiscoverydocument().then",{"_index":1576,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.loaddiscoverydocument(url).then",{"_index":1517,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.loaddiscoverydocumentandlogin",{"_index":988,"title":{},"body":{"index.html":{}}}],["this.oauthservice.loaddiscoverydocumentandtrylogin",{"_index":989,"title":{},"body":{"index.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.loaddiscoverydocumentandtrylogin();skipping",{"_index":983,"title":{},"body":{"index.html":{}}}],["this.oauthservice.loaduserprofile",{"_index":1531,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.loginurl",{"_index":1417,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["this.oauthservice.logout",{"_index":1482,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.logouturl",{"_index":1426,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}}}],["this.oauthservice.redirecturi",{"_index":1419,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.refresh();automatically",{"_index":1140,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["this.oauthservice.refreshtoken().then",{"_index":1537,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.scope",{"_index":1421,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.setstorage(sessionstorage",{"_index":1424,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.setupautomaticsilentrefresh();by",{"_index":1142,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["this.oauthservice.silentrefreshredirecturi",{"_index":1187,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["this.oauthservice.tokenendpoint",{"_index":1518,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.oauthservice.tokenvalidationhandler",{"_index":1370,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-implicit-flow.html":{}}}],["this.oauthservice.trylogin",{"_index":1125,"title":{},"body":{"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["this.oauthservice.trylogin().then(_",{"_index":1359,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["this.oauthservice.userinfoendpoint",{"_index":1522,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["this.parsequerystring(hash",{"_index":614,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["this.router.navigate",{"_index":1360,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["this.tohashstring(hasharray",{"_index":148,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["this.tohashstring2(hasharray",{"_index":149,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["this.window.addeventlistener('unload",{"_index":1569,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["those",{"_index":1138,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{}}}],["three",{"_index":1183,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["through",{"_index":389,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["throw",{"_index":108,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["throwerror",{"_index":584,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["throwerror(err",{"_index":585,"title":{},"body":{"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerErrorHandler.html":{}}}],["time",{"_index":884,"title":{},"body":{"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["timeout",{"_index":196,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/silent-refresh.html":{}}}],["timeout(this.oauthservice.waitfortokeninmsec",{"_index":233,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{}}}],["timeoutfactor",{"_index":1150,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["timer",{"_index":1338,"title":{},"body":{"additional-documentation/events.html":{}}}],["timers",{"_index":667,"title":{},"body":{"changelog.html":{}}}],["timespan",{"_index":1228,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["together",{"_index":1408,"title":{},"body":{"additional-documentation/server-side-rendering.html":{}}}],["tohashstring",{"_index":121,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["tohashstring(buffer",{"_index":124,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["tohashstring(hexstring",{"_index":162,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["tohashstring2",{"_index":122,"title":{},"body":{"injectables/DefaultHashHandler.html":{}}}],["tohashstring2(bytearray",{"_index":128,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["token",{"_index":227,"title":{"additional-documentation/refreshing-a-token.html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["token's",{"_index":1145,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["token(s",{"_index":371,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["token.html",{"_index":1011,"title":{},"body":{"index.html":{}}}],["token_endpoint",{"_index":444,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_endpoint_auth_methods_supported",{"_index":445,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_endpoint_auth_signing_alg_values_supported",{"_index":446,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_error",{"_index":501,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_expires",{"_index":509,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_received",{"_index":232,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["token_received')).subscribe",{"_index":1559,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["token_refresh_error",{"_index":504,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_refreshed",{"_index":503,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["token_type",{"_index":429,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["token_validation_error",{"_index":508,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["tokenhash",{"_index":87,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["tokenhash.length",{"_index":95,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["tokenhash.substr(0",{"_index":94,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["tokenresponse",{"_index":428,"title":{"interfaces/TokenResponse.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["tokens",{"_index":83,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["tokensetup",{"_index":712,"title":{},"body":{"changelog.html":{}}}],["tokenvalidationhandler",{"_index":380,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["tokenvalidator",{"_index":1364,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["tort",{"_index":1097,"title":{},"body":{"license.html":{}}}],["transmit",{"_index":1507,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["transmitted",{"_index":1299,"title":{},"body":{"additional-documentation/custom-query-parameters.html":{}}}],["transmitting",{"_index":1236,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["tree",{"_index":814,"title":{},"body":{"index.html":{}}}],["tries",{"_index":1428,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["triggers",{"_index":1157,"title":{},"body":{"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{}}}],["true",{"_index":92,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"changelog.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["trust",{"_index":1495,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["try",{"_index":841,"title":{},"body":{"index.html":{},"additional-documentation/callback-after-login.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["trylogin",{"_index":303,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["ts",{"_index":1423,"title":{},"body":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["tsickle",{"_index":770,"title":{},"body":{"dependencies.html":{}}}],["tslib",{"_index":772,"title":{},"body":{"dependencies.html":{}}}],["turn",{"_index":1450,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["tutorial",{"_index":1026,"title":{},"body":{"index.html":{}}}],["tutorials",{"_index":1025,"title":{},"body":{"index.html":{}}}],["two",{"_index":1283,"title":{},"body":{"additional-documentation/popup-based-login.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["type",{"_index":40,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"interceptors/DefaultOAuthInterceptor.html":{},"classes/HashHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthNoopResourceServerErrorHandler.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthResourceServerErrorHandler.html":{},"classes/OAuthStorage.html":{},"classes/OAuthSuccessEvent.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"injectables/UrlHelperService.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["typealiases",{"_index":1109,"title":{"miscellaneous/typealiases.html":{}},"body":{}}],["types",{"_index":204,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"modules/OAuthModule.html":{}}}],["typo",{"_index":716,"title":{},"body":{"changelog.html":{}}}],["ui_locales_supported",{"_index":470,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["uint8array(buffer",{"_index":152,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["under",{"_index":1294,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["unfortunately",{"_index":1398,"title":{},"body":{"additional-documentation/session-checks.html":{}}}],["up",{"_index":990,"title":{},"body":{"index.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["upcoming",{"_index":789,"title":{},"body":{"index.html":{}}}],["update",{"_index":869,"title":{},"body":{"index.html":{}}}],["upgrade",{"_index":661,"title":{},"body":{"changelog.html":{}}}],["uri",{"_index":335,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["url",{"_index":214,"title":{"additional-documentation/preserving-state-(like-the-requested-url).html":{}},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"changelog.html":{},"index.html":{},"additional-documentation/preserving-state-(like-the-requested-url).html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["url.startswith(u",{"_index":213,"title":{},"body":{"interceptors/DefaultOAuthInterceptor.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["url?x=1",{"_index":704,"title":{},"body":{"changelog.html":{}}}],["urlhelperservice",{"_index":548,"title":{"injectables/UrlHelperService.html":{}},"body":{"modules/OAuthModule.html":{},"injectables/UrlHelperService.html":{}}}],["urls",{"_index":570,"title":{},"body":{"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"index.html":{},"additional-documentation/working-with-httpinterceptors.html":{}}}],["use",{"_index":18,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"changelog.html":{},"index.html":{},"license.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["usecase",{"_index":964,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["useclass",{"_index":562,"title":{},"body":{"modules/OAuthModule.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["used",{"_index":314,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"classes/OAuthModuleConfig.html":{},"classes/OAuthResourceServerConfig.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/WebHttpUrlEncodingCodec.html":{},"index.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/server-side-rendering.html":{},"additional-documentation/using-password-flow.html":{}}}],["usefactory",{"_index":561,"title":{},"body":{"modules/OAuthModule.html":{},"additional-documentation/configure-custom-oauthstorage.html":{}}}],["usehash",{"_index":1356,"title":{},"body":{"additional-documentation/routing-with-the-hashstrategy.html":{}}}],["user",{"_index":433,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/manually-skipping-login-form.html":{},"additional-documentation/original-config-api.html":{}}}],["user's",{"_index":1526,"title":{},"body":{"additional-documentation/using-password-flow.html":{}}}],["user_profile_load_error",{"_index":500,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{}}}],["user_profile_loaded",{"_index":499,"title":{},"body":{"classes/OAuthErrorEvent.html":{},"classes/OAuthEvent.html":{},"classes/OAuthInfoEvent.html":{},"classes/OAuthSuccessEvent.html":{},"miscellaneous/typealiases.html":{},"additional-documentation/events.html":{}}}],["userinfo",{"_index":435,"title":{"interfaces/UserInfo.html":{}},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{}}}],["userinfo_encryption_alg_values_supported",{"_index":459,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["userinfo_encryption_enc_values_supported",{"_index":460,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["userinfo_endpoint",{"_index":447,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["userinfo_signing_alg_values_supported",{"_index":458,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["username/password",{"_index":906,"title":{},"body":{"index.html":{}}}],["username/passwort",{"_index":1487,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["users",{"_index":251,"title":{},"body":{"classes/JwksValidationHandler.html":{},"additional-documentation/server-side-rendering.html":{}}}],["uses",{"_index":384,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/working-with-httpinterceptors.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/original-config-api.html":{}}}],["usesilentrefresh",{"_index":671,"title":{},"body":{"changelog.html":{},"additional-documentation/silent-refresh.html":{}}}],["usevalue",{"_index":563,"title":{},"body":{"modules/OAuthModule.html":{}}}],["using",{"_index":36,"title":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/routing-with-the-hashstrategy.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/using-systemjs.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["utils",{"_index":260,"title":{},"body":{"classes/JwksValidationHandler.html":{}}}],["v",{"_index":640,"title":{},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["valid",{"_index":993,"title":{},"body":{"index.html":{}}}],["validate",{"_index":82,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["validateathash",{"_index":16,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validateathash(params",{"_index":56,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validateathash(validationparams",{"_index":264,"title":{},"body":{"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{}}}],["validated",{"_index":364,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"additional-documentation/callback-after-login.html":{}}}],["validates",{"_index":59,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["validatesignature",{"_index":26,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validatesignature(validationparams",{"_index":65,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validating",{"_index":479,"title":{},"body":{"classes/NullValidationHandler.html":{},"index.html":{}}}],["validation",{"_index":248,"title":{"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}},"body":{"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{},"miscellaneous/variables.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/original-config-api.html":{}}}],["validation/hash",{"_index":120,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"modules/OAuthModule.html":{}}}],["validation/jwks",{"_index":247,"title":{},"body":{"classes/JwksValidationHandler.html":{},"miscellaneous/variables.html":{}}}],["validation/null",{"_index":477,"title":{},"body":{"classes/NullValidationHandler.html":{},"modules/OAuthModule.html":{}}}],["validation/validation",{"_index":7,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"modules/OAuthModule.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validationhandler",{"_index":12,"title":{"classes/ValidationHandler.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/NullValidationHandler.html":{},"classes/OAuthLogger.html":{},"modules/OAuthModule.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"additional-documentation/adapt-id_token-validation.html":{}}}],["validationhandlerclass",{"_index":540,"title":{},"body":{"modules/OAuthModule.html":{}}}],["validationparams",{"_index":57,"title":{"interfaces/ValidationParams.html":{}},"body":{"classes/AbstractValidationHandler.html":{},"classes/JwksValidationHandler.html":{},"classes/NullValidationHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["validations",{"_index":893,"title":{},"body":{"index.html":{}}}],["value",{"_index":35,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"classes/LoginOptions.html":{},"modules/OAuthModule.html":{},"injectables/UrlHelperService.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{},"miscellaneous/variables.html":{},"additional-documentation/refreshing-a-token.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/original-config-api.html":{}}}],["value.tostring(16",{"_index":157,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["values",{"_index":377,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["valuetohash",{"_index":42,"title":{},"body":{"classes/AbstractValidationHandler.html":{},"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{},"classes/ValidationHandler.html":{},"interfaces/ValidationParams.html":{}}}],["var",{"_index":1203,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["variables",{"_index":1112,"title":{"miscellaneous/variables.html":{}},"body":{"miscellaneous/variables.html":{}}}],["various",{"_index":1443,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["vdveer",{"_index":734,"title":{},"body":{"changelog.html":{}}}],["versatility",{"_index":1006,"title":{},"body":{"index.html":{}}}],["version",{"_index":274,"title":{},"body":{"classes/JwksValidationHandler.html":{},"dependencies.html":{},"index.html":{},"miscellaneous/variables.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/events.html":{},"additional-documentation/session-checks.html":{}}}],["versions",{"_index":834,"title":{},"body":{"index.html":{}}}],["via",{"_index":827,"title":{},"body":{"index.html":{},"additional-documentation/popup-based-login.html":{},"additional-documentation/events.html":{},"additional-documentation/adapt-id_token-validation.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["vital",{"_index":954,"title":{},"body":{"index.html":{}}}],["void",{"_index":382,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["voucher",{"_index":1185,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["want",{"_index":368,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/using-password-flow.html":{},"additional-documentation/configure-custom-oauthstorage.html":{},"additional-documentation/manually-skipping-login-form.html":{}}}],["warn",{"_index":525,"title":{},"body":{"classes/OAuthLogger.html":{}}}],["warn(message",{"_index":396,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{}}}],["warning",{"_index":1373,"title":{},"body":{"additional-documentation/adapt-id_token-validation.html":{}}}],["warranties",{"_index":1081,"title":{},"body":{"license.html":{}}}],["warranty",{"_index":1076,"title":{},"body":{"license.html":{}}}],["way",{"_index":1263,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["we've",{"_index":829,"title":{},"body":{"index.html":{}}}],["web",{"_index":902,"title":{},"body":{"index.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["webcomponents/custom",{"_index":751,"title":{},"body":{"dependencies.html":{}}}],["webhttpurlencodingcodec",{"_index":625,"title":{"classes/WebHttpUrlEncodingCodec.html":{}},"body":{"classes/WebHttpUrlEncodingCodec.html":{}}}],["webpack",{"_index":828,"title":{},"body":{"index.html":{}}}],["well",{"_index":388,"title":{},"body":{"classes/LoginOptions.html":{},"injectables/MemoryStorage.html":{},"classes/OAuthLogger.html":{},"classes/OAuthStorage.html":{},"interfaces/OidcDiscoveryDoc.html":{},"interfaces/ParsedIdToken.html":{},"classes/ReceivedTokens.html":{},"interfaces/TokenResponse.html":{},"interfaces/UserInfo.html":{},"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/callback-after-login.html":{}}}],["when/some",{"_index":883,"title":{},"body":{"index.html":{}}}],["whenever",{"_index":1328,"title":{},"body":{"additional-documentation/events.html":{}}}],["whether",{"_index":1094,"title":{},"body":{"license.html":{}}}],["white",{"_index":1246,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["window.crypto.subtle.digest(algorithm",{"_index":143,"title":{},"body":{"injectables/DefaultHashHandler.html":{},"classes/HashHandler.html":{}}}],["window.location.hash",{"_index":607,"title":{},"body":{"injectables/UrlHelperService.html":{}}}],["window.location.origin",{"_index":940,"title":{},"body":{"index.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/session-checks.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{},"additional-documentation/using-implicit-flow.html":{},"additional-documentation/original-config-api.html":{}}}],["window.opener",{"_index":1192,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/popup-based-login.html":{}}}],["window.parent",{"_index":1291,"title":{},"body":{"additional-documentation/popup-based-login.html":{}}}],["window.parent).postmessage(location.hash",{"_index":1193,"title":{},"body":{"additional-documentation/silent-refresh.html":{}}}],["wish",{"_index":1555,"title":{},"body":{"additional-documentation/manually-skipping-login-form.html":{}}}],["within",{"_index":1162,"title":{},"body":{"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/original-config-api.html":{}}}],["without",{"_index":1055,"title":{"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{}},"body":{"license.html":{},"additional-documentation/silent-refresh.html":{},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{},"additional-documentation/using-password-flow.html":{}}}],["work",{"_index":684,"title":{},"body":{"changelog.html":{},"index.html":{},"additional-documentation/popup-based-login.html":{}}}],["working",{"_index":1233,"title":{"additional-documentation/working-with-httpinterceptors.html":{}},"body":{}}],["works",{"_index":1540,"title":{},"body":{"additional-documentation/configure-custom-oauthstorage.html":{}}}],["workshops",{"_index":1038,"title":{},"body":{"index.html":{}}}],["write",{"_index":1257,"title":{},"body":{"additional-documentation/working-with-httpinterceptors.html":{}}}],["ws02",{"_index":1440,"title":{},"body":{"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{}}}],["yes",{"_index":527,"title":{},"body":{"classes/OAuthLogger.html":{},"injectables/UrlHelperService.html":{}}}],["you've",{"_index":1478,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}],["yourself",{"_index":1578,"title":{},"body":{"additional-documentation/original-config-api.html":{}}}],["zone.js",{"_index":774,"title":{},"body":{"dependencies.html":{}}}],["zoom",{"_index":1105,"title":{},"body":{"overview.html":{}}}],["zum",{"_index":1488,"title":{},"body":{"additional-documentation/using-implicit-flow.html":{}}}]],"pipeline":["stemmer"]}, + "store": {"classes/AbstractValidationHandler.html":{"url":"classes/AbstractValidationHandler.html","title":"class - AbstractValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n AbstractValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/validation-handler.ts\n \n\n \n Description\n \n \n This abstract implementation of ValidationHandler already implements\nthe method validateAtHash. However, to make use of it,\nyou have to override the method calcHash.\n\n \n\n\n \n Implements\n \n \n ValidationHandler\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Protected\n Abstract\n calcHash\n \n \n Protected\n inferHashAlgorithm\n \n \n Async\n validateAtHash\n \n \n Abstract\n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Protected\n Abstract\n calcHash\n \n \n \n \n \n \n \n \n calcHash(valueToHash: string, algorithm: string)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:88\n \n \n\n\n \n \n Calculates the hash for the passed value by using\nthe passed hash algorithm.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n valueToHash\n \n string\n \n\n \n No\n \n\n\n \n \n algorithm\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Protected\n inferHashAlgorithm\n \n \n \n \n \n \n \n \n inferHashAlgorithm(jwtHeader: object)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:71\n \n \n\n\n \n \n Infers the name of the hash algorithm to use\nfrom the alg field of an id_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n jwtHeader\n \n object\n \n\n \n No\n \n\n\n \n the id_token's parsed header\n\n \n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Async\n validateAtHash\n \n \n \n \n \n \n \n \n validateAtHash(params: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:46\n \n \n\n\n \n \n Validates the at_hash in an id_token against the received access_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n params\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n validateSignature\n \n \n \n \n \n \n \n \n validateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:41\n \n \n\n\n \n \n Validates the signature of an id_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { base64UrlEncode } from '../base64-helper';\n\nexport interface ValidationParams {\n idToken: string;\n accessToken: string;\n idTokenHeader: object;\n idTokenClaims: object;\n jwks: object;\n loadKeys: () => Promise;\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nexport abstract class ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n public abstract validateSignature(\n validationParams: ValidationParams\n ): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n public abstract validateAtHash(\n validationParams: ValidationParams\n ): Promise;\n}\n\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nexport abstract class AbstractValidationHandler implements ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n abstract validateSignature(validationParams: ValidationParams): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params: ValidationParams): Promise {\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n\n let atHash = base64UrlEncode(leftMostHalf);\n\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n\n return atHash === claimsAtHash;\n }\n\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n protected inferHashAlgorithm(jwtHeader: object): string {\n let alg: string = jwtHeader['alg'];\n\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n\n return 'sha-' + alg.substr(2);\n }\n\n /**\n * Calculates the hash for the passed value by using\n * the passed hash algorithm.\n *\n * @param valueToHash\n * @param algorithm\n */\n protected abstract calcHash(\n valueToHash: string,\n algorithm: string\n ): Promise;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"injectables/DefaultHashHandler.html":{"url":"injectables/DefaultHashHandler.html","title":"injectable - DefaultHashHandler","body":"\n \n\n\n\n\n\n\n\n\n Injectables\n DefaultHashHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/hash-handler.ts\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Async\n calcHash\n \n \n toHashString\n \n \n toHashString2\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Async\n calcHash\n \n \n \n \n \n \n \n \n calcHash(valueToHash: string, algorithm: string)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:14\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n valueToHash\n \n string\n \n\n \n No\n \n\n\n \n \n algorithm\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n toHashString\n \n \n \n \n \n \n \ntoHashString(buffer: ArrayBuffer)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:34\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n buffer\n \n ArrayBuffer\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n toHashString2\n \n \n \n \n \n \n \ntoHashString2(byteArray: number[])\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:26\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n byteArray\n \n number[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\nimport { sha256 } from 'js-sha256';\n\n/**\n * Abstraction for crypto algorithms\n */\nexport abstract class HashHandler {\n abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n@Injectable()\nexport class DefaultHashHandler implements HashHandler {\n async calcHash(valueToHash: string, algorithm: string): Promise {\n // const encoder = new TextEncoder();\n // const hashArray = await window.crypto.subtle.digest(algorithm, data);\n // const data = encoder.encode(valueToHash);\n\n const hashArray = sha256.array(valueToHash);\n // const hashString = this.toHashString(hashArray);\n const hashString = this.toHashString2(hashArray);\n\n return hashString;\n }\n\n toHashString2(byteArray: number[]) {\n let result = '';\n for (let e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n\n toHashString(buffer: ArrayBuffer) {\n const byteArray = new Uint8Array(buffer);\n let result = '';\n for (let e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n\n // hexString(buffer) {\n // const byteArray = new Uint8Array(buffer);\n // const hexCodes = [...byteArray].map(value => {\n // const hexCode = value.toString(16);\n // const paddedHexCode = hexCode.padStart(2, '0');\n // return paddedHexCode;\n // });\n\n // return hexCodes.join('');\n // }\n\n // toHashString(hexString: string) {\n // let result = '';\n // for (let i = 0; i \n \n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interceptors/DefaultOAuthInterceptor.html":{"url":"interceptors/DefaultOAuthInterceptor.html","title":"interceptor - DefaultOAuthInterceptor","body":"\n \n\n\n\n\n\n\n\n\n\n Interceptors\n DefaultOAuthInterceptor\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/interceptors/default-oauth.interceptor.ts\n \n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n intercept\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(authStorage: OAuthStorage, oAuthService: OAuthService, errorHandler: OAuthResourceServerErrorHandler, moduleConfig: OAuthModuleConfig)\n \n \n \n \n Defined in projects/lib/src/interceptors/default-oauth.interceptor.ts:24\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n authStorage\n \n \n OAuthStorage\n \n \n \n No\n \n \n \n \n oAuthService\n \n \n OAuthService\n \n \n \n No\n \n \n \n \n errorHandler\n \n \n OAuthResourceServerErrorHandler\n \n \n \n No\n \n \n \n \n moduleConfig\n \n \n OAuthModuleConfig\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Public\n intercept\n \n \n \n \n \n \n \n \n intercept(req: HttpRequest, next: HttpHandler)\n \n \n\n\n \n \n Defined in projects/lib/src/interceptors/default-oauth.interceptor.ts:46\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n req\n \n HttpRequest\n \n\n \n No\n \n\n\n \n \n next\n \n HttpHandler\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Observable>\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable, Optional } from '@angular/core';\n\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest\n} from '@angular/common/http';\nimport { Observable, of, merge } from 'rxjs';\nimport {\n catchError,\n filter,\n map,\n take,\n mergeMap,\n timeout\n} from 'rxjs/operators';\nimport { OAuthResourceServerErrorHandler } from './resource-server-error-handler';\nimport { OAuthModuleConfig } from '../oauth-module.config';\nimport { OAuthStorage } from '../types';\nimport { OAuthService } from '../oauth-service';\n\n@Injectable()\nexport class DefaultOAuthInterceptor implements HttpInterceptor {\n constructor(\n private authStorage: OAuthStorage,\n private oAuthService: OAuthService,\n private errorHandler: OAuthResourceServerErrorHandler,\n @Optional() private moduleConfig: OAuthModuleConfig\n ) {}\n\n private checkUrl(url: string): boolean {\n if (this.moduleConfig.resourceServer.customUrlValidation) {\n return this.moduleConfig.resourceServer.customUrlValidation(url);\n }\n\n if (this.moduleConfig.resourceServer.allowedUrls) {\n return !!this.moduleConfig.resourceServer.allowedUrls.find(u =>\n url.startsWith(u)\n );\n }\n\n return true;\n }\n\n public intercept(\n req: HttpRequest,\n next: HttpHandler\n ): Observable> {\n const url = req.url.toLowerCase();\n\n if (\n !this.moduleConfig ||\n !this.moduleConfig.resourceServer ||\n !this.checkUrl(url)\n ) {\n return next.handle(req);\n }\n\n const sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;\n\n if (!sendAccessToken) {\n return next\n .handle(req)\n .pipe(catchError(err => this.errorHandler.handleError(err)));\n }\n\n return merge(\n of(this.oAuthService.getAccessToken()).pipe(\n filter(token => (token ? true : false))\n ),\n this.oAuthService.events.pipe(\n filter(e => e.type === 'token_received'),\n timeout(this.oAuthService.waitForTokenInMsec || 0),\n catchError(_ => of(null)), // timeout is not an error\n map(_ => this.oAuthService.getAccessToken())\n )\n ).pipe(\n take(1),\n mergeMap(token => {\n if (token) {\n const header = 'Bearer ' + token;\n const headers = req.headers.set('Authorization', header);\n req = req.clone({ headers });\n }\n\n return next\n .handle(req)\n .pipe(catchError(err => this.errorHandler.handleError(err)));\n })\n );\n }\n}\n\n \n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/HashHandler.html":{"url":"classes/HashHandler.html","title":"class - HashHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n HashHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/hash-handler.ts\n \n\n \n Description\n \n \n Abstraction for crypto algorithms\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n calcHash\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n calcHash\n \n \n \n \n \n \n \n \n calcHash(valueToHash: string, algorithm: string)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/hash-handler.ts:9\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n valueToHash\n \n string\n \n\n \n No\n \n\n\n \n \n algorithm\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\nimport { sha256 } from 'js-sha256';\n\n/**\n * Abstraction for crypto algorithms\n */\nexport abstract class HashHandler {\n abstract calcHash(valueToHash: string, algorithm: string): Promise;\n}\n\n@Injectable()\nexport class DefaultHashHandler implements HashHandler {\n async calcHash(valueToHash: string, algorithm: string): Promise {\n // const encoder = new TextEncoder();\n // const hashArray = await window.crypto.subtle.digest(algorithm, data);\n // const data = encoder.encode(valueToHash);\n\n const hashArray = sha256.array(valueToHash);\n // const hashString = this.toHashString(hashArray);\n const hashString = this.toHashString2(hashArray);\n\n return hashString;\n }\n\n toHashString2(byteArray: number[]) {\n let result = '';\n for (let e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n\n toHashString(buffer: ArrayBuffer) {\n const byteArray = new Uint8Array(buffer);\n let result = '';\n for (let e of byteArray) {\n result += String.fromCharCode(e);\n }\n return result;\n }\n\n // hexString(buffer) {\n // const byteArray = new Uint8Array(buffer);\n // const hexCodes = [...byteArray].map(value => {\n // const hexCode = value.toString(16);\n // const paddedHexCode = hexCode.padStart(2, '0');\n // return paddedHexCode;\n // });\n\n // return hexCodes.join('');\n // }\n\n // toHashString(hexString: string) {\n // let result = '';\n // for (let i = 0; i \n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/JwksValidationHandler.html":{"url":"classes/JwksValidationHandler.html","title":"class - JwksValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n JwksValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/jwks-validation-handler.ts\n \n\n \n Description\n \n \n This is just a dummy of the JwksValidationHandler\ntelling the users that the real one has been moved\nto an library of its own, namely angular-oauth2-oidc-utils\n\n \n\n \n Extends\n \n \n NullValidationHandler\n \n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n validateAtHash\n \n \n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in projects/lib/src/token-validation/jwks-validation-handler.ts:25\n \n \n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n validateAtHash\n \n \n \n \n \n \n \nvalidateAtHash(validationParams: ValidationParams)\n \n \n\n\n \n \n Inherited from NullValidationHandler\n\n \n \n \n \n Defined in NullValidationHandler:11\n\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n validateSignature\n \n \n \n \n \n \n \nvalidateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Inherited from NullValidationHandler\n\n \n \n \n \n Defined in NullValidationHandler:8\n\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { NullValidationHandler } from './null-validation-handler';\n\nconst err = `PLEASE READ THIS CAREFULLY:\n\nBeginning with angular-oauth2-oidc version 9, the JwksValidationHandler\nhas been moved to an library of its own. If you need it for implementing\nOAuth2/OIDC **implicit flow**, please install it using npm:\n\n npm i angular-oauth2-oidc-jwks --save\n\nAfter that, you can import it into your application:\n\n import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\n\nPlease note, that this dependency is not needed for the **code flow**,\nwhich is nowadays the **recommented** one for single page applications.\nThis also results in smaller bundle sizes.\n`;\n\n/**\n * This is just a dummy of the JwksValidationHandler\n * telling the users that the real one has been moved\n * to an library of its own, namely angular-oauth2-oidc-utils\n */\nexport class JwksValidationHandler extends NullValidationHandler {\n constructor() {\n super();\n console.error(err);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/LoginOptions.html":{"url":"classes/LoginOptions.html","title":"class - LoginOptions","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n LoginOptions\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Additional options that can be passed to tryLogin.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n customHashFragment\n \n \n Optional\n customRedirectUri\n \n \n Optional\n disableOAuth2StateCheck\n \n \n Optional\n onLoginError\n \n \n Optional\n onTokenReceived\n \n \n Optional\n preventClearHashAfterLogin\n \n \n Optional\n validationHandler\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n Optional\n customHashFragment\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:40\n \n \n\n \n \n A custom hash fragment to be used instead of the\nactual one. This is used for silent refreshes, to\npass the iframes hash fragment to this method, and\nis also used by popup flows in the same manner.\nThis can be used with code flow, where is must be set\nto a hash symbol followed by the querystring. The\nquestion mark is optional, but may be present following\nthe hash symbol.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n customRedirectUri\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:65\n \n \n\n \n \n Set this for code flow if you used a custom redirect Uri\nwhen retrieving the code. This is used internally for silent\nrefresh and popup flows.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n disableOAuth2StateCheck\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in projects/lib/src/types.ts:50\n \n \n\n \n \n Set this to true to disable the oauth2 state\ncheck which is a best practice to avoid\nsecurity attacks.\nAs OIDC defines a nonce check that includes\nthis, this can be set to true when only doing\nOIDC.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n onLoginError\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/types.ts:28\n \n \n\n \n \n Called when tryLogin detects that the auth server\nincluded an error message into the hash fragment.\nDeprecated: Use property events on OAuthService instead.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n onTokenReceived\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/types.ts:13\n \n \n\n \n \n Is called, after a token has been received and\nsuccessfully validated.\nDeprecated: Use property events on OAuthService instead.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n preventClearHashAfterLogin\n \n \n \n \n \n \n Default value : false\n \n \n \n \n Defined in projects/lib/src/types.ts:58\n \n \n\n \n \n Normally, you want to clear your hash fragment after\nthe lib read the token(s) so that they are not displayed\nanymore in the url. If not, set this to true. For code flow\nthis controls removing query string values.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n validationHandler\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/types.ts:20\n \n \n\n \n \n Hook, to validate the received tokens.\nDeprecated: Use property tokenValidationHandler on OAuthService instead.\n\n \n \n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"injectables/MemoryStorage.html":{"url":"injectables/MemoryStorage.html","title":"injectable - MemoryStorage","body":"\n \n\n\n\n\n\n\n\n\n Injectables\n MemoryStorage\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n getItem\n \n \n removeItem\n \n \n setItem\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n getItem\n \n \n \n \n \n \n \ngetItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:98\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n removeItem\n \n \n \n \n \n \n \nremoveItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:102\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setItem\n \n \n \n \n \n \n \nsetItem(key: string, data: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:106\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n data\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/NullValidationHandler.html":{"url":"classes/NullValidationHandler.html","title":"class - NullValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n NullValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/null-validation-handler.ts\n \n\n \n Description\n \n \n A validation handler that isn't validating nothing.\nCan be used to skip validation (at your own risk).\n\n \n\n\n \n Implements\n \n \n ValidationHandler\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n validateAtHash\n \n \n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n validateAtHash\n \n \n \n \n \n \n \nvalidateAtHash(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/null-validation-handler.ts:11\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n validateSignature\n \n \n \n \n \n \n \nvalidateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/null-validation-handler.ts:8\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { ValidationHandler, ValidationParams } from './validation-handler';\n\n/**\n * A validation handler that isn't validating nothing.\n * Can be used to skip validation (at your own risk).\n */\nexport class NullValidationHandler implements ValidationHandler {\n validateSignature(validationParams: ValidationParams): Promise {\n return Promise.resolve(null);\n }\n validateAtHash(validationParams: ValidationParams): Promise {\n return Promise.resolve(true);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthErrorEvent.html":{"url":"classes/OAuthErrorEvent.html","title":"class - OAuthErrorEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthErrorEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n \n Extends\n \n \n OAuthEvent\n \n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType, reason: object, params: object)\n \n \n \n \n Defined in projects/lib/src/events.ts:42\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n reason\n \n \n object\n \n \n \n No\n \n \n \n \n params\n \n \n object\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthEvent.html":{"url":"classes/OAuthEvent.html","title":"class - OAuthEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType)\n \n \n \n \n Defined in projects/lib/src/events.ts:26\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthInfoEvent.html":{"url":"classes/OAuthInfoEvent.html","title":"class - OAuthInfoEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthInfoEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n \n Extends\n \n \n OAuthEvent\n \n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType, info: any)\n \n \n \n \n Defined in projects/lib/src/events.ts:36\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n info\n \n \n any\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthLogger.html":{"url":"classes/OAuthLogger.html","title":"class - OAuthLogger","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthLogger\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Defines the logging interface the OAuthService uses\ninternally. Is compatible with the console object,\nbut you can provide your own implementation as well\nthrough dependency injection.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n debug\n \n \n Abstract\n error\n \n \n Abstract\n info\n \n \n Abstract\n log\n \n \n Abstract\n warn\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n debug\n \n \n \n \n \n \n \n \n debug(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:75\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n error\n \n \n \n \n \n \n \n \n error(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:79\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n info\n \n \n \n \n \n \n \n \n info(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:76\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n log\n \n \n \n \n \n \n \n \n log(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:77\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n warn\n \n \n \n \n \n \n \n \n warn(message?: any, ...optionalParams: any[])\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:78\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n message\n \n any\n \n\n \n Yes\n \n\n\n \n \n optionalParams\n \n any[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"modules/OAuthModule.html":{"url":"modules/OAuthModule.html","title":"module - OAuthModule","body":"\n \n\n\n\n\n Modules\n OAuthModule\n\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n\n \n File\n \n \n projects/lib/src/angular-oauth-oidc.module.ts\n \n\n\n\n\n \n \n \n \n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Static\n forRoot\n \n \n \n \n \n \n \n \n forRoot(config: OAuthModuleConfig, validationHandlerClass)\n \n \n\n\n \n \n Defined in projects/lib/src/angular-oauth-oidc.module.ts:29\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Default value\n \n \n \n \n config\n \n OAuthModuleConfig\n \n\n \n No\n \n\n \n null\n \n\n \n \n validationHandlerClass\n \n \n\n \n No\n \n\n \n NullValidationHandler\n \n\n \n \n \n \n \n \n \n Returns : ModuleWithProviders\n\n \n \n \n \n \n \n \n \n\n \n\n\n \n import { OAuthStorage, OAuthLogger } from './types';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { OAuthService } from './oauth-service';\nimport { UrlHelperService } from './url-helper.service';\n\nimport { OAuthModuleConfig } from './oauth-module.config';\nimport {\n OAuthResourceServerErrorHandler,\n OAuthNoopResourceServerErrorHandler\n} from './interceptors/resource-server-error-handler';\nimport { DefaultOAuthInterceptor } from './interceptors/default-oauth.interceptor';\nimport { ValidationHandler } from './token-validation/validation-handler';\nimport { NullValidationHandler } from './token-validation/null-validation-handler';\nimport { createDefaultLogger, createDefaultStorage } from './factories';\nimport {\n HashHandler,\n DefaultHashHandler\n} from './token-validation/hash-handler';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [],\n exports: []\n})\nexport class OAuthModule {\n static forRoot(\n config: OAuthModuleConfig = null,\n validationHandlerClass = NullValidationHandler\n ): ModuleWithProviders {\n return {\n ngModule: OAuthModule,\n providers: [\n OAuthService,\n UrlHelperService,\n { provide: OAuthLogger, useFactory: createDefaultLogger },\n { provide: OAuthStorage, useFactory: createDefaultStorage },\n { provide: ValidationHandler, useClass: validationHandlerClass },\n { provide: HashHandler, useClass: DefaultHashHandler },\n {\n provide: OAuthResourceServerErrorHandler,\n useClass: OAuthNoopResourceServerErrorHandler\n },\n { provide: OAuthModuleConfig, useValue: config },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: DefaultOAuthInterceptor,\n multi: true\n }\n ]\n };\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthModuleConfig.html":{"url":"classes/OAuthModuleConfig.html","title":"class - OAuthModuleConfig","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthModuleConfig\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/oauth-module.config.ts\n \n\n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n resourceServer\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n resourceServer\n \n \n \n \n \n \n Type : OAuthResourceServerConfig\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:2\n \n \n\n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n export abstract class OAuthModuleConfig {\n resourceServer: OAuthResourceServerConfig;\n}\n\nexport abstract class OAuthResourceServerConfig {\n /**\n * Urls for which calls should be intercepted.\n * If there is an ResourceServerErrorHandler registered, it is used for them.\n * If sendAccessToken is set to true, the access_token is send to them too.\n */\n allowedUrls?: Array;\n sendAccessToken: boolean;\n customUrlValidation?: (url: string) => boolean;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthNoopResourceServerErrorHandler.html":{"url":"classes/OAuthNoopResourceServerErrorHandler.html","title":"class - OAuthNoopResourceServerErrorHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthNoopResourceServerErrorHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/interceptors/resource-server-error-handler.ts\n \n\n\n\n \n Implements\n \n \n OAuthResourceServerErrorHandler\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n handleError\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n handleError\n \n \n \n \n \n \n \nhandleError(err: HttpResponse)\n \n \n\n\n \n \n Defined in projects/lib/src/interceptors/resource-server-error-handler.ts:10\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n err\n \n HttpResponse\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Observable\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { HttpResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\n\nexport abstract class OAuthResourceServerErrorHandler {\n abstract handleError(err: HttpResponse): Observable;\n}\n\nexport class OAuthNoopResourceServerErrorHandler\n implements OAuthResourceServerErrorHandler {\n handleError(err: HttpResponse): Observable {\n return throwError(err);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthResourceServerConfig.html":{"url":"classes/OAuthResourceServerConfig.html","title":"class - OAuthResourceServerConfig","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthResourceServerConfig\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/oauth-module.config.ts\n \n\n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n allowedUrls\n \n \n Optional\n customUrlValidation\n \n \n sendAccessToken\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n Optional\n allowedUrls\n \n \n \n \n \n \n Type : Array\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:11\n \n \n\n \n \n Urls for which calls should be intercepted.\nIf there is an ResourceServerErrorHandler registered, it is used for them.\nIf sendAccessToken is set to true, the access_token is send to them too.\n\n \n \n\n \n \n \n \n \n \n \n \n \n Optional\n customUrlValidation\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:13\n \n \n\n\n \n \n \n \n \n \n \n \n \n sendAccessToken\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in projects/lib/src/oauth-module.config.ts:12\n \n \n\n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n export abstract class OAuthModuleConfig {\n resourceServer: OAuthResourceServerConfig;\n}\n\nexport abstract class OAuthResourceServerConfig {\n /**\n * Urls for which calls should be intercepted.\n * If there is an ResourceServerErrorHandler registered, it is used for them.\n * If sendAccessToken is set to true, the access_token is send to them too.\n */\n allowedUrls?: Array;\n sendAccessToken: boolean;\n customUrlValidation?: (url: string) => boolean;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthResourceServerErrorHandler.html":{"url":"classes/OAuthResourceServerErrorHandler.html","title":"class - OAuthResourceServerErrorHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthResourceServerErrorHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/interceptors/resource-server-error-handler.ts\n \n\n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n handleError\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n handleError\n \n \n \n \n \n \n \n \n handleError(err: HttpResponse)\n \n \n\n\n \n \n Defined in projects/lib/src/interceptors/resource-server-error-handler.ts:5\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n err\n \n HttpResponse\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Observable\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { HttpResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\n\nexport abstract class OAuthResourceServerErrorHandler {\n abstract handleError(err: HttpResponse): Observable;\n}\n\nexport class OAuthNoopResourceServerErrorHandler\n implements OAuthResourceServerErrorHandler {\n handleError(err: HttpResponse): Observable {\n return throwError(err);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthStorage.html":{"url":"classes/OAuthStorage.html","title":"class - OAuthStorage","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthStorage\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Defines a simple storage that can be used for\nstoring the tokens at client side.\nIs compatible to localStorage and sessionStorage,\nbut you can also create your own implementations.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Abstract\n getItem\n \n \n Abstract\n removeItem\n \n \n Abstract\n setItem\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Abstract\n getItem\n \n \n \n \n \n \n \n \n getItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:89\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string | null\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n removeItem\n \n \n \n \n \n \n \n \n removeItem(key: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:90\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Abstract\n setItem\n \n \n \n \n \n \n \n \n setItem(key: string, data: string)\n \n \n\n\n \n \n Defined in projects/lib/src/types.ts:91\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n key\n \n string\n \n\n \n No\n \n\n\n \n \n data\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/OAuthSuccessEvent.html":{"url":"classes/OAuthSuccessEvent.html","title":"class - OAuthSuccessEvent","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n OAuthSuccessEvent\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/events.ts\n \n\n\n \n Extends\n \n \n OAuthEvent\n \n\n\n\n\n \n Constructor\n \n \n \n \nconstructor(type: EventType, info: any)\n \n \n \n \n Defined in projects/lib/src/events.ts:30\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n type\n \n \n EventType\n \n \n \n No\n \n \n \n \n info\n \n \n any\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n \n\n\n \n export type EventType =\n | 'discovery_document_loaded'\n | 'jwks_load_error'\n | 'invalid_nonce_in_state'\n | 'discovery_document_load_error'\n | 'discovery_document_validation_error'\n | 'user_profile_loaded'\n | 'user_profile_load_error'\n | 'token_received'\n | 'token_error'\n | 'code_error'\n | 'token_refreshed'\n | 'token_refresh_error'\n | 'silent_refresh_error'\n | 'silently_refreshed'\n | 'silent_refresh_timeout'\n | 'token_validation_error'\n | 'token_expires'\n | 'session_changed'\n | 'session_error'\n | 'session_terminated'\n | 'logout'\n | 'popup_closed'\n | 'popup_blocked';\n\nexport abstract class OAuthEvent {\n constructor(readonly type: EventType) {}\n}\n\nexport class OAuthSuccessEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthInfoEvent extends OAuthEvent {\n constructor(type: EventType, readonly info: any = null) {\n super(type);\n }\n}\n\nexport class OAuthErrorEvent extends OAuthEvent {\n constructor(\n type: EventType,\n readonly reason: object,\n readonly params: object = null\n ) {\n super(type);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/OidcDiscoveryDoc.html":{"url":"interfaces/OidcDiscoveryDoc.html","title":"interface - OidcDiscoveryDoc","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n OidcDiscoveryDoc\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents an OpenID Connect discovery document\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n acr_values_supported\n \n \n authorization_endpoint\n \n \n check_session_iframe\n \n \n claim_types_supported\n \n \n claims_parameter_supported\n \n \n claims_supported\n \n \n display_values_supported\n \n \n end_session_endpoint\n \n \n grant_types_supported\n \n \n id_token_encryption_alg_values_supported\n \n \n id_token_encryption_enc_values_supported\n \n \n id_token_signing_alg_values_supported\n \n \n issuer\n \n \n jwks_uri\n \n \n registration_endpoint\n \n \n request_object_signing_alg_values_supported\n \n \n response_modes_supported\n \n \n response_types_supported\n \n \n scopes_supported\n \n \n service_documentation\n \n \n subject_types_supported\n \n \n token_endpoint\n \n \n token_endpoint_auth_methods_supported\n \n \n token_endpoint_auth_signing_alg_values_supported\n \n \n ui_locales_supported\n \n \n userinfo_encryption_alg_values_supported\n \n \n userinfo_encryption_enc_values_supported\n \n \n userinfo_endpoint\n \n \n userinfo_signing_alg_values_supported\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n acr_values_supported\n \n \n \n \n acr_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n authorization_endpoint\n \n \n \n \n authorization_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n check_session_iframe\n \n \n \n \n check_session_iframe: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n claim_types_supported\n \n \n \n \n claim_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n claims_parameter_supported\n \n \n \n \n claims_parameter_supported: boolean\n\n \n \n\n\n \n \n Type : boolean\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n claims_supported\n \n \n \n \n claims_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n display_values_supported\n \n \n \n \n display_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n end_session_endpoint\n \n \n \n \n end_session_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n grant_types_supported\n \n \n \n \n grant_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token_encryption_alg_values_supported\n \n \n \n \n id_token_encryption_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token_encryption_enc_values_supported\n \n \n \n \n id_token_encryption_enc_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token_signing_alg_values_supported\n \n \n \n \n id_token_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n issuer\n \n \n \n \n issuer: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n jwks_uri\n \n \n \n \n jwks_uri: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n registration_endpoint\n \n \n \n \n registration_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n request_object_signing_alg_values_supported\n \n \n \n \n request_object_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n response_modes_supported\n \n \n \n \n response_modes_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n response_types_supported\n \n \n \n \n response_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n scopes_supported\n \n \n \n \n scopes_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n service_documentation\n \n \n \n \n service_documentation: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n subject_types_supported\n \n \n \n \n subject_types_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n token_endpoint\n \n \n \n \n token_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n token_endpoint_auth_methods_supported\n \n \n \n \n token_endpoint_auth_methods_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n token_endpoint_auth_signing_alg_values_supported\n \n \n \n \n token_endpoint_auth_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n ui_locales_supported\n \n \n \n \n ui_locales_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_encryption_alg_values_supported\n \n \n \n \n userinfo_encryption_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_encryption_enc_values_supported\n \n \n \n \n userinfo_encryption_enc_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_endpoint\n \n \n \n \n userinfo_endpoint: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n userinfo_signing_alg_values_supported\n \n \n \n \n userinfo_signing_alg_values_supported: string[]\n\n \n \n\n\n \n \n Type : string[]\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/ParsedIdToken.html":{"url":"interfaces/ParsedIdToken.html","title":"interface - ParsedIdToken","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n ParsedIdToken\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the parsed and validated id_token.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n idToken\n \n \n idTokenClaims\n \n \n idTokenClaimsJson\n \n \n idTokenExpiresAt\n \n \n idTokenHeader\n \n \n idTokenHeaderJson\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n idToken\n \n \n \n \n idToken: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenClaims\n \n \n \n \n idTokenClaims: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenClaimsJson\n \n \n \n \n idTokenClaimsJson: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenExpiresAt\n \n \n \n \n idTokenExpiresAt: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenHeader\n \n \n \n \n idTokenHeader: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenHeaderJson\n \n \n \n \n idTokenHeaderJson: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ReceivedTokens.html":{"url":"classes/ReceivedTokens.html","title":"class - ReceivedTokens","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ReceivedTokens\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the received tokens, the received state\nand the parsed claims from the id-token.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n accessToken\n \n \n Optional\n idClaims\n \n \n idToken\n \n \n Optional\n state\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n \n accessToken\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:117\n \n \n\n\n \n \n \n \n \n \n \n \n \n Optional\n idClaims\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Defined in projects/lib/src/types.ts:118\n \n \n\n\n \n \n \n \n \n \n \n \n \n idToken\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:116\n \n \n\n\n \n \n \n \n \n \n \n \n \n Optional\n state\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in projects/lib/src/types.ts:119\n \n \n\n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/TokenResponse.html":{"url":"interfaces/TokenResponse.html","title":"interface - TokenResponse","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n TokenResponse\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the response from the token endpoint\nhttp://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n access_token\n \n \n expires_in\n \n \n id_token\n \n \n refresh_token\n \n \n scope\n \n \n Optional\n state\n \n \n token_type\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n access_token\n \n \n \n \n access_token: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n expires_in\n \n \n \n \n expires_in: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n id_token\n \n \n \n \n id_token: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n refresh_token\n \n \n \n \n refresh_token: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n scope\n \n \n \n \n scope: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n state\n \n \n \n \n state: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n \n \n \n \n \n token_type\n \n \n \n \n token_type: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"injectables/UrlHelperService.html":{"url":"injectables/UrlHelperService.html","title":"injectable - UrlHelperService","body":"\n \n\n\n\n\n\n\n\n\n Injectables\n UrlHelperService\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/url-helper.service.ts\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n getHashFragmentParams\n \n \n Public\n parseQueryString\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Public\n getHashFragmentParams\n \n \n \n \n \n \n \n \n getHashFragmentParams(customHashFragment?: string)\n \n \n\n\n \n \n Defined in projects/lib/src/url-helper.service.ts:5\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n customHashFragment\n \n string\n \n\n \n Yes\n \n\n\n \n \n \n \n \n \n \n Returns : object\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n parseQueryString\n \n \n \n \n \n \n \n \n parseQueryString(queryString: string)\n \n \n\n\n \n \n Defined in projects/lib/src/url-helper.service.ts:25\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n queryString\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : object\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UrlHelperService {\n public getHashFragmentParams(customHashFragment?: string): object {\n let hash = customHashFragment || window.location.hash;\n\n hash = decodeURIComponent(hash);\n\n if (hash.indexOf('#') !== 0) {\n return {};\n }\n\n const questionMarkPosition = hash.indexOf('?');\n\n if (questionMarkPosition > -1) {\n hash = hash.substr(questionMarkPosition + 1);\n } else {\n hash = hash.substr(1);\n }\n\n return this.parseQueryString(hash);\n }\n\n public parseQueryString(queryString: string): object {\n const data = {};\n let pairs, pair, separatorIndex, escapedKey, escapedValue, key, value;\n\n if (queryString === null) {\n return data;\n }\n\n pairs = queryString.split('&');\n\n for (let i = 0; i \n \n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/UserInfo.html":{"url":"interfaces/UserInfo.html","title":"interface - UserInfo","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n UserInfo\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/types.ts\n \n\n \n Description\n \n \n Represents the response from the user info endpoint\nhttp://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n sub\n \n \n \n \n \n \n \n\n\n \n Indexable\n \n \n \n \n [key: string]: any\n\n \n \n \n \n Defined in projects/lib/src/types.ts:153\n \n \n \n \n\n\n \n Properties\n \n \n \n \n \n sub\n \n \n \n \n sub: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { Injectable } from '@angular/core';\n\n/**\n * Additional options that can be passed to tryLogin.\n */\nexport class LoginOptions {\n /**\n * Is called, after a token has been received and\n * successfully validated.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onTokenReceived?: (receivedTokens: ReceivedTokens) => void;\n\n /**\n * Hook, to validate the received tokens.\n *\n * Deprecated: Use property ``tokenValidationHandler`` on OAuthService instead.\n */\n validationHandler?: (receivedTokens: ReceivedTokens) => Promise;\n\n /**\n * Called when tryLogin detects that the auth server\n * included an error message into the hash fragment.\n *\n * Deprecated: Use property ``events`` on OAuthService instead.\n */\n onLoginError?: (params: object) => void;\n\n /**\n * A custom hash fragment to be used instead of the\n * actual one. This is used for silent refreshes, to\n * pass the iframes hash fragment to this method, and\n * is also used by popup flows in the same manner.\n * This can be used with code flow, where is must be set\n * to a hash symbol followed by the querystring. The\n * question mark is optional, but may be present following\n * the hash symbol.\n */\n customHashFragment?: string;\n\n /**\n * Set this to true to disable the oauth2 state\n * check which is a best practice to avoid\n * security attacks.\n * As OIDC defines a nonce check that includes\n * this, this can be set to true when only doing\n * OIDC.\n */\n disableOAuth2StateCheck?: boolean;\n\n /**\n * Normally, you want to clear your hash fragment after\n * the lib read the token(s) so that they are not displayed\n * anymore in the url. If not, set this to true. For code flow\n * this controls removing query string values.\n */\n preventClearHashAfterLogin? = false;\n\n /**\n * Set this for code flow if you used a custom redirect Uri\n * when retrieving the code. This is used internally for silent\n * refresh and popup flows.\n */\n customRedirectUri?: string;\n}\n\n/**\n * Defines the logging interface the OAuthService uses\n * internally. Is compatible with the `console` object,\n * but you can provide your own implementation as well\n * through dependency injection.\n */\nexport abstract class OAuthLogger {\n abstract debug(message?: any, ...optionalParams: any[]): void;\n abstract info(message?: any, ...optionalParams: any[]): void;\n abstract log(message?: any, ...optionalParams: any[]): void;\n abstract warn(message?: any, ...optionalParams: any[]): void;\n abstract error(message?: any, ...optionalParams: any[]): void;\n}\n\n/**\n * Defines a simple storage that can be used for\n * storing the tokens at client side.\n * Is compatible to localStorage and sessionStorage,\n * but you can also create your own implementations.\n */\nexport abstract class OAuthStorage {\n abstract getItem(key: string): string | null;\n abstract removeItem(key: string): void;\n abstract setItem(key: string, data: string): void;\n}\n\n@Injectable()\nexport class MemoryStorage implements OAuthStorage {\n private data = new Map();\n\n getItem(key: string): string {\n return this.data.get(key);\n }\n\n removeItem(key: string): void {\n this.data.delete(key);\n }\n\n setItem(key: string, data: string): void {\n this.data.set(key, data);\n }\n}\n\n/**\n * Represents the received tokens, the received state\n * and the parsed claims from the id-token.\n */\nexport class ReceivedTokens {\n idToken: string;\n accessToken: string;\n idClaims?: object;\n state?: string;\n}\n\n/**\n * Represents the parsed and validated id_token.\n */\nexport interface ParsedIdToken {\n idToken: string;\n idTokenClaims: object;\n idTokenHeader: object;\n idTokenClaimsJson: string;\n idTokenHeaderJson: string;\n idTokenExpiresAt: number;\n}\n\n/**\n * Represents the response from the token endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint\n */\nexport interface TokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token: string;\n scope: string;\n state?: string;\n}\n\n/**\n * Represents the response from the user info endpoint\n * http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n */\nexport interface UserInfo {\n sub: string;\n [key: string]: any;\n}\n\n/**\n * Represents an OpenID Connect discovery document\n */\nexport interface OidcDiscoveryDoc {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n token_endpoint_auth_methods_supported: string[];\n token_endpoint_auth_signing_alg_values_supported: string[];\n userinfo_endpoint: string;\n check_session_iframe: string;\n end_session_endpoint: string;\n jwks_uri: string;\n registration_endpoint: string;\n scopes_supported: string[];\n response_types_supported: string[];\n acr_values_supported: string[];\n response_modes_supported: string[];\n grant_types_supported: string[];\n subject_types_supported: string[];\n userinfo_signing_alg_values_supported: string[];\n userinfo_encryption_alg_values_supported: string[];\n userinfo_encryption_enc_values_supported: string[];\n id_token_signing_alg_values_supported: string[];\n id_token_encryption_alg_values_supported: string[];\n id_token_encryption_enc_values_supported: string[];\n request_object_signing_alg_values_supported: string[];\n display_values_supported: string[];\n claim_types_supported: string[];\n claims_supported: string[];\n claims_parameter_supported: boolean;\n service_documentation: string;\n ui_locales_supported: string[];\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ValidationHandler.html":{"url":"classes/ValidationHandler.html","title":"class - ValidationHandler","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ValidationHandler\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/validation-handler.ts\n \n\n \n Description\n \n \n Interface for Handlers that are hooked in to\nvalidate tokens.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n Abstract\n validateAtHash\n \n \n Public\n Abstract\n validateSignature\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n Public\n Abstract\n validateAtHash\n \n \n \n \n \n \n \n \n validateAtHash(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:27\n \n \n\n\n \n \n Validates the at_hash in an id_token against the received access_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n Abstract\n validateSignature\n \n \n \n \n \n \n \n \n validateSignature(validationParams: ValidationParams)\n \n \n\n\n \n \n Defined in projects/lib/src/token-validation/validation-handler.ts:20\n \n \n\n\n \n \n Validates the signature of an id_token.\n\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n validationParams\n \n ValidationParams\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { base64UrlEncode } from '../base64-helper';\n\nexport interface ValidationParams {\n idToken: string;\n accessToken: string;\n idTokenHeader: object;\n idTokenClaims: object;\n jwks: object;\n loadKeys: () => Promise;\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nexport abstract class ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n public abstract validateSignature(\n validationParams: ValidationParams\n ): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n public abstract validateAtHash(\n validationParams: ValidationParams\n ): Promise;\n}\n\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nexport abstract class AbstractValidationHandler implements ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n abstract validateSignature(validationParams: ValidationParams): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params: ValidationParams): Promise {\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n\n let atHash = base64UrlEncode(leftMostHalf);\n\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n\n return atHash === claimsAtHash;\n }\n\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n protected inferHashAlgorithm(jwtHeader: object): string {\n let alg: string = jwtHeader['alg'];\n\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n\n return 'sha-' + alg.substr(2);\n }\n\n /**\n * Calculates the hash for the passed value by using\n * the passed hash algorithm.\n *\n * @param valueToHash\n * @param algorithm\n */\n protected abstract calcHash(\n valueToHash: string,\n algorithm: string\n ): Promise;\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/ValidationParams.html":{"url":"interfaces/ValidationParams.html","title":"interface - ValidationParams","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n ValidationParams\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/token-validation/validation-handler.ts\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n accessToken\n \n \n idToken\n \n \n idTokenClaims\n \n \n idTokenHeader\n \n \n jwks\n \n \n loadKeys\n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n accessToken\n \n \n \n \n accessToken: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idToken\n \n \n \n \n idToken: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenClaims\n \n \n \n \n idTokenClaims: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n idTokenHeader\n \n \n \n \n idTokenHeader: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n jwks\n \n \n \n \n jwks: object\n\n \n \n\n\n \n \n Type : object\n\n \n \n\n\n\n\n\n \n \n \n \n \n \n \n loadKeys\n \n \n \n \n loadKeys: function\n\n \n \n\n\n \n \n Type : function\n\n \n \n\n\n\n\n\n \n \n \n \n\n\n \n import { base64UrlEncode } from '../base64-helper';\n\nexport interface ValidationParams {\n idToken: string;\n accessToken: string;\n idTokenHeader: object;\n idTokenClaims: object;\n jwks: object;\n loadKeys: () => Promise;\n}\n\n/**\n * Interface for Handlers that are hooked in to\n * validate tokens.\n */\nexport abstract class ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n public abstract validateSignature(\n validationParams: ValidationParams\n ): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n public abstract validateAtHash(\n validationParams: ValidationParams\n ): Promise;\n}\n\n/**\n * This abstract implementation of ValidationHandler already implements\n * the method validateAtHash. However, to make use of it,\n * you have to override the method calcHash.\n */\nexport abstract class AbstractValidationHandler implements ValidationHandler {\n /**\n * Validates the signature of an id_token.\n */\n abstract validateSignature(validationParams: ValidationParams): Promise;\n\n /**\n * Validates the at_hash in an id_token against the received access_token.\n */\n async validateAtHash(params: ValidationParams): Promise {\n let hashAlg = this.inferHashAlgorithm(params.idTokenHeader);\n\n let tokenHash = await this.calcHash(params.accessToken, hashAlg); // sha256(accessToken, { asString: true });\n\n let leftMostHalf = tokenHash.substr(0, tokenHash.length / 2);\n\n let atHash = base64UrlEncode(leftMostHalf);\n\n let claimsAtHash = params.idTokenClaims['at_hash'].replace(/=/g, '');\n\n if (atHash !== claimsAtHash) {\n console.error('exptected at_hash: ' + atHash);\n console.error('actual at_hash: ' + claimsAtHash);\n }\n\n return atHash === claimsAtHash;\n }\n\n /**\n * Infers the name of the hash algorithm to use\n * from the alg field of an id_token.\n *\n * @param jwtHeader the id_token's parsed header\n */\n protected inferHashAlgorithm(jwtHeader: object): string {\n let alg: string = jwtHeader['alg'];\n\n if (!alg.match(/^.S[0-9]{3}$/)) {\n throw new Error('Algorithm not supported: ' + alg);\n }\n\n return 'sha-' + alg.substr(2);\n }\n\n /**\n * Calculates the hash for the passed value by using\n * the passed hash algorithm.\n *\n * @param valueToHash\n * @param algorithm\n */\n protected abstract calcHash(\n valueToHash: string,\n algorithm: string\n ): Promise;\n}\n\n \n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/WebHttpUrlEncodingCodec.html":{"url":"classes/WebHttpUrlEncodingCodec.html","title":"class - WebHttpUrlEncodingCodec","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n WebHttpUrlEncodingCodec\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n projects/lib/src/encoder.ts\n \n\n \n Description\n \n \n This custom encoder allows charactes like +, % and / to be used in passwords\n\n \n\n\n \n Implements\n \n \n HttpParameterCodec\n \n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n decodeKey\n \n \n decodeValue\n \n \n encodeKey\n \n \n encodeValue\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n \n decodeKey\n \n \n \n \n \n \n \ndecodeKey(k: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:14\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n k\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n decodeValue\n \n \n \n \n \n \n \ndecodeValue(v: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:18\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n v\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n encodeKey\n \n \n \n \n \n \n \nencodeKey(k: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:6\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n k\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n encodeValue\n \n \n \n \n \n \n \nencodeValue(v: string)\n \n \n\n\n \n \n Defined in projects/lib/src/encoder.ts:10\n \n \n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n \n \n \n \n v\n \n string\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { HttpParameterCodec } from '@angular/common/http';\n/**\n * This custom encoder allows charactes like +, % and / to be used in passwords\n */\nexport class WebHttpUrlEncodingCodec implements HttpParameterCodec {\n encodeKey(k: string): string {\n return encodeURIComponent(k);\n }\n\n encodeValue(v: string): string {\n return encodeURIComponent(v);\n }\n\n decodeKey(k: string): string {\n return decodeURIComponent(k);\n }\n\n decodeValue(v: string) {\n return decodeURIComponent(v);\n }\n}\n\n \n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"changelog.html":{"url":"changelog.html","title":"getting-started - changelog","body":"\n \n\nChangelog\n9.1.0 (2020-03-23)\nFeatures\n\nremove jsrsasign dependancy (77cb37a)\nUpgrade to angular 8 (31c6273)\nautomatic silent refresh: stopAutomaticRefresh stops all timers. (8ab853b)\ncode-flow: allow using implicit flow by setting useSilentRefresh to true (93902a5)\nsample: also use new idsvr 4 for implicit flow demo to prevent issues with same site cookies (58c6354)\nsession checks: Session checks work now for code flow too. Pls see Docs for details. (4bf8901)\n\nBug Fixes\n\ncode flow: Fixed code flow for IE 11 (0f03d39)\nsample: use hash-based routing (3f44eca)\nsession state: save session_state also when using code flow (8fa99ff)\nstate: passing an url with a querystring as the state, e. g. url?x=1 (71b705c)\n#687 (e2599e0)\nmissing HttpModule dependency (7eac8ae)\nrun tokensetup outside ngzone (07bb62d)\ntypo (3d331f2)\n\nThanks\nBig Thanks to all contributers: Brecht Carlier, Daniel Moos, Jie Lin, Manfred Steyer, Phil McCloghry-Laing, robin labat, vdveer\nAlso, big thanks to jeroenheijmans for doing an awesome job with moderating and analyzing the issues!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"dependencies.html":{"url":"dependencies.html","title":"package-dependencies - dependencies","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n Dependencies\n \n \n \n @angular/animations : 9.0.7\n \n @angular/common : 9.0.7\n \n @angular/compiler : 9.0.7\n \n @angular/core : 9.0.7\n \n @angular/elements : 9.0.7\n \n @angular/forms : 9.0.7\n \n @angular/platform-browser : 9.0.7\n \n @angular/platform-browser-dynamic : 9.0.7\n \n @angular/router : 9.0.7\n \n @webcomponents/custom-elements : ^1.2.4\n \n angular-oauth2-oidc : ^9.0.1\n \n angular-oauth2-oidc-jwks : ^9.0.0\n \n base64-js : ^1.3.0\n \n bootstrap : ^3.3.7\n \n js-sha256 : ^0.9.0\n \n jsrsasign : ^8.0.12\n \n ngx-semantic-version : ^1.2.1\n \n rxjs : 6.5.4\n \n rxjs-compat : ^6.5.2\n \n text-encoder-lite : ^1.0.1\n \n tsickle : ^0.38.1\n \n tslib : ^1.11.1\n \n zone.js : ^0.10.2\n \n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/functions.html":{"url":"miscellaneous/functions.html","title":"miscellaneous-functions - functions","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n Miscellaneous\n Functions\n\n\n\n Index\n \n \n \n \n \n \n b64DecodeUnicode   (projects/.../base64-helper.ts)\n \n \n base64UrlEncode   (projects/.../base64-helper.ts)\n \n \n createDefaultLogger   (projects/.../factories.ts)\n \n \n createDefaultStorage   (projects/.../factories.ts)\n \n \n \n \n \n \n\n\n projects/lib/src/base64-helper.ts\n \n \n \n \n \n \n \n \n b64DecodeUnicode\n \n \n \n \n \n \n \nb64DecodeUnicode(str)\n \n \n\n\n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Optional\n \n \n \n \n str\n\n \n No\n \n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n base64UrlEncode\n \n \n \n \n \n \n \nbase64UrlEncode(str)\n \n \n\n\n\n\n \n \n\n \n Parameters :\n \n \n \n Name\n Optional\n \n \n \n \n str\n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : string\n\n \n \n \n \n \n \n \n \n projects/lib/src/factories.ts\n \n \n \n \n \n \n \n \n createDefaultLogger\n \n \n \n \n \n \n \ncreateDefaultLogger()\n \n \n\n\n\n\n \n \n \n \n \n \n \n \n \n createDefaultStorage\n \n \n \n \n \n \n \ncreateDefaultStorage()\n \n \n\n\n\n\n \n \n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"index.html":{"url":"index.html","title":"getting-started - index","body":"\n \n\nangular-oauth2-oidc\nSupport for OAuth 2 and OpenId Connect (OIDC) in Angular. Already prepared for the upcoming OAuth 2.1.\n\nCredits\n\njsrasign for validating token signature and for hashing\nIdentity Server for testing with an .NET/.NET Core Backend\nKeycloak (Redhat) for testing with Java\n\nResources\n\nSources and Sample: https://github.com/manfredsteyer/angular-oauth2-oidc\nSource Code Documentation: https://manfredsteyer.github.io/angular-oauth2-oidc/docs\nCommunity-provided sample implementation: https://github.com/jeroenheijmans/sample-angular-oauth2-oidc-with-auth-guards/\n\nBreaking Change in Version 9\nWith regards to tree shaking, beginning with version 9, the JwksValidationHandler has been moved to a library of its own. If you need it for implementing implicit flow, please install it using npm:\nnpm i angular-oauth2-oidc-jwks --saveAfter that, you can import it into your application by using this:\nimport { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';instead of that:\nimport { JwksValidationHandler } from 'angular-oauth2-oidc';Please note, that this dependency is not needed for the code flow, which is nowadays the recommended flow for single page applications. This also results in smaller bundle sizes.\nTested Environment\nSuccessfully tested with Angular 9 and its Router, PathLocationStrategy as well as HashLocationStrategy and CommonJS-Bundling via webpack. At server side we've used IdentityServer (.NET / .NET Core) and Redhat's Keycloak (Java).\nAngular 9: Use 9.x versions of this library (should also work with older Angular versions!).\nAngular 8: Use 8.x versions of this library.\nAngular 7: Use 7.x versions of this library.\nAngular 6: Use Version 4.x of this library. Version 4.x was tested with Angular 6. You can also try the newer version 5.x of this library which has a much smaller bundle size.\nAngular 5.x or 4.3: If you need support for Angular \nRelease Cycle\n\nWe plan one major release for each Angular version\nWill contain new features\nWill contain bug fixes and PRs\n\n\nCritical bugfixes on demand\n\nContributions\n\nFeel free to file pull requests\n\nThe issues contain some ideas for PRs and enhancements (see labels)\n\nIf you want to contribute to the docs, you can do so in the docs-src folder. Make sure you update summary.json as well. Then generate the docs with the following commands:\nnpm install -g @compodoc/compodoc\nnpm run docs\n\nFeatures\n\nLogging in via Code Flow + PKCE\nHence, you are safe for the upcoming OAuth 2.1\n\n\nLogging in via Implicit Flow (where a user is redirected to Identity Provider)\n\"Logging in\" via Password Flow (where a user enters their password into the client)\nToken Refresh for all supported flows\nAutomatically refreshing a token when/some time before it expires\nQuerying Userinfo Endpoint\nQuerying Discovery Document to ease configuration\nValidating claims of the id_token regarding the specs\nHook for further custom validations\nSingle-Sign-Out by redirecting to the auth-server's logout-endpoint\nTested with all modern browsers and IE\n\nSample-Auth-Server\nYou can use the OIDC-Sample-Server used in our examples. It assumes, that your Web-App runs on http://localhost:4200\nUsername/Password:\n\nmax/geheim\nbob/bob\nalice/alice\n\nclientIds:\n\nspa (Code Flow + PKCE)\nimplicit (implicit flow)\n\nredirectUris:\n\nlocalhost:[4200-4202]\nlocalhost:[4200-4202]/index.html\nlocalhost:[4200-4202]/silent-refresh.html\n\nInstalling\nnpm i angular-oauth2-oidc --saveImporting the NgModule\nimport { HttpClientModule } from '@angular/common/http';\nimport { OAuthModule } from 'angular-oauth2-oidc';\n// etc.\n\n@NgModule({\n imports: [\n // etc.\n HttpClientModule,\n OAuthModule.forRoot()\n ],\n declarations: [\n AppComponent,\n HomeComponent,\n // etc.\n ],\n bootstrap: [\n AppComponent\n ]\n})\nexport class AppModule {\n}Logging in\nSince Version 8, this library supports code flow and PKCE to align with the current draft of the OAuth 2.0 Security Best Current Practice document. This is also the foundation of the upcoming OAuth 2.1.\nTo configure your solution for code flow + PKCE you have to set the responseType to code:\n import { AuthConfig } from 'angular-oauth2-oidc';\n\n export const authCodeFlowConfig: AuthConfig = {\n // Url of the Identity Provider\n issuer: 'https://demo.identityserver.io',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n // clientId: 'server.code',\n clientId: 'spa',\n\n // Just needed if your auth server demands a secret. In general, this\n // is a sign that the auth server is not configured with SPAs in mind\n // and it might not enforce further best practices vital for security\n // such applications.\n // dummyClientSecret: 'secret',\n\n responseType: 'code',\n\n // set the scope for the permissions the client should request\n // The first four are defined by OIDC.\n // Important: Request offline_access to get a refresh token\n // The api scope is a usecase specific one\n scope: 'openid profile email offline_access api',\n\n showDebugInformation: true,\n\n // Not recommented:\n // disablePKCI: true,\n };After this, you can initialize the code flow using:\nthis.oauthService.initCodeFlow();There is also a convenience method initLoginFlow which initializes either the code flow or the implicit flow depending on your configuration.\nthis.oauthService.initLoginFlow();Also -- as shown in the readme -- you have to execute the following code when bootstrapping to make the library to fetch the token:\nthis.oauthService.configure(authCodeFlowConfig);\nthis.oauthService.loadDiscoveryDocumentAndTryLogin();Skipping the Login Form\nIf you don't want to display a login form that tells the user that they are redirected to the identity server, you can use the convenience function this.oauthService.loadDiscoveryDocumentAndLogin(); instead of this.oauthService.loadDiscoveryDocumentAndTryLogin(); when setting up the library.\nThis directly redirects the user to the identity server if there are no valid tokens. Ensure you have your issuer set to your discovery document endpoint!\nCalling a Web API with an Access Token\nYou can automate this task by switching sendAccessToken on and by setting allowedUrls to an array with prefixes for the respective URLs. Use lower case for the prefixes.\nOAuthModule.forRoot({\n resourceServer: {\n allowedUrls: ['http://www.angular.at/api'],\n sendAccessToken: true\n }\n})If you need more versatility, you can look in the documentation how to setup a custom interceptor.\nToken Refresh\nSee docs: https://manfredsteyer.github.io/angular-oauth2-oidc/docs/additional-documentation/refreshing-a-token.html\nRouting\nIf you use the PathLocationStrategy (which is on by default) and have a general catch-all-route (path: '**') you should be fine. Otherwise look up the section Routing with the HashStrategy in the documentation.\nImplicit Flow\nNowadays, using code flow + PKCE -- as shown above -- is the recommended OAuth 2/OIDC flow for SPAs. To use the older implicit flow, lookup this docs: https://manfredsteyer.github.io/angular-oauth2-oidc/docs/additional-documentation/implicit-flow.html\nMore Documentation (!)\nSee the documentation for more information about this library.\nTutorials\n\nTutorial with Demo Servers available online\nAngular Authentication with OpenID Connect and Okta in 20 Minutes\nAdd Authentication to Your Angular PWA\nBuild an Ionic App with User Authentication\nOn-Site Workshops\nAngular 6 with Auth0 using this library\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"license.html":{"url":"license.html","title":"getting-started - license","body":"\n \n\nCopyright (c) 2017 Manfred Steyer\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"modules.html":{"url":"modules.html","title":"modules - modules","body":"\n \n\n\n\n\n Modules\n\n\n \n \n \n \n OAuthModule\n \n \n \n No graph available.\n \n \n Browse\n \n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"overview.html":{"url":"overview.html","title":"overview - overview","body":"\n \n\n\n\n Overview\n\n \n\n \n \n\n\n\n\n\ndependencies\n\nLegend\n\n  Declarations\n\n  Module\n\n  Bootstrap\n\n  Providers\n\n  Exports\n\n\n\n \n \n \n Zoom in\n Reset\n Zoom out\n \n\n \n\n \n \n \n \n \n \n 1 Module\n \n \n \n \n \n \n \n \n 4 Injectables\n \n \n \n \n \n \n \n 19 Classes\n \n \n \n \n \n \n \n 5 Interfaces\n \n \n \n \n\n\n \n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/typealiases.html":{"url":"miscellaneous/typealiases.html","title":"miscellaneous-typealiases - typealiases","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n Miscellaneous\n Type aliases\n\n\n\n Index\n \n \n \n \n \n \n EventType   (projects/.../events.ts)\n \n \n \n \n \n \n\n\n projects/lib/src/events.ts\n \n \n \n \n \n \n EventType\n \n \n \n \n \"discovery_document_loaded\" | \"jwks_load_error\" | \"invalid_nonce_in_state\" | \"discovery_document_load_error\" | \"discovery_document_validation_error\" | \"user_profile_loaded\" | \"user_profile_load_error\" | \"token_received\" | \"token_error\" | \"code_error\" | \"token_refreshed\" | \"token_refresh_error\" | \"silent_refresh_error\" | \"silently_refreshed\" | \"silent_refresh_timeout\" | \"token_validation_error\" | \"token_expires\" | \"session_changed\" | \"session_error\" | \"session_terminated\" | \"logout\" | \"popup_closed\" | \"popup_blocked\"\n\n \n \n \n \n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/variables.html":{"url":"miscellaneous/variables.html","title":"miscellaneous-variables - variables","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n Miscellaneous\n Variables\n\n\n\n Index\n \n \n \n \n \n \n AUTH_CONFIG   (projects/.../tokens.ts)\n \n \n err   (projects/.../jwks-validation-handler.ts)\n \n \n \n \n \n \n\n\n projects/lib/src/tokens.ts\n \n \n \n \n \n \n \n \n AUTH_CONFIG\n \n \n \n \n \n \n Default value : new InjectionToken('AUTH_CONFIG')\n \n \n\n\n \n \n\n projects/lib/src/token-validation/jwks-validation-handler.ts\n \n \n \n \n \n \n \n \n err\n \n \n \n \n \n \n Default value : `PLEASE READ THIS CAREFULLY:\n\nBeginning with angular-oauth2-oidc version 9, the JwksValidationHandler\nhas been moved to an library of its own. If you need it for implementing\nOAuth2/OIDC **implicit flow**, please install it using npm:\n\n npm i angular-oauth2-oidc-jwks --save\n\nAfter that, you can import it into your application:\n\n import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\n\nPlease note, that this dependency is not needed for the **code flow**,\nwhich is nowadays the **recommented** one for single page applications.\nThis also results in smaller bundle sizes.\n`\n \n \n\n\n \n \n\n\n\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/getting-started.html":{"url":"additional-documentation/getting-started.html","title":"additional-page - Getting Started","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nGetting Started\nPlease find the Getting Started Guide in the README above.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/preserving-state-(like-the-requested-url).html":{"url":"additional-documentation/preserving-state-(like-the-requested-url).html","title":"additional-page - Preserving State (like the Requested URL)","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nPreserving State (like the Requested URL)\nWhen calling initImplicitFlow, you can pass an optional state which could be the requested url:\nthis.oauthService.initImplicitFlow('http://www.myurl.com/x/y/z');After login succeeded, you can read this state:\nthis.oauthService.tryLogin({\n onTokenReceived: (info) => {\n console.debug('state', info.state);\n }\n})\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/refreshing-a-token.html":{"url":"additional-documentation/refreshing-a-token.html","title":"additional-page - Refreshing a Token","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nRefreshing a Token using Code Flow (not Implicit Flow!)\nWhen using code flow, you can get an refresh_token. While the original standard DOES NOT allow this for SPAs, the mentioned OAuth 2.0 Security Best Current Practice document proposes to ease this limitation. However, it specifies a list of requirements one should take care about before using refresh_tokens. Please make sure you respect those requirements.\nPlease also note, that you have to request the offline_access scope to get an refresh token.\nTo refresh your token, just call the refresh method:\nthis.oauthService.refresh();Automatically refreshing a token when/ before it expires (Code Flow and Implicit Flow)\nTo automatically refresh a token when/ some time before it expires, just call the following method after configuring the OAuthService:\nthis.oauthService.setupAutomaticSilentRefresh();By default, this event is fired after 75% of the token's life time is over. You can adjust this factor by setting the property timeoutFactor to a value between 0 and 1. For instance, 0.5 means, that the event is fired after half of the life time is over and 0.33 triggers the event after a third.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/silent-refresh.html":{"url":"additional-documentation/silent-refresh.html","title":"additional-page - Silent Refresh","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nRefreshing when using Implicit Flow (Implicit Flow and Code Flow)\nNotes for Code Flow: You can also use this strategy for refreshing tokens when using code flow. However, please note, the strategy described within Token Refresh is far easier in this case.\nTo refresh your tokens when using implicit flow you can use a silent refresh. This is a well-known solution that compensates the fact that implicit flow does not allow for issuing a refresh token. It uses a hidden iframe to get another token from the auth server. When the user is there still logged in (by using a cookie) it will respond without user interaction and provide new tokens.\nTo use this approach, setup a redirect uri for the silent refresh.\nFor this, you can set the property silentRefreshRedirectUri in the config object:\n// This api will come in the next version\n\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n\n // Url of the Identity Provider\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // URL of the SPA to redirect the user after silent refresh\n silentRefreshRedirectUri: window.location.origin + '/silent-refresh.html',\n\n // defaults to true for implicit flow and false for code flow\n // as for code code the default is using a refresh_token\n // Also see docs section 'Token Refresh'\n useSilentRefresh: true,\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n clientId: 'spa-demo',\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n scope: 'openid profile email voucher',\n}As an alternative, you can set the same property directly with the OAuthService:\nthis.oauthService.silentRefreshRedirectUri = window.location.origin + \"/silent-refresh.html\";Please keep in mind that this uri has to be configured at the auth-server too.\nThis file is loaded into the hidden iframe after getting new tokens. Its only task is to send the received tokens to the main application:\n\n\n \n (window.opener || window.parent).postMessage(location.hash || ('#' + location.search), location.origin);\n \n\nThis simple implementation within silent-refresh.html is sufficient in most cases. It takes care of the hash fragment as well as of the query string (property search). For edge cases you need to check if the received hash fragment is a token response. For this, please go with the following more advanced implementation:\n\n \n \n var checks = [/[\\?|&|#]code=/, /[\\?|&|#]error=/, /[\\?|&|#]token=/, /[\\?|&|#]id_token=/];\n\n function isResponse(str) {\n var count = 0;\n if (!str) return false;\n for(var i=0; i\n \nPlease make sure that this file is copied to your output directory by your build task. When using the CLI you can define it as an asset for this. For this, you have to add the following line to the file .angular-cli.json:\n\"assets\": [\n [...],\n \"silent-refresh.html\"\n],To perform a silent refresh, just call the following method:\nthis\n .oauthService\n .silentRefresh()\n .then(info => console.debug('refresh ok', info))\n .catch(err => console.error('refresh error', err));When there is an error in the iframe that prevents the communication with the main application, silentRefresh will give you a timeout. To configure the timespan for this, you can set the property silentRefreshTimeout (msec). The default value is 20.000 (20 seconds).\nAutomatically refreshing a token when/ before it expires (Code Flow and Implicit Flow)\nTo automatically refresh a token when/ some time before it expires, just call the following method after configuring the OAuthService:\nthis.oauthService.setupAutomaticSilentRefresh();By default, this event is fired after 75% of the token's life time is over. You can adjust this factor by setting the property timeoutFactor to a value between 0 and 1. For instance, 0.5 means, that the event is fired after half of the life time is over and 0.33 triggers the event after a third.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/working-with-httpinterceptors.html":{"url":"additional-documentation/working-with-httpinterceptors.html","title":"additional-page - Working with HttpInterceptors","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nInterceptors\nSince 3.1 the library uses a default HttpInterceptor that takes care about transmitting the access_token to the resource server and about error handling for security related errors (HTTP status codes 401 and 403) received from the resource server. To put in on, just set sendAccessToken to true and set allowedUrls to an array with prefixes for the respective urls. Use lower case for the prefixes:\nOAuthModule.forRoot({\n resourceServer: {\n allowedUrls: ['http://www.angular.at/api'],\n sendAccessToken: true\n }\n})You can provide an error handler for the urls white listed here by provding a service for the token OAuthResourceServerErrorHandler.\nTo implement such a service, implement the abstract class OAuthResourceServerErrorHandler. The following example shows the default implemantion that just passes the cought error through:\nexport class OAuthNoopResourceServerErrorHandler implements OAuthResourceServerErrorHandler {\n\n handleError(err: HttpResponse): Observable {\n return _throw(err);\n }\n\n}Custom Interceptors\nFeel free to write custom interceptors but keep in mind that injecting the OAuthService into them creates a circular dependency which leads to an error. The easiest way to prevent this is to use the OAuthStorage directly which also provides the access_token:\nimport { Injectable, Inject, Optional } from '@angular/core';\nimport { OAuthService, OAuthStorage } from 'angular-oauth2-oidc';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse, HttpErrorResponse } from '@angular/common/http';\nimport {Observable} from 'rxjs/Observable';\nimport { OAuthResourceServerErrorHandler } from \"./resource-server-error-handler\";\nimport { OAuthModuleConfig } from \"../oauth-module.config\";\n\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class DefaultOAuthInterceptor implements HttpInterceptor {\n\n constructor(\n private authStorage: OAuthStorage,\n private errorHandler: OAuthResourceServerErrorHandler,\n @Optional() private moduleConfig: OAuthModuleConfig\n ) {\n }\n\n private checkUrl(url: string): boolean {\n let found = this.moduleConfig.resourceServer.allowedUrls.find(u => url.startsWith(u));\n return !!found;\n }\n\n public intercept(req: HttpRequest, next: HttpHandler): Observable> {\n\n let url = req.url.toLowerCase();\n\n if (!this.moduleConfig) return next.handle(req);\n if (!this.moduleConfig.resourceServer) return next.handle(req);\n if (!this.moduleConfig.resourceServer.allowedUrls) return next.handle(req);\n if (!this.checkUrl(url)) return next.handle(req);\n\n let sendAccessToken = this.moduleConfig.resourceServer.sendAccessToken;\n\n if (sendAccessToken) {\n\n let token = this.authStorage.getItem('access_token');\n let header = 'Bearer ' + token;\n\n let headers = req.headers\n .set('Authorization', header);\n\n req = req.clone({ headers });\n }\n\n return next.handle(req).catch(err => this.errorHandler.handleError(err));\n\n }\n\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/callback-after-login.html":{"url":"additional-documentation/callback-after-login.html","title":"additional-page - Callback after login","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nCallback after login\nThere is a callback onTokenReceived, that is called after a successful login. In this case, the lib received the access_token as\nwell as the id_token, if it was requested. If there is an id_token, the lib validated it.\nthis.oauthService.tryLogin({\n onTokenReceived: context => {\n //\n // Output just for purpose of demonstration\n // Don't try this at home ... ;-)\n //\n console.debug(\"logged in\");\n console.debug(context);\n }\n});\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/popup-based-login.html":{"url":"additional-documentation/popup-based-login.html","title":"additional-page - Popup-based Login","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nLogging in With a Popup\nThanks to a great community contribution, this library also supports logging the user in via a popup. For this, you need to do two things:\n\nUse initLoginFlowInPopup instead of initLoginFlow.\nCreate and configure a silent-refresh.html as described here *.\n\n* Please note this does not mean that you have to use silent refresh too.\nAlso, for your silent-regfesh.html, make sure you are also targeting\nwindow.opener and fall back to window.parent:\nPlease note: IE sets opener to null under specific security settings. This prevents making this work.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/custom-query-parameters.html":{"url":"additional-documentation/custom-query-parameters.html","title":"additional-page - Custom Query Parameters","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nCustom Query Parameters\nYou can set the property customQueryParams to a hash with custom parameter that are transmitted when starting implicit flow.\nthis.oauthService.customQueryParams = {\n 'tenant': '4711',\n 'otherParam': 'someValue'\n};\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/events.html":{"url":"additional-documentation/events.html","title":"additional-page - Events","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nEvents\nThe library informs you about its tasks and state using events.\nThis is an Observable which publishes a stream of events as they occur in the service.\nYou can log these events to the console for debugging information.\nA short snippet you could use:\nthis.oauthService.events.subscribe(e => console.log(e));Or a longer, more extensive version that logs them at different levels:\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\n\n// ...\n\nthis.authService.events.subscribe(event => {\n if (event instanceof OAuthErrorEvent) {\n console.error(event);\n } else {\n console.warn(event);\n }\n});Here's a list of the main events you might encounter:\n\ndiscovery_document_loaded is published whenever the service has retrieved the openid configuration and successfully saved the jwks information\ninvalid_nonce_in_state is published during tryLogin, when an access token has been requested and the state check was not disabled via the options, only in case the nonce is not as expected (see OAuth2 spec for more details about the nonce)\nuser_profile_loaded is published just before loadUserProfile() successfully resolves\ntoken_received is published whenever the requested token(s) have been successfully received and stored\nsilently_refreshed is published when the silent refresh timer has gone off and the library has also successfully refreshed the tokens (only applicable to Implicit Flow)\nsilent_refresh_timeout is published if the silent refresh timer has gone off but it takes too long to successfully refresh\nsession_error will only be published if the session checks encounter an error\n\nFor a full list of available events see the string based enum in the file events.ts.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/routing-with-the-hashstrategy.html":{"url":"additional-documentation/routing-with-the-hashstrategy.html","title":"additional-page - Routing with the HashStrategy","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nRouting with the HashStrategy\nIf you are leveraging the LocationStrategy which the Router is using by default, you can skip this section.\nWhen using the HashStrategy for Routing, the Router will override the received hash fragment with the tokens when it performs it initial navigation. This prevents the library from reading them. To avoid this, disable initial navigation when setting up the routes for your root module:\nexport let AppRouterModule = RouterModule.forRoot(APP_ROUTES, {\n useHash: true,\n initialNavigation: false\n});After tryLogin did its job, you can manually perform the initial navigation:\nthis.oauthService.tryLogin().then(_ => {\n this.router.navigate(['/']);\n})Another solution is the use a redirect uri that already contains the initial route. In this case the router will not override it. An example for such a redirect uri is\n http://localhost:8080/#/home\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/adapt-id_token-validation.html":{"url":"additional-documentation/adapt-id_token-validation.html","title":"additional-page - Adapt id_token Validation","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfigure/ Adapt id_token Validation\nYou can hook in an implementation of the interface TokenValidator to validate the signature of the received id_token and its at_hash property. This packages provides two implementations:\n\nJwksValidationHandler\nNullValidationHandler\n\nThe former one validates the signature against public keys received via the discovery document (property jwks) and the later one skips the validation on client side.\nimport { JwksValidationHandler } from 'angular-oauth2-oidc';\n\n[...]\n\nthis.oauthService.tokenValidationHandler = new JwksValidationHandler();In cases where no ValidationHandler is defined, you receive a warning on the console. This means that the library wants you to explicitly decide on this.\nDependency Injection\nYou can also setup a ValidationHandler by leveraging dependency injection:\n[...]\nproviders: [\n { provide: ValidationHandler, useClass: JwksValidationHandler },\n],\n[...]\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/session-checks.html":{"url":"additional-documentation/session-checks.html","title":"additional-page - Session Checks","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nSession Checks\nBeginning with version 2.1, you can receive a notification when the user signs out with the identity provider.\nThis is implemented as defined by the OpenID Connect Session Management 1.0 spec.\nWhen this option is activated, the library also automatically ends your local session. This means, the current tokens\nare deleted by calling logOut. In addition to that, the library sends a session_terminated event, you can register\nfor to perform a custom action.\nPlease note that this option can only be used when also the identity provider in question supports it.\nConfiguration\nTo activate the session checks that leads to the mentioned notifications, set the configuration property\nsessionChecksEnabled:\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n redirectUri: window.location.origin + '/index.html',\n silentRefreshRedirectUri: window.location.origin + '/silent-refresh.html',\n clientId: 'spa-demo',\n scope: 'openid profile email voucher',\n\n // Activate Session Checks:\n sessionChecksEnabled: true,\n}Refresh\nPlease note that the lib performs a token refresh when the session changes to get the newest information about the current session. When using implicit flow, this means you have to configure silent refresh; when using code flow you either need silent refresh or a refresh token.\nIf using refresh tokens, your Auth Server needs to bind them to the current session's lifetime. Unfortunately, the used version of Identity Server 4, shown in the docs and in the example applications, does not support this at the moment.\nEvents\nTo get notified, you can hook up for the event session_terminated:\nthis.oauthService.events.pipe(filter(e => e.type === 'session_terminated')).subscribe(e => {\n console.debug('Your session has been terminated!');\n})\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/server-side-rendering.html":{"url":"additional-documentation/server-side-rendering.html","title":"additional-page - Server Side Rendering","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nServer Side Rendering\nThere is a great blog post that shows how this library can be used together with server side rendering:\nhttps://medium.com/lankapura/angular-server-side-rendering-for-authenticated-users-a021627fd9d3The sample for this can be found here:\nhttps://github.com/lankaapura/Angular-AspNetCore-Idsvr\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html":{"url":"additional-documentation/configure-library-for-implicit-flow-without-discovery-document.html","title":"additional-page - Configure Library for Implicit Flow without discovery document","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfigure Library for Implicit Flow (without discovery document)\nWhen you don't have a discovery document, you have to configure more properties manually:\nPlease note that the following sample uses the original config API. For information about the new config API have a look to the project's README above.\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // Login-Url\n this.oauthService.loginUrl = \"https://steyer-identity-server.azurewebsites.net/identity/connect/authorize\"; //Id-Provider?\n\n // URL of the SPA to redirect the user to after login\n this.oauthService.redirectUri = window.location.origin + \"/index.html\";\n\n // The SPA's id. Register SPA with this id at the auth-server\n this.oauthService.clientId = \"spa-demo\";\n\n // set the scope for the permissions the client should request\n this.oauthService.scope = \"openid profile email voucher\";\n\n // Use setStorage to use sessionStorage or another implementation of the TS-type Storage\n // instead of localStorage\n this.oauthService.setStorage(sessionStorage);\n\n // To also enable single-sign-out set the url for your auth-server's logout-endpoint here\n this.oauthService.logoutUrl = \"https://steyer-identity-server.azurewebsites.net/identity/connect/endsession\";\n\n // This method just tries to parse the token(s) within the url when\n // the auth-server redirects the user back to the web-app\n // It doesn't send the user the the login page\n this.oauthService.tryLogin();\n\n\n }\n\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html":{"url":"additional-documentation/using-an-id-provider-that-fails-discovery-document-validation.html","title":"additional-page - Using an ID Provider that Fails Discovery Document Validation","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nDiscovery Document Validation\nThe configuration parameter strictDiscoveryDocumentValidation is set true by default. This ensures that all of the endpoints provided via the ID Provider discovery document share the same base URL as the issuer parameter.\nSeveral ID Providers (i.e. Google OpenID, WS02-IS, PingOne) provide different domains or path params for various endpoints in the discovery document. These providers may still adhere to the OpenID Connect Provider Configuration specification, but will fail to pass this library's discovery document validation.\nTo use this library with an ID Provider that does not maintain a consistent base URL across the discovery document endpoints, set the strictDiscoveryDocumentValidation parameter to false in your configuration:\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n\n // Url of the Identity Provider\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n clientId: 'spa-demo',\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n scope: 'openid profile email voucher',\n\n // turn off validation that discovery document endpoints start with the issuer url defined above\n strictDiscoveryDocumentValidation: false\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-systemjs.html":{"url":"additional-documentation/using-systemjs.html","title":"additional-page - Using SystemJS","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nUsing SystemJS\nThanks to Kevin BEAUGRAND for adding this information regarding SystemJS.\nSystem.config({\n...\n meta: {\n 'angular-oauth2-oidc': {\n deps: ['jsrsasign']\n },\n }\n...\n});Also thanks to ppanthony for sharing his SystemJS config:\n'angular-oauth2-oidc': {\n main: 'angular-oauth2-oidc.umd.js',\n format: 'cjs',\n defaultExtension: 'js',\n map: {\n 'jsrsasign': '/node_modules/jsrsasign/lib/jsrsasign',\n },\n meta: {\n 'angular-oauth2-oidc': {\n deps: ['require','jsrsasign']\n },\n }\n}\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-implicit-flow.html":{"url":"additional-documentation/using-implicit-flow.html","title":"additional-page - Using Implicit Flow","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfiguring for Implicit Flow\nThis section shows how to implement login leveraging implicit flow. This is the OAuth2/OIDC flow which was originally intended for Single Page Application. \nMeanwhile using Code Flow instead is a best practice and with OAuth 2.1 implicit flow will be deprecated*.\nimport { AuthConfig } from 'angular-oauth2-oidc';\n\nexport const authConfig: AuthConfig = {\n // Url of the Identity Provider\n issuer: 'https://steyer-identity-server.azurewebsites.net/identity',\n\n // URL of the SPA to redirect the user to after login\n redirectUri: window.location.origin + '/index.html',\n\n // The SPA's id. The SPA is registered with this id at the auth-server\n clientId: 'spa-demo',\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n scope: 'openid profile email voucher',\n}Configure the OAuthService with this config object when the application starts up:\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { JwksValidationHandler } from 'angular-oauth2-oidc';\nimport { authConfig } from './auth.config';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'flight-app',\n templateUrl: './app.component.html'\n})\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n this.configure();\n }\n\n private configure() {\n this.oauthService.configure(authConfig);\n this.oauthService.tokenValidationHandler = new JwksValidationHandler();\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\n }\n}Implementing a Login Form\nAfter you've configured the library, you just have to call initImplicitFlow to login using OAuth2/ OIDC.\nimport { Component } from '@angular/core';\nimport { OAuthService } from 'angular-oauth2-oidc';\n\n@Component({\n templateUrl: \"app/home.html\"\n})\nexport class HomeComponent {\n\n constructor(private oauthService: OAuthService) {\n }\n\n public login() {\n this.oauthService.initLoginFlow();\n }\n\n public logoff() {\n this.oauthService.logOut();\n }\n\n public get name() {\n let claims = this.oauthService.getIdentityClaims();\n if (!claims) return null;\n return claims.given_name;\n }\n\n}The following snippet contains the template for the login page:\n\n Hallo\n\n\n Hallo, {{name}}\n\n\n\n Login\n\n\n Logout\n\n\n\n Username/Passwort zum Testen: max/geheim\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/using-password-flow.html":{"url":"additional-documentation/using-password-flow.html","title":"additional-page - Using Password Flow","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nUsing Password-Flow\nThis section shows how to use the password flow, which demands the user to directly enter his or her password into the client.\nPlease note that from an OAuth2/OIDC perspective, the code flow is better suited for logging into a SPA and the flow described here should only be used,\nwhen a) there is a strong trust relations ship between the client and the auth server and when b) other flows are not possible.\nPlease also note that with OAuth 2.1, password flow will be deprecated. \nConfigure Library for Password Flow (using discovery document)\nTo configure the library you just have to set some properties on startup. For this, the following sample uses the constructor of the AppComponent which is called before routing kicks in.\nPlease not, that this configuration is quite similar to the one for the implcit flow.\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // The SPA's id. Register SPA with this id at the auth-server\n this.oauthService.clientId = \"demo-resource-owner\";\n\n // set the scope for the permissions the client should request\n // The auth-server used here only returns a refresh token (see below), when the scope offline_access is requested\n this.oauthService.scope = \"openid profile email voucher offline_access\";\n\n // Use setStorage to use sessionStorage or another implementation of the TS-type Storage\n // instead of localStorage\n this.oauthService.setStorage(sessionStorage);\n\n // Set a dummy secret\n // Please note that the auth-server used here demand the client to transmit a client secret, although\n // the standard explicitly cites that the password flow can also be used without it. Using a client secret\n // does not make sense for a SPA that runs in the browser. That's why the property is called dummyClientSecret\n // Using such a dummy secret is as safe as using no secret.\n this.oauthService.dummyClientSecret = \"geheim\";\n\n // Load Discovery Document and then try to login the user\n let url = 'https://steyer-identity-server.azurewebsites.net/identity/.well-known/openid-configuration';\n this.oauthService.loadDiscoveryDocument(url).then(() => {\n // Do what ever you want here\n });\n\n }\n\n}Configure Library for Password Flow (without discovery document)\nIn cases where you don't have an OIDC based discovery document you have to configure some more properties manually:\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // Login-Url\n this.oauthService.tokenEndpoint = \"https://steyer-identity-server.azurewebsites.net/identity/connect/token\";\n\n // Url with user info endpoint\n // This endpont is described by OIDC and provides data about the loggin user\n // This sample uses it, because we don't get an id_token when we use the password flow\n // If you don't want this lib to fetch data about the user (e. g. id, name, email) you can skip this line\n this.oauthService.userinfoEndpoint = \"https://steyer-identity-server.azurewebsites.net/identity/connect/userinfo\";\n\n // The SPA's id. Register SPA with this id at the auth-server\n this.oauthService.clientId = \"demo-resource-owner\";\n\n // set the scope for the permissions the client should request\n this.oauthService.scope = \"openid profile email voucher offline_access\";\n\n // Set a dummy secret\n // Please note that the auth-server used here demand the client to transmit a client secret, although\n // the standard explicitly cites that the password flow can also be used without it. Using a client secret\n // does not make sense for a SPA that runs in the browser. That's why the property is called dummyClientSecret\n // Using such a dummy secret is as safe as using no secret.\n this.oauthService.dummyClientSecret = \"geheim\";\n\n }\n\n}Fetching an Access Token by providing the current user's credentials\nthis.oauthService.fetchTokenUsingPasswordFlow('max', 'geheim').then((resp) => {\n\n // Loading data about the user\n return this.oauthService.loadUserProfile();\n\n}).then(() => {\n\n // Using the loaded user data\n let claims = this.oAuthService.getIdentityClaims();\n if (claims) console.debug('given_name', claims.given_name);\n\n})There is also a short form for fetching the token and loading the user profile:\nthis.oauthService.fetchTokenUsingPasswordFlowAndLoadUserProfile('max', 'geheim').then(() => {\n let claims = this.oAuthService.getIdentityClaims();\n if (claims) console.debug('given_name', claims.given_name);\n});Refreshing the current Access Token\nUsing the password flow you MIGHT get a refresh token (which isn't the case with the implicit flow by design!). You can use this token later to get a new access token, e. g. after it expired.\nthis.oauthService.refreshToken().then(() => {\n console.debug('ok');\n})\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/configure-custom-oauthstorage.html":{"url":"additional-documentation/configure-custom-oauthstorage.html","title":"additional-page - Configure custom OAuthStorage","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nConfigure custom OAuthStorage\nThis library uses sessionStorage as the default storage provider. You can customize this by using localStorage or your own storage solution.\nUsing localStorage\nIf you want to use localStorage instead of sessionStorage, you can add a provider to your AppModule. This works as follows:\nimport { HttpClientModule } from '@angular/common/http';\nimport { OAuthModule } from 'angular-oauth2-oidc';\n// etc.\n\n// We need a factory, since localStorage is not available during AOT build time.\nexport function storageFactory() : OAuthStorage {\n return localStorage\n}\n\n@NgModule({\n imports: [ \n // etc.\n HttpClientModule,\n OAuthModule.forRoot()\n ],\n declarations: [\n AppComponent,\n HomeComponent,\n // etc.\n ],\n bootstrap: [\n AppComponent \n ],\n providers: [\n { provide: OAuthStorage, useFactory: storageFactory }\n ]\n})\nexport class AppModule {\n}Custom storage solution\nIf you want to use a custom storage solution, you can extend the OAuthStorage class. Documentation can be found here. Then add it as a provider, just like in the localStorage example above.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/manually-skipping-login-form.html":{"url":"additional-documentation/manually-skipping-login-form.html","title":"additional-page - Manually Skipping Login Form","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nManually Skipping the Login Form\nFirst, try to use the loadDiscoveryDocumentAndLogin method instead of loadDiscoveryDocumentAndTryLogin. If you need more control, the following could be interesting for you.\nthis.oauthService\n .loadDiscoveryDocumentAndTryLogin(/* { your LoginOptions }*/) // checks to see if the current url contains id token and access token\n .(hasReceivedTokens => {\n // this would have stored all the tokens needed\n if (hasReceivedTokens) {\n // carry on with your app\n return Promise.resolve();\n\n /* if you wish to do something when the user receives tokens from the identity server,\n * use the event stream or the `onTokenReceived` callback in LoginOptions.\n *\n * this.oauthService.events(filter(e => e.type === 'token_received')).subscribe()\n */\n } else {\n // may want to check if you were previously authenticated\n if (this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken()) {\n return Promise.resolve();\n } else {\n // to safe guard this from progressing through the calling promise,\n // resolve it when it directed to the sign up page\n return new Promise(resolve => {\n this.oauthService.initLoginFlow();\n // example if you are using explicit flow\n this.window.addEventListener('unload', () => {\n resolve(true);\n });\n });\n }\n }\n })\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"additional-documentation/original-config-api.html":{"url":"additional-documentation/original-config-api.html","title":"additional-page - Original Config API","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\nOriginal Config API\n\nThis describes the older config API which is nowadays only supported for the sake of backwards compatibility. \n\nTo configure the library you just have to set some properties on startup. For this, the following sample uses the constructor of the AppComponent which is called before routing kicks in.\nPlease note that the following sample uses the original config API. For information about the new config API have a look to the project's README above.\n@Component({ ... })\nexport class AppComponent {\n\n constructor(private oauthService: OAuthService) {\n\n // URL of the SPA to redirect the user to after login\n this.oauthService.redirectUri = window.location.origin + \"/index.html\";\n\n // The SPA's id. The SPA is registerd with this id at the auth-server\n this.oauthService.clientId = \"spa-demo\";\n\n // set the scope for the permissions the client should request\n // The first three are defined by OIDC. The 4th is a usecase-specific one\n this.oauthService.scope = \"openid profile email voucher\";\n\n // The name of the auth-server that has to be mentioned within the token\n this.oauthService.issuer = \"https://steyer-identity-server.azurewebsites.net/identity\";\n\n // Load Discovery Document and then try to login the user\n this.oauthService.loadDiscoveryDocument().then(() => {\n\n // This method just tries to parse the token(s) within the url when\n // the auth-server redirects the user back to the web-app\n // It dosn't send the user the the login page\n this.oauthService.tryLogin();\n\n });\n\n }\n\n}If you find yourself receiving errors related to discovery document validation, your ID Provider may have OAuth2 endpoints that do not use the issuer value as a consistent base URL. You can turn off strict validation of discovery document endpoints for this scenario. See Discovery Document Validation for details.\n\n \n \n result-matching \"\"\n \n \n \n No results matching \"\"\n \n\n"}} } diff --git a/docs/modules/OAuthModule.html b/docs/modules/OAuthModule.html index e3dd5c8f..ba88bcd8 100644 --- a/docs/modules/OAuthModule.html +++ b/docs/modules/OAuthModule.html @@ -94,8 +94,8 @@

    @@ -182,7 +182,10 @@

    import { ValidationHandler } from './token-validation/validation-handler'; import { NullValidationHandler } from './token-validation/null-validation-handler'; import { createDefaultLogger, createDefaultStorage } from './factories'; -import { HashHandler, DefaultHashHandler } from './token-validation/hash-handler'; +import { + HashHandler, + DefaultHashHandler +} from './token-validation/hash-handler'; @NgModule({ imports: [CommonModule], @@ -201,7 +204,7 @@

    UrlHelperService, { provide: OAuthLogger, useFactory: createDefaultLogger }, { provide: OAuthStorage, useFactory: createDefaultStorage }, - { provide: ValidationHandler, useClass: validationHandlerClass}, + { provide: ValidationHandler, useClass: validationHandlerClass }, { provide: HashHandler, useClass: DefaultHashHandler }, { provide: OAuthResourceServerErrorHandler, diff --git a/package.json b/package.json index e9455c7d..355eaa7a 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,15 @@ "lint": "ng lint", "e2e": "ng e2e", "tsc": "tsc", - "prettier": "prettier --write projects/**", + "prettier": "prettier --write projects/**/*.ts", "docs": "npm run docs:build -- --disableCoverage --disablePrivate --disableInternal --includes docs-src", "docs:build": "compodoc -p projects/lib/tsconfig.lib.json -n angular-oauth2-oidc -d docs --hideGenerator", "docs:serve": "npm run docs:build -- -s", "docs:watch": "npm run docs:build -- -s -w", "format": "prettier --single-quote --write projects/**/*.ts", "copy:readme": "cpr README.md dist/lib/README.md --overwrite", - "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" + "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", + "contributer": "git shortlog -s 9.0.0..HEAD" }, "private": true, "dependencies": { diff --git a/projects/lib/ng-package.json b/projects/lib/ng-package.json index 862b3dbc..172910d2 100644 --- a/projects/lib/ng-package.json +++ b/projects/lib/ng-package.json @@ -5,5 +5,8 @@ "lib": { "languageLevel": ["dom", "es2017"], "entryFile": "src/public_api.ts" - } + }, + "whitelistedNonPeerDependencies": [ + "js-sha256" + ] } diff --git a/projects/lib/ng-package.prod.json b/projects/lib/ng-package.prod.json index f9389e9a..e063bb6d 100644 --- a/projects/lib/ng-package.prod.json +++ b/projects/lib/ng-package.prod.json @@ -3,5 +3,8 @@ "dest": "../../dist/lib", "lib": { "entryFile": "src/public_api.ts" - } + }, + "whitelistedNonPeerDependencies": [ + "js-sha256" + ] } diff --git a/projects/lib/package.json b/projects/lib/package.json index 81592ca1..003120d8 100644 --- a/projects/lib/package.json +++ b/projects/lib/package.json @@ -4,7 +4,7 @@ "author": { "name": "Manfred Steyer" }, - "version": "9.0.1", + "version": "9.1.0", "repository": "manfredsteyer/angular-oauth2-oidc", "dependencies": { "js-sha256": "^0.9.0"

    + + + + Protected + saveNoncesInLocalStorage + + +
    + Default value : false +
    +
    - +
    - +
    - +
    - +
    - +
    - +
    - +
    + Type : function + +
    Default value : () => {...} @@ -8270,7 +8355,7 @@

    -

    Set this to true to use HTTP BASIC auth for password flow

    +

    Set this to true to use HTTP BASIC auth for AJAX calls

    - +
    - +
    - +
    - +