diff --git a/.gitignore b/.gitignore index 308f42e..0911462 100644 --- a/.gitignore +++ b/.gitignore @@ -32,7 +32,6 @@ speed-measure-plugin*.json .history/* # misc -/.angular/cache /.sass-cache /connect.lock /coverage @@ -55,4 +54,4 @@ debug.log /playwright-report/ /blob-report/ /playwright/.cache/ -/.vitest \ No newline at end of file +/.vitest diff --git a/README.md b/README.md index 6ed1e65..148dc8f 100644 --- a/README.md +++ b/README.md @@ -1,209 +1,17 @@ -# Angular Lib for OpenID Connect & OAuth2 +

+ OUTPOSTS +
OIDC-CLIENT-RX
+
+ status-badge +
+

-TODO +

ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications.

-![Build Status](https://github.com/damienbod/oidc-client-rx/actions/workflows/build.yml/badge.svg?branch=main) [![npm](https://img.shields.io/npm/v/oidc-client-rx.svg)](https://www.npmjs.com/package/oidc-client-rx) [![npm](https://img.shields.io/npm/dm/oidc-client-rx.svg)](https://www.npmjs.com/package/oidc-client-rx) [![npm](https://img.shields.io/npm/l/oidc-client-rx.svg)](https://www.npmjs.com/package/oidc-client-rx) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![Coverage Status](https://coveralls.io/repos/github/damienbod/oidc-client-rx/badge.svg?branch=main)](https://coveralls.io/github/damienbod/oidc-client-rx?branch=main) +## Quick Start -

- -

- -Secure your Angular app using the latest standards for OpenID Connect & OAuth2. Provides support for token refresh, all modern OIDC Identity Providers and more. - -## Acknowledgements - -This library is certified by OpenID Foundation. (RP Implicit and Config RP) - -

- -

- -## Features - -- [Code samples](https://oidc-client-rx.com/docs/samples/) for most of the common use cases -- Supports schematics via `ng add` support -- Supports all modern OIDC identity providers -- Supports OpenID Connect Code Flow with PKCE -- Supports Code Flow PKCE with Refresh tokens -- [Supports OpenID Connect Implicit Flow](http://openid.net/specs/openid-connect-implicit-1_0.html) -- [Supports OpenID Connect Session Management 1.0](http://openid.net/specs/openid-connect-session-1_0.html) -- [Supports RFC7009 - OAuth 2.0 Token Revocation](https://tools.ietf.org/html/rfc7009) -- [Supports RFC7636 - Proof Key for Code Exchange (PKCE)](https://tools.ietf.org/html/rfc7636) -- [Supports OAuth 2.0 Pushed authorisation requests (PAR) draft](https://tools.ietf.org/html/draft-ietf-oauth-par-06) -- Semantic releases -- Github actions -- Modern coding guidelines with prettier, husky -- Up to date documentation -- Implements OIDC validation as specified, complete client side validation for REQUIRED features -- Supports authentication using redirect or popup - -## Installation - -### Ng Add - -You can use the schematics and `ng add` the library. - -```shell -ng add oidc-client-rx -``` - -And answer the questions. A module will be created which encapsulates your configuration. - -![oidc-client-rx schematics](https://raw.githubusercontent.com/damienbod/oidc-client-rx/main/.github/oidc-client-rx-schematics-720.gif) - -### Npm / Yarn - -Navigate to the level of your `package.json` and type - -```shell - npm install oidc-client-rx -``` - -or with yarn - -```shell - yarn add oidc-client-rx -``` - -## Documentation - -[Read the docs here](https://oidc-client-rx.com/) - -## Samples - -[Explore the Samples here](https://oidc-client-rx.com/docs/samples/) - -## Quickstart - -For the example of the Code Flow. For further examples please check the [Samples](https://oidc-client-rx.com/docs/samples/) Section. - -> If you have done the installation with the schematics, these modules and files should be available already! - -### Configuration - -Import the `AuthModule` in your module. - -```ts -import { NgModule } from '@angular/core'; -import { AuthModule, LogLevel } from 'oidc-client-rx'; -// ... - -@NgModule({ - // ... - imports: [ - // ... - AuthModule.forRoot({ - config: { - authority: '', - redirectUrl: window.location.origin, - postLogoutRedirectUri: window.location.origin, - clientId: '', - scope: 'openid profile email offline_access', - responseType: 'code', - silentRenew: true, - useRefreshToken: true, - logLevel: LogLevel.Debug, - }, - }), - ], - // ... -}) -export class AppModule {} -``` - -And call the method `checkAuth()` from your `app.component.ts`. The method `checkAuth()` is needed to process the redirect from your Security Token Service and set the correct states. This method must be used to ensure the correct functioning of the library. - -```ts -import { Component, OnInit, inject } from '@angular/core'; -import { OidcSecurityService } from 'oidc-client-rx'; - -@Component({ - /*...*/ -}) -export class AppComponent implements OnInit { - private readonly oidcSecurityService = inject(OidcSecurityService); - - ngOnInit() { - this.oidcSecurityService - .checkAuth() - .subscribe((loginResponse: LoginResponse) => { - const { isAuthenticated, userData, accessToken, idToken, configId } = - loginResponse; - - /*...*/ - }); - } - - login() { - this.oidcSecurityService.authorize().subscribe(); - } - - logout() { - this.oidcSecurityService - .logoff() - .subscribe((result) => console.log(result)); - } -} -``` - -### Using the access token - -You can get the access token by calling the method `getAccessToken()` on the `OidcSecurityService` - -```ts -const token = this.oidcSecurityService.getAccessToken().subscribe(...); -``` - -And then you can use it in the HttpHeaders - -```ts -import { HttpHeaders } from '@ngify/http'; - -const token = this.oidcSecurityServices.getAccessToken().subscribe((token) => { - const httpOptions = { - headers: new HttpHeaders({ - Authorization: 'Bearer ' + token, - }), - }; -}); -``` - -You can use the built in interceptor to add the accesstokens to your request - -```ts -AuthModule.forRoot({ - config: { - // ... - secureRoutes: ['https://my-secure-url.com/', 'https://my-second-secure-url.com/'], - }, -}), -``` - -```ts - providers: [ - { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }, - ], -``` - -## Versions - -Current Version is Version 19.x - -- [Info about Version 18](https://github.com/damienbod/oidc-client-rx/tree/version-18) -- [Info about Version 17](https://github.com/damienbod/oidc-client-rx/tree/version-17) -- [Info about Version 16](https://github.com/damienbod/oidc-client-rx/tree/version-16) -- [Info about Version 15](https://github.com/damienbod/oidc-client-rx/tree/version-15) -- [Info about Version 14](https://github.com/damienbod/oidc-client-rx/tree/version-14) -- [Info about Version 13](https://github.com/damienbod/oidc-client-rx/tree/version-13) -- [Info about Version 12](https://github.com/damienbod/oidc-client-rx/tree/version-12) -- [Info about Version 11](https://github.com/damienbod/oidc-client-rx/tree/version-11) -- [Info about Version 10](https://github.com/damienbod/oidc-client-rx/tree/version-10) +@TODO Coming Soon ## License [MIT](https://choosealicense.com/licenses/mit/) - -## Authors - -- [@DamienBod](https://www.github.com/damienbod) -- [@FabianGosebrink](https://www.github.com/FabianGosebrink) diff --git a/assets/logo-512.png b/assets/logo-512.png new file mode 100644 index 0000000..c8d9640 Binary files /dev/null and b/assets/logo-512.png differ diff --git a/licenses/angular-auth-oidc-client.LICENSE b/licenses/angular-auth-oidc-client.LICENSE new file mode 100644 index 0000000..899db84 --- /dev/null +++ b/licenses/angular-auth-oidc-client.LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 damienbod + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. diff --git a/licenses/angular.LICENSE b/licenses/angular.LICENSE new file mode 100644 index 0000000..48adc1e --- /dev/null +++ b/licenses/angular.LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2010-2025 Google LLC. https://angular.dev/license + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. diff --git a/playwright.config.ts b/playwright.config.ts index a05d8b5..9161316 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,5 +1,7 @@ import { defineConfig, devices } from '@playwright/test'; +// TODO + /** * Read environment variables from file. * https://github.com/motdotla/dotenv