- Notifications
You must be signed in to change notification settings - Fork0
oidc-provider module for Nest framework (node.js)
License
modernweb-pl/nest-oidc-provider
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
oidc-provider module forNest framework (node.js)
$ npm i --save nest-oidc-provider oidc-provider
OR
$ yarn add nest-oidc-provider oidc-provider
@Module({imports:[OidcModule.forRoot({issuer:'http://localhost:3000',path:'/oidc',oidc: ...// oidc-provider configuration})],})exportclassAppModule{}
You can pass afactory
function to customize the provider instantiation.
@Module({imports:[OidcModule.forRoot({issuer:'http://localhost:3000',path:'/oidc',factory:(issuer,config)=>{constprovider=newoidc.Provider(issuer,config);provider.on('server_error',(ctx,err)=>{...})returnprovider;},oidc: ...// oidc-provider configuration})],})exportclassAppModule{}
You can set theproxy
option totrue
to trust TLS offloading proxies.
For more info visit theoidc-provider
documentation:Trusting TLS offloading proxies
@Module({imports:[OidcModule.forRoot({issuer:'http://localhost:3000',path:'/oidc',proxy:true,// <= trust TLS offloading proxiesoidc:{...}})],})exportclassAppModule{}
@Module({imports:[OidcModule.forRootAsync({imports:[ConfigModule],useFactory:async(configService:ConfigService)=>({issuer:configService.get<string>('ISSUER'),path:configService.get<string>('OIDC_PATH'),oidc: ...// oidc-provider configuration}),inject:[ConfigService],}),],})exportclassAppModule{}
@Module({imports:[OidcModule.forRootAsync({useClass:OidcConfigService,}),],})exportclassAppModule{}
Note that in this example, theOidcConfigService
has to implement theOidcModuleOptionsFactory
interface, as shown below.
@Injectable()exportclassOidcConfigServiceimplementsOidcModuleOptionsFactory{constructor(privatereadonly @InjectConnection()conn:Connection){}createModuleOptions():OidcModuleOptions{return{issuer:'http://localhost:3001',path:'/oidc',oidc: ...,// oidc-provider configuration};}createAdapterFactory?():AdapterFactory{return(modelName:string)=>newMyAdapter(modelName,this.conn);}}
You can omit theAdapter
option of oidc-provider configuration if you implement thecreateAdapterFactory
method.
@Module({imports:[OidcModule.forRootAsync({imports:[OidcConfigModule],useExisting:OidcConfigService,}),],})exportclassAppModule{}
Returns an instance ofInteractionHelper
class.
@Get(':uid')@Render('login')asynclogin( @Oidc.Interaction()interaction:InteractionHelper){const{ prompt, params, uid}=awaitinteraction.details();constclient=awaitthis.provider.Client.find(params.client_idasstring);return{ prompt, client, params, uid, ...};}
TheInteractionHelper
class is just a helper that omits thereq
andres
parameters from the existing interaction methods inoidc-provider
.
interfaceInteractionHelper{details():Promise<InteractionDetails>;finished(result:InteractionResults,options?:{mergeWithLastSubmission?:boolean},):Promise<void>;result(result:InteractionResults,options?:{mergeWithLastSubmission?:boolean},):Promise<string>;}
Returns an instance ofKoaContextWithOIDC
.
@Get()asyncindex(@Oidc.Context()ctx:KoaContextWithOIDC){const{oidc:{ provider}}=ctx;constsession=awaitprovider.Session.get(ctx);//...}
A complete example can be found in theexample directory.
You are welcome to contribute to this project, just open a PR.
SeeCHANGELOG for more information.
This project isMIT licensed.
About
oidc-provider module for Nest framework (node.js)
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- TypeScript88.2%
- EJS10.2%
- JavaScript1.5%
- CSS0.1%