diff --git a/docs-src/custom-date-time-provider.md b/docs-src/custom-date-time-provider.md new file mode 100644 index 00000000..b4c57583 --- /dev/null +++ b/docs-src/custom-date-time-provider.md @@ -0,0 +1,45 @@ +# Custom DateTimeProvider + +If your Identity Provider's clock is not synchronized, the validation of the token could fail. +If the deviation is only some seconds, you can use the `AuthConfig.clockSkewInSec` setting to allow a bigger time window deviation. + +However, you may need to adjust the base time, that is used for the token validation and make sure, that the `AuthConfig.clockSkewInSec` is still a small reasonable number, then you can implement a custom `DateTimeProvider`. + +To do so, create a new service that derives from `DateTimeProvider`: + +```typescript +export class MyCustomDateTimeProvider extends DateTimeProvider { + now(): number { + // Return your custom now. + return Date.now(); + } + + new(): Date { + // Return your custom new Date(). + return new Date(); + } +} +``` + +Then, override the provider via dependency injection in your application: + +```typescript +@NgModule({ + imports: [ + // etc. + OAuthModule.forRoot() + ], + providers: [ + { provide: DateTimeProvider, useClass: MyCustomDateTimeProvider } // <- add this + ], + declarations: [ + AppComponent, + // etc. + ], + bootstrap: [ + AppComponent + ] +}) +export class AppModule { +} +``` diff --git a/docs/additional-documentation/custom-datetimeprovider.html b/docs/additional-documentation/custom-datetimeprovider.html new file mode 100644 index 00000000..287541e6 --- /dev/null +++ b/docs/additional-documentation/custom-datetimeprovider.html @@ -0,0 +1,134 @@ + + +
+ + +If your Identity Provider's clock is not synchronized, the validation of the token could fail.
+If the deviation is only some seconds, you can use the AuthConfig.clockSkewInSec
setting to allow a bigger time window deviation.
However, you may need to adjust the base time, that is used for the token validation and make sure, that the AuthConfig.clockSkewInSec
is still a small reasonable number, then you can implement a custom DateTimeProvider
.
To do so, create a new service that derives from DateTimeProvider
:
export class MyCustomDateTimeProvider extends DateTimeProvider {
+ now(): number {
+ // Return your custom now.
+ return Date.now();
+ }
+
+ new(): Date {
+ // Return your custom new Date().
+ return new Date();
+ }
+}
Then, override the provider via dependency injection in your application:
+@NgModule({
+ imports: [
+ // etc.
+ OAuthModule.forRoot()
+ ],
+ providers: [
+ { provide: DateTimeProvider, useClass: MyCustomDateTimeProvider } // <- add this
+ ],
+ declarations: [
+ AppComponent,
+ // etc.
+ ],
+ bootstrap: [
+ AppComponent
+ ]
+})
+export class AppModule {
+}
+
+ projects/lib/src/date-time-provider.ts
+
+ Methods+ |
+
+ + | +
+ + + + Abstract + new + + + + | +
+
+ new()
+ |
+
+ Defined in projects/lib/src/date-time-provider.ts:5
+ |
+
+
+
+ Returns :
+ Date
+
+ |
+
+ + + + Abstract + now + + + + | +
+
+ now()
+ |
+
+ Defined in projects/lib/src/date-time-provider.ts:4
+ |
+
+
+
+ Returns :
+ number
+
+ |
+
import { Injectable } from '@angular/core';
+
+export abstract class DateTimeProvider {
+ abstract now(): number;
+ abstract new(): Date;
+}
+
+@Injectable()
+export class SystemDateTimeProvider extends DateTimeProvider {
+ now(): number {
+ return Date.now();
+ }
+
+ new(): Date {
+ return new Date();
+ }
+}
+
+ constructor(ngZone: NgZone, http: HttpClient, storage: OAuthStorage, tokenValidationHandler: ValidationHandler, config: AuthConfig, urlHelper: UrlHelperService, logger: OAuthLogger, crypto: HashHandler, document: any)
+constructor(ngZone: NgZone, http: HttpClient, storage: OAuthStorage, tokenValidationHandler: ValidationHandler, config: AuthConfig, urlHelper: UrlHelperService, logger: OAuthLogger, crypto: HashHandler, document: any, dateTimeService: DateTimeProvider)
DateTimeProvider
+ +
+ projects/lib/src/date-time-provider.ts
+
+
+ DateTimeProvider
+
+ Methods+ |
+
+ + | +
+ + + + new + + + + | +
+new()
+ |
+
+ Defined in projects/lib/src/date-time-provider.ts:14
+ |
+
+
+
+ Returns :
+ Date
+
+ |
+
+ + + + now + + + + | +
+now()
+ |
+
+ Defined in projects/lib/src/date-time-provider.ts:10
+ |
+
+
+
+ Returns :
+ number
+
+ |
+
+ + + + Abstract + new + + + + | +
+
+ new()
+ |
+
+ Inherited from
+ DateTimeProvider
+ |
+
+ Defined in
+ DateTimeProvider:5
+ |
+
+
+
+ Returns :
+ Date
+
+ |
+
+ + + + Abstract + now + + + + | +
+
+ now()
+ |
+
+ Inherited from
+ DateTimeProvider
+ |
+
+ Defined in
+ DateTimeProvider:4
+ |
+
+
+
+ Returns :
+ number
+
+ |
+
import { Injectable } from '@angular/core';
+
+export abstract class DateTimeProvider {
+ abstract now(): number;
+ abstract new(): Date;
+}
+
+@Injectable()
+export class SystemDateTimeProvider extends DateTimeProvider {
+ now(): number {
+ return Date.now();
+ }
+
+ new(): Date {
+ return new Date();
+ }
+}
+
+ import { OAuthStorage, OAuthLogger } from './types';
+ import { DateTimeProvider, SystemDateTimeProvider } from './date-time-provider';
+import { OAuthStorage, OAuthLogger } from './types';
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
@@ -215,7 +216,8 @@
provide: HTTP_INTERCEPTORS,
useClass: DefaultOAuthInterceptor,
multi: true
- }
+ },
+ { provide: DateTimeProvider, useClass: SystemDateTimeProvider }
]
};
}
diff --git a/docs/overview.html b/docs/overview.html
index 2c7f570c..7a837952 100644
--- a/docs/overview.html
+++ b/docs/overview.html
@@ -87,7 +87,7 @@
- 4 Injectables
+ 5 Injectables
19 Classes
+20 Classes