Maison >interface Web >js tutoriel >Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Joseph Gordon-Levitt
Joseph Gordon-Levittoriginal
2025-02-16 11:09:10452parcourir

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Cet article a été initialement publié sur Okta Developer Blog. Merci de soutenir les partenaires qui rendent le point de point possible.

Angular (anciennement appelé Angular 2.0) devient rapidement l'un des moyens les plus puissants de construire une application moderne à une seule page. Une force de base est l'accent mis par Angular sur la construction de composants réutilisables, qui vous aident à découpler les diverses préoccupations de votre application. Prenez l'authentification, par exemple: il peut être douloureux à construire, mais une fois que vous l'avez enveloppé dans un composant, la logique d'authentification peut être réutilisée tout au long de votre application.

La CLI angulaire facilite l'échafaudage de nouveaux composants, et même des projets entiers. Si vous n'avez pas utilisé la CLI angulaire pour générer rapidement du code angulaire, vous êtes pour un régal!

Dans cet exemple, vous construirez une application Web simple avec Angular CLI, un outil de développement angulaire. Vous allez créer une application avec des fonctionnalités de recherche et de modification, puis ajouter l'authentification.

Les plats clés

  • échafaudage rapidement et exécutez une nouvelle application angulaire en utilisant une CLI angulaire, améliorant l'efficacité du développement.
  • Intégrer l'authentification de manière transparente en configurant une application OpenID Connect avec OKTA, assurant une gestion sécurisée des utilisateurs.
  • Améliorer l'expérience utilisateur en ajoutant des fonctionnalités de recherche et modifiez, en utilisant le puissant système de composants d'Angular.
  • Utiliser le routage pour gérer la navigation au sein de l'application, permettant un flux d'utilisateur plus lisse et une meilleure gestion de l'État.
  • Mettre en œuvre la validation du formulaire pour assurer l'intégrité des données et fournir des commentaires, améliorant la convivialité globale.
  • Secure Application Routes utilisant Authguard d'Angular pour protéger les informations sensibles et appliquer l'authentification.

Créer une application angulaire

CONSEIL: Si vous souhaitez sauter la construction de l'application angulaire et aller à l'ajustement de l'authentification, vous pouvez cloner mon projet NG-Demo, puis passer à l'application Créer une OpenId Connect dans la section Okta.

<span>git clone https://github.com/mraible/ng-demo.git
</span>

ce dont vous aurez besoin

  • environ 20 minutes
  • un éditeur de texte préféré ou IDE. Je recommande Intellij Idea
  • Node.js et NPM installés. Je recommande d'utiliser NVM
  • CLI angulaire installé. Si vous n'avez pas installé CLI angulaire, installez-le à l'aide de NPM Install -g @ Angular / CLI

Créez un nouveau projet en utilisant la nouvelle commande NG:

ng new ng-demo

Cela créera un projet NG-Demo et exécutera l'installation de NPM. Cela devrait prendre environ une minute pour terminer, mais cela pourrait varier en fonction de votre vitesse de connexion.

<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
  create .editorconfig
  create README.md
  create src/app/app.component.css
  create src/app/app.component.html
  create src/app/app.component.spec.ts
  create src/app/app.component.ts
  create src/app/app.module.ts
  create src/assets/.gitkeep
  create src/environments/environment.prod.ts
  create src/environments/environment.ts
  create src/favicon.ico
  create src/index.html
  create src/main.ts
  create src/polyfills.ts
  create src/styles.css
  create src/test.ts
  create src/tsconfig.app.json
  create src/tsconfig.spec.json
  create src/typings.d.ts
  create .angular-cli.json
  create e2e/app.e2e-spec.ts
  create e2e/app.po.ts
  create e2e/tsconfig.e2e.json
  create .gitignore
  create karma.conf.js
  create package.json
  create protractor.conf.js
  create tsconfig.json
  create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>

Vous pouvez voir quelle version de la CLI angulaire que vous utilisez avec ng --version.

$ ng <span>--version
</span>    _                      _                 ____ _     ___
   / <span>\   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
</span>  / △ <span>\ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | |      | |___| |___ | |
</span>/_/   <span>\_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
</span>               <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64

Exécutez votre application angulaire

Le projet est configuré avec WebPack Dev Server. Pour le démarrer, assurez-vous que vous êtes dans le répertoire NG-Demo, puis exécutez:

<span>git clone https://github.com/mraible/ng-demo.git
</span>

Vous devriez voir un écran comme celui ci-dessous sur http: // localhost: 4200.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Vous pouvez vous assurer que les tests de votre nouveau projet réussissent, exécutez NG Test:

ng new ng-demo

Ajouter une fonction de recherche

Pour ajouter une fonction de recherche, ouvrez le projet dans un IDE ou votre éditeur de texte préféré. Pour Intellij Idea, utilisez un fichier> nouveau projet> Web statique et pointez le répertoire NG-Demo.

Dans une fenêtre de terminal, CD dans le répertoire de votre projet et exécutez la commande suivante. Cela créera un composant de recherche.

<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
  create .editorconfig
  create README.md
  create src/app/app.component.css
  create src/app/app.component.html
  create src/app/app.component.spec.ts
  create src/app/app.component.ts
  create src/app/app.module.ts
  create src/assets/.gitkeep
  create src/environments/environment.prod.ts
  create src/environments/environment.ts
  create src/favicon.ico
  create src/index.html
  create src/main.ts
  create src/polyfills.ts
  create src/styles.css
  create src/test.ts
  create src/tsconfig.app.json
  create src/tsconfig.spec.json
  create src/typings.d.ts
  create .angular-cli.json
  create e2e/app.e2e-spec.ts
  create e2e/app.po.ts
  create e2e/tsconfig.e2e.json
  create .gitignore
  create karma.conf.js
  create package.json
  create protractor.conf.js
  create tsconfig.json
  create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>

Ouvrir Src / App / Search / Search.Component.html et remplacer son HTML par défaut par ce qui suit:

$ ng <span>--version
</span>    _                      _                 ____ _     ___
   / <span>\   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
</span>  / △ <span>\ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | |      | |___| |___ | |
</span>/_/   <span>\_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
</span>               <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64

La documentation du routeur pour Angular fournit les informations dont vous avez besoin pour configurer un itinéraire vers la recherche de recherche que vous venez de générer. Voici un résumé rapide:

dans src / app / app.module.ts, ajoutez une constante d'approutes et importez-la dans @ngmodule:

ng serve

dans src / app / app ....html, ajustez le contenu d'espace réservé et ajoutez une balise pour afficher les itinéraires.

$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>

Maintenant que vous avez la configuration de routage, vous pouvez continuer à écrire la fonction de recherche.

Si vous avez encore NG Service en cours d'exécution, votre navigateur doit actualiser automatiquement. Sinon, accédez à http: // localhost: 4200. Vous verrez probablement un écran vierge. Ouvrez votre console JavaScript et vous verrez le problème.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Pour résoudre ce problème, ouvrez Src / App / App.Module.ts et ajouter FormsModule comme importation dans @ngmodule:

$ ng g component search
installing component
  create src/app/search/search.component.css
  create src/app/search/search.component.html
  create src/app/search/search.component.spec.ts
  create src/app/search/search.component.ts
  update src/app/app.module.ts

Maintenant, vous devriez voir le formulaire de recherche.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Si vous souhaitez ajouter CSS pour ces composants, ouvrez SRC / App / Search / Search.Component.css et ajoutez des CS. Par exemple:

<span><span><span><h2</span>></span>Search<span><span></h2</span>></span>
</span><span><span><span><form</span>></span>
</span>  <span><span><span><input</span> type<span>="search"</span> name<span>="query"</span> [(ngModel)]<span>="query"</span> (keyup.enter)<span>="search()"</span>></span>
</span>  <span><span><span><button</span> type<span>="button"</span> (click)<span>="search()"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></form</span>></span>
</span><span><span><span><pre</span>></span>{{searchResults | json}}<span><span></pre</span>></span>
</span>

Cette section vous a montré comment générer un nouveau composant sur une application angulaire de base avec une CLI angulaire. La section suivante vous montrera comment créer et utiliser un fichier JSON et localStorage pour créer une fausse API.

Pour obtenir des résultats de recherche, créez un service de recherche qui fait des demandes HTTP à un fichier JSON. Commencez par générer un nouveau service.

<span>import { Routes, RouterModule } from '@angular/router';
</span>
<span>const appRoutes: Routes = [
</span>  <span>{path: 'search', component: SearchComponent},
</span>  <span>{path: '', redirectTo: '/search', pathMatch: 'full'}
</span><span>];
</span>
<span><span>@NgModule</span>({
</span>  <span>...
</span>  imports<span>: [
</span>    <span>...
</span>    RouterModule<span>.forRoot(appRoutes)
</span>  <span>]
</span>  <span>...
</span><span>})
</span><span>export class AppModule { }
</span>

Déplacez la recherche générée.service.ts et son test vers l'application / partager / search. Vous devrez créer ce répertoire.

<span><span><span><h1</span>></span>Welcome to {{title}}!<span><span></h1</span>></span>
</span><span><!-- Routed views go here -->
</span><span><span><span><router-outlet</span>></span><span><span></router-outlet</span>></span>
</span>

Créer Src / Assets / Data / People.json pour tenir vos données.

<span>import { FormsModule } from '@angular/forms';
</span>
<span><span>@NgModule</span>({
</span>  <span>...
</span>  imports<span>: [
</span>    <span>...
</span>    FormsModule
  <span>]
</span>  <span>...
</span><span>})
</span><span>export class AppModule { }
</span>

Modifier SRC / App / Shared / Search / Search.Service.ts et fournir HTTP comme dépendance dans son constructeur. Dans ce même fichier, créez une méthode getall () pour rassembler toutes les personnes. Définissez également les classes d'adresse et de personne à laquelle JSON sera rassemblée.

<span><span>:host</span> {
</span>  <span>display: block;
</span>  <span>padding: 0 20px;
</span><span>}
</span>

Pour rendre ces classes disponibles pour la consommation par vos composants, modifiez Src / App / Shared / Index.ts et ajoutez ce qui suit:

<span>git clone https://github.com/mraible/ng-demo.git
</span>

La raison de la création de ce fichier est que vous pouvez importer plusieurs classes sur une seule ligne plutôt que d'avoir à importer chaque classe individuelle sur des lignes séparées.

Dans SRC / App / Search / Search.Component.ts, ajoutez des importations pour ces classes.

ng new ng-demo

Vous pouvez désormais ajouter des variables de requête et de recherche. Pendant que vous y êtes, modifiez le constructeur pour injecter le service de recherche.

<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
  create .editorconfig
  create README.md
  create src/app/app.component.css
  create src/app/app.component.html
  create src/app/app.component.spec.ts
  create src/app/app.component.ts
  create src/app/app.module.ts
  create src/assets/.gitkeep
  create src/environments/environment.prod.ts
  create src/environments/environment.ts
  create src/favicon.ico
  create src/index.html
  create src/main.ts
  create src/polyfills.ts
  create src/styles.css
  create src/test.ts
  create src/tsconfig.app.json
  create src/tsconfig.spec.json
  create src/typings.d.ts
  create .angular-cli.json
  create e2e/app.e2e-spec.ts
  create e2e/app.po.ts
  create e2e/tsconfig.e2e.json
  create .gitignore
  create karma.conf.js
  create package.json
  create protractor.conf.js
  create tsconfig.json
  create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>

Implémentez ensuite une méthode Search () pour appeler la méthode getall () du service.

$ ng <span>--version
</span>    _                      _                 ____ _     ___
   / <span>\   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
</span>  / △ <span>\ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | |      | |___| |___ | |
</span>/_/   <span>\_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
</span>               <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64

À ce stade, vous verrez probablement le message suivant dans la console de votre navigateur.

ng serve

Pour corriger l'erreur «No Provider» d'en haut, mettez à jour app.module.ts pour importer le service de recherche et ajouter le service à la liste des fournisseurs. Étant donné que SearchService dépend de HTTP, vous devrez également importer du httpmodule.

$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>

Cliquez maintenant sur le bouton de recherche devrait fonctionner. Pour rendre les résultats plus beaux, supprimez la balise

 et remplacez-la par un 
dans Src / App / Search / Search.Component.html.
$ ng g component search
installing component
  create src/app/search/search.component.css
  create src/app/search/search.component.html
  create src/app/search/search.component.spec.ts
  create src/app/search/search.component.ts
  update src/app/app.module.ts

Ensuite, ajoutez des CSS supplémentaires dans SRC / App / Search / Search.Component.css pour améliorer sa mise en page de table.

<span><span><span><h2</span>></span>Search<span><span></h2</span>></span>
</span><span><span><span><form</span>></span>
</span>  <span><span><span><input</span> type<span>="search"</span> name<span>="query"</span> [(ngModel)]<span>="query"</span> (keyup.enter)<span>="search()"</span>></span>
</span>  <span><span><span><button</span> type<span>="button"</span> (click)<span>="search()"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></form</span>></span>
</span><span><span><span><pre</span>></span>{{searchResults | json}}<span><span></pre</span>></span>
</span>

Maintenant, les résultats de recherche semblent mieux.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Mais attendez, vous n'avez toujours pas de fonctionnalité de recherche! Pour ajouter une fonction de recherche, ajoutez une méthode Search () à SearchService.

<span>import { Routes, RouterModule } from '@angular/router';
</span>
<span>const appRoutes: Routes = [
</span>  <span>{path: 'search', component: SearchComponent},
</span>  <span>{path: '', redirectTo: '/search', pathMatch: 'full'}
</span><span>];
</span>
<span><span>@NgModule</span>({
</span>  <span>...
</span>  imports<span>: [
</span>    <span>...
</span>    RouterModule<span>.forRoot(appRoutes)
</span>  <span>]
</span>  <span>...
</span><span>})
</span><span>export class AppModule { }
</span>

Ensuite, Refactor SearchComponent pour appeler cette méthode avec sa variable de requête.

<span><span><span><h1</span>></span>Welcome to {{title}}!<span><span></h1</span>></span>
</span><span><!-- Routed views go here -->
</span><span><span><span><router-outlet</span>></span><span><span></router-outlet</span>></span>
</span>

Les résultats de recherche désormais seront filtrés par la valeur de requête que vous tapez.

Cette section vous a montré comment récupérer et afficher les résultats de recherche. La section suivante s'appuie sur ceci et montre comment modifier et enregistrer un enregistrement.

Ajouter une fonction de modification

Modifiez Src / App / Search / Search.Component.html pour ajouter un lien pour éditer une personne.

<span>import { FormsModule } from '@angular/forms';
</span>
<span><span>@NgModule</span>({
</span>  <span>...
</span>  imports<span>: [
</span>    <span>...
</span>    FormsModule
  <span>]
</span>  <span>...
</span><span>})
</span><span>export class AppModule { }
</span>

Exécutez la commande suivante pour générer un editComponent.

<span><span>:host</span> {
</span>  <span>display: block;
</span>  <span>padding: 0 20px;
</span><span>}
</span>

Ajoutez un itinéraire pour ce composant dans src / app / app.module.ts:

$ ng g <span>service search
</span>installing <span>service
</span>  create src/app/search.service.spec.ts
  create src/app/search.service.ts
  WARNING Service is generated but not provided, it must be provided to be used

Mettez à jour SRC / APP / EDIT / EDIT ..COMPOINT.HTML Pour afficher un formulaire modifiable. Vous remarquez peut-être que j'ai ajouté des attributs d'identification à la plupart des éléments. Il s'agit de faciliter les choses lors de l'écriture de tests d'intégration avec le protracteur.

<span>mkdir -p src/app/shared/search
</span><span>mv src/app/search.service.* src/app/shared/search/.
</span>

Modifier EditComponent pour importer des classes de modèle et de service et d'utiliser le service de recherche pour obtenir des données.

<span>[
</span>  <span>{
</span>    <span>"id": 1,
</span>    <span>"name": "Peyton Manning",
</span>    <span>"phone": "(303) 567-8910",
</span>    <span>"address": {
</span>      <span>"street": "1234 Main Street",
</span>      <span>"city": "Greenwood Village",
</span>      <span>"state": "CO",
</span>      <span>"zip": "80111"
</span>    <span>}
</span>  <span>},
</span>  <span>{
</span>    <span>"id": 2,
</span>    <span>"name": "Demaryius Thomas",
</span>    <span>"phone": "(720) 213-9876",
</span>    <span>"address": {
</span>      <span>"street": "5555 Marion Street",
</span>      <span>"city": "Denver",
</span>      <span>"state": "CO",
</span>      <span>"zip": "80202"
</span>    <span>}
</span>  <span>},
</span>  <span>{
</span>    <span>"id": 3,
</span>    <span>"name": "Von Miller",
</span>    <span>"phone": "(917) 323-2333",
</span>    <span>"address": {
</span>      <span>"street": "14 Mountain Way",
</span>      <span>"city": "Vail",
</span>      <span>"state": "CO",
</span>      <span>"zip": "81657"
</span>    <span>}
</span>  <span>}
</span><span>]
</span>

Modifiez la recherche pour contenir des fonctions pour trouver une personne par son identifiant et les enregistrer. Pendant que vous y êtes, modifiez la méthode Search () pour être consciente des objets mis à jour dans localStorage.

<span>import { Injectable } from '@angular/core';
</span><span>import { Http, Response } from '@angular/http';
</span><span>import 'rxjs/add/operator/map';
</span>
<span><span>@Injectable</span>()
</span><span>export class SearchService {
</span>  <span>constructor(private http: Http) {}
</span>
  <span>getAll() {
</span>    <span>return this.http.get('assets/data/people.json')
</span>        <span>.map((res: Response) => res.json());
</span>  <span>}
</span><span>}
</span>
<span>export class Address {
</span>  street<span>: string;
</span>  city<span>: string;
</span>  state<span>: string;
</span>  zip<span>: string;
</span>
  <span>constructor(obj?: any) {
</span>    <span>this.street = obj && obj.street || null;
</span>    <span>this.city = obj && obj.city || null;
</span>    <span>this.state = obj && obj.state || null;
</span>    <span>this.zip = obj && obj.zip || null;
</span>  <span>}
</span><span>}
</span>
<span>export class Person {
</span>  id<span>: number;
</span>  name<span>: string;
</span>  phone<span>: string;
</span>  address<span>: Address;
</span>
  <span>constructor(obj?: any) {
</span>    <span>this.id = obj && Number(obj.id) || null;
</span>    <span>this.name = obj && obj.name || null;
</span>    <span>this.phone = obj && obj.phone || null;
</span>    <span>this.address = obj && obj.address || null;
</span>  <span>}
</span><span>}
</span>

Vous pouvez ajouter CSS à src / app / edit / edit.component.css si vous souhaitez améliorer le formulaire un peu meilleur.

<span>export * from './search/search.service';
</span>

À ce stade, vous devriez être en mesure de rechercher une personne et de mettre à jour ses informations.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Le

dans src / app / edit / edit.component.html appelle une fonction Save () pour mettre à jour les données d'une personne. Vous avez déjà implémenté cela ci-dessus. La fonction appelle une fonction gotolist () qui ajoute le nom de la personne à l'URL lors de la renvoyer l'utilisateur à l'écran de recherche.
<span>git clone https://github.com/mraible/ng-demo.git
</span>

Étant donné que la recherche de recherche n'exécute pas automatiquement une recherche lorsque vous exécutez cette URL, ajoutez la logique suivante pour le faire dans son constructeur.

ng new ng-demo

Vous voudrez implémenter OnDestroy et définir la méthode Ngondestroy pour nettoyer cet abonnement.

<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
  create .editorconfig
  create README.md
  create src/app/app.component.css
  create src/app/app.component.html
  create src/app/app.component.spec.ts
  create src/app/app.component.ts
  create src/app/app.module.ts
  create src/assets/.gitkeep
  create src/environments/environment.prod.ts
  create src/environments/environment.ts
  create src/favicon.ico
  create src/index.html
  create src/main.ts
  create src/polyfills.ts
  create src/styles.css
  create src/test.ts
  create src/tsconfig.app.json
  create src/tsconfig.spec.json
  create src/typings.d.ts
  create .angular-cli.json
  create e2e/app.e2e-spec.ts
  create e2e/app.po.ts
  create e2e/tsconfig.e2e.json
  create .gitignore
  create karma.conf.js
  create package.json
  create protractor.conf.js
  create tsconfig.json
  create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>

Après avoir apporté toutes ces modifications, vous devriez être en mesure de rechercher / modifier / mettre à jour les informations d'une personne. Si cela fonctionne - beau travail!

Validation du formulaire

Une chose que vous pourriez remarquer est que vous pouvez effacer n'importe quel élément d'entrée dans le formulaire et l'enregistrer. À tout le moins, le champ de nom devrait être nécessaire. Sinon, il n'y a rien sur lequel cliquer dans les résultats de la recherche.

Pour rendre le nom requis, modifiez edit.component.html pour ajouter un attribut requis au nom .

$ ng <span>--version
</span>    _                      _                 ____ _     ___
   / <span>\   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
</span>  / △ <span>\ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | |      | |___| |___ | |
</span>/_/   <span>\_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
</span>               <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64

Vous devrez également tout envelopper dans un élément

. Ajoutez après la balise

et fermez-la avant le dernier . Vous devrez également ajouter un gestionnaire (ngSubmit) dans le formulaire et modifier le bouton Enregistrer pour être un bouton de soumission régulier.
ng serve

Après avoir apporté ces modifications, tout champ avec un attribut requis sera nécessaire.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Dans cette capture d'écran, vous remarquerez peut-être que les champs d'adresse sont vides. Cela s'explique par l'erreur dans votre console.

$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>

Pour corriger, ajoutez un attribut de nom à tous les champs d'adresse. Par exemple:

$ ng g component search
installing component
  create src/app/search/search.component.css
  create src/app/search/search.component.html
  create src/app/search/search.component.spec.ts
  create src/app/search/search.component.ts
  update src/app/app.module.ts

Les valeurs doivent désormais s'afficher dans tous les champs et le nom doit être nécessaire.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Si vous souhaitez fournir vos propres messages de validation au lieu de compter sur le navigateur, complétez les étapes suivantes:

  1. supprimer ngnativevalidate et ajouter # editform = "ngform" à l'élément .
  2. Ajouter # name = "ngModel" à l'élément .
  3. Ajouter [désactivé] = "! Editform.form.valid" au bouton Enregistrer .
  4. Ajoutez ce qui suit sous le champ Nom pour afficher une erreur de validation.
<span><span><span><h2</span>></span>Search<span><span></h2</span>></span>
</span><span><span><span><form</span>></span>
</span>  <span><span><span><input</span> type<span>="search"</span> name<span>="query"</span> [(ngModel)]<span>="query"</span> (keyup.enter)<span>="search()"</span>></span>
</span>  <span><span><span><button</span> type<span>="button"</span> (click)<span>="search()"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></form</span>></span>
</span><span><span><span><pre</span>></span>{{searchResults | json}}<span><span></pre</span>></span>
</span>

Pour en savoir plus sur les formulaires et la validation, voir la documentation des formes angulaires.

Créez une application OpenID Connect dans Okta

OpenID Connect (OIDC) est construit sur le dessus du protocole OAuth 2.0. Il permet aux clients de vérifier l'identité de l'utilisateur et, ainsi que d'obtenir leurs informations de profil de base. Pour en savoir plus, voir https://openid.net/connect.

Pour intégrer OKTA pour l'authentification des utilisateurs, vous devrez d'abord vous inscrire et créer une application OIDC.

Connectez-vous sur votre compte Okta, ou créez-en un si vous n'en avez pas. Accédez aux applications et cliquez sur le bouton Ajouter de l'application. Sélectionnez Spa et cliquez sur Suivant. À la page suivante, spécifiez http: // localhost: 4200 comme URI de base, URI de redirection de connexion et URI de redirection de déconnexion. Cliquez sur DID et vous devriez voir des paramètres comme les suivants.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Installez le projet de Manfred Steyer pour ajouter OAuth 2 et OpenId Connect Pouest à l'aide de NPM.

<span>git clone https://github.com/mraible/ng-demo.git
</span>

Modifiez SRC / APP / APP ..COMPONENT.TS Pour importer OAuthService et configurez votre application pour utiliser les paramètres de votre application OKTA.

ng new ng-demo

Créez Src / App / Home / Home.Component.ts et configurez-le pour avoir des boutons de connexion et de déconnexion.

<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
  create .editorconfig
  create README.md
  create src/app/app.component.css
  create src/app/app.component.html
  create src/app/app.component.spec.ts
  create src/app/app.component.ts
  create src/app/app.module.ts
  create src/assets/.gitkeep
  create src/environments/environment.prod.ts
  create src/environments/environment.ts
  create src/favicon.ico
  create src/index.html
  create src/main.ts
  create src/polyfills.ts
  create src/styles.css
  create src/test.ts
  create src/tsconfig.app.json
  create src/tsconfig.spec.json
  create src/typings.d.ts
  create .angular-cli.json
  create e2e/app.e2e-spec.ts
  create e2e/app.po.ts
  create e2e/tsconfig.e2e.json
  create .gitignore
  create karma.conf.js
  create package.json
  create protractor.conf.js
  create tsconfig.json
  create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>

Créer src / app / shared / auth / auth.guard.service.ts pour accéder à la composante à domicile si l'utilisateur n'est pas authentifié.

$ ng <span>--version
</span>    _                      _                 ____ _     ___
   / <span>\   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
</span>  / △ <span>\ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | |      | |___| |___ | |
</span>/_/   <span>\_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
</span>               <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64

Exporter authcuard dans src / partage / index.ts:

ng serve

Importez l'oauthmodule dans src / app / app.module.ts, configurez la nouvelle composante à domicile et verrouillez les routes / recherche et / modifiez avec l'Authcuard.

$ ng <span>test
</span><span>...
</span>Chrome <span>60.0.3112 (Mac OS X 10.12.6): Executed 3 of 3 SUCCESS (0.239 secs / 0.213 secs)
</span>

Après avoir apporté ces modifications, vous devriez pouvoir exécuter NG servir et voir un bouton de connexion.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Cliquez sur le bouton de connexion et connectez-vous avec l'une des personnes configurées dans votre application Okta.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Après vous être connecté, vous pourrez cliquer sur Rechercher et afficher les informations des gens.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

si cela fonctionne - super! Si vous souhaitez créer votre propre formulaire de connexion dans votre application, continuez à lire pour apprendre à utiliser le SDK Okta Auth avec OAuthService.

Authentification avec le sdk okta auth

Le SDK Okta Auth se construit en plus de l'API d'authentification d'Otka et de l'API OAuth 2.0 pour vous permettre de créer une expérience de connexion entièrement de marque en utilisant JavaScript.

l'installez à l'aide de NPM:

$ ng g component search
installing component
  create src/app/search/search.component.css
  create src/app/search/search.component.html
  create src/app/search/search.component.spec.ts
  create src/app/search/search.component.ts
  update src/app/app.module.ts

Ajoutez une référence au fichier JavaScript principal de cette bibliothèque dans .angular-cli.json:

<span><span><span><h2</span>></span>Search<span><span></h2</span>></span>
</span><span><span><span><form</span>></span>
</span>  <span><span><span><input</span> type<span>="search"</span> name<span>="query"</span> [(ngModel)]<span>="query"</span> (keyup.enter)<span>="search()"</span>></span>
</span>  <span><span><span><button</span> type<span>="button"</span> (click)<span>="search()"</span>></span>Search<span><span></button</span>></span>
</span><span><span><span></form</span>></span>
</span><span><span><span><pre</span>></span>{{searchResults | json}}<span><span></pre</span>></span>
</span>

Les composants de cette section utilisent des classes Bootstrap CSS. Installez le bootstrap 4.

<span>import { Routes, RouterModule } from '@angular/router';
</span>
<span>const appRoutes: Routes = [
</span>  <span>{path: 'search', component: SearchComponent},
</span>  <span>{path: '', redirectTo: '/search', pathMatch: 'full'}
</span><span>];
</span>
<span><span>@NgModule</span>({
</span>  <span>...
</span>  imports<span>: [
</span>    <span>...
</span>    RouterModule<span>.forRoot(appRoutes)
</span>  <span>]
</span>  <span>...
</span><span>})
</span><span>export class AppModule { }
</span>

Modifiez Src / Styles.css pour ajouter une référence au fichier CSS de bootstrap.

<span><span><span><h1</span>></span>Welcome to {{title}}!<span><span></h1</span>></span>
</span><span><!-- Routed views go here -->
</span><span><span><span><router-outlet</span>></span><span><span></router-outlet</span>></span>
</span>

Mettez à jour SRC / APP / APP.COMPONNENT.HTML Pour utiliser des classes bootstrap pour son système Navbar et Grid.

<span>import { FormsModule } from '@angular/forms';
</span>
<span><span>@NgModule</span>({
</span>  <span>...
</span>  imports<span>: [
</span>    <span>...
</span>    FormsModule
  <span>]
</span>  <span>...
</span><span>})
</span><span>export class AppModule { }
</span>

Créer Src / App / Shared / Auth / Okta.auth.wrapper.ts pour envelopper le SDK Okta Auth et l'intégrer à OAuthService. Sa méthode Login () utilise OktaAuth pour obtenir un jeton de session et l'échanger contre des jetons d'identification et d'accès.

<span><span>:host</span> {
</span>  <span>display: block;
</span>  <span>padding: 0 20px;
</span><span>}
</span>

Dans le code ci-dessus, OAuthService.TryLogin () analyse et stocke l'idToken et AccessToken afin qu'ils puissent être récupérés à l'aide de OAuthService.getIdToken () et OAuthService.GetAccessToken ().

Exporter OktaAuthWrapper dans SRC / Shared / index.ts:

<span>git clone https://github.com/mraible/ng-demo.git
</span>

Ajouter OktaAuthWrapper en tant que fournisseur dans app.module.ts.

ng new ng-demo

Modifiez la composante à la maison pour déclarer OktaAuth et modifier son modèle afin qu'il ait un bouton pour se connecter, ainsi qu'un formulaire de connexion.

<span>[mraible:~/dev] $ ng new ng-demo
</span>installing ng
  create .editorconfig
  create README.md
  create src/app/app.component.css
  create src/app/app.component.html
  create src/app/app.component.spec.ts
  create src/app/app.component.ts
  create src/app/app.module.ts
  create src/assets/.gitkeep
  create src/environments/environment.prod.ts
  create src/environments/environment.ts
  create src/favicon.ico
  create src/index.html
  create src/main.ts
  create src/polyfills.ts
  create src/styles.css
  create src/test.ts
  create src/tsconfig.app.json
  create src/tsconfig.spec.json
  create src/typings.d.ts
  create .angular-cli.json
  create e2e/app.e2e-spec.ts
  create e2e/app.po.ts
  create e2e/tsconfig.e2e.json
  create .gitignore
  create karma.conf.js
  create package.json
  create protractor.conf.js
  create tsconfig.json
  create tslint.json
Successfully initialized git.
Installing packages <span>for tooling via npm.
</span>Installed packages <span>for tooling via npm.
</span>You can <span><span>`ng set --global packageManager=yarn`</span>.
</span>Project <span>'ng-demo' successfully created.
</span><span>[mraible:~] 46s $
</span>

Après avoir apporté ces modifications, la composante du retour doit être rendu comme suit.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Ajouter des variables locales pour le nom d'utilisateur et les champs de mot de passe, importez OktaAuthWrapper et implémentez une méthode LoginWithPassword () dans HomeComponent.

$ ng <span>--version
</span>    _                      _                 ____ _     ___
   / <span>\   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
</span>  / △ <span>\ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
</span> / ___ <span>\| | | | (_| | |_| | | (_| | |      | |___| |___ | |
</span>/_/   <span>\_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
</span>               <span>|___/
</span>@angular/cli: <span>1.3.2
</span>node: <span>8.4.0
</span>os: darwin x64

Vous devriez être en mesure de vous connecter en utilisant le formulaire, en utilisant l'un des utilisateurs enregistrés de votre application. Après vous être connecté, vous pourrez cliquer sur le lien de recherche et afficher les informations des gens.

Configurer l'authentification angulaire à l'aide d'OpenId Connect et d'Okta dans votre application

Angular Okta

Si tout fonctionne - Félicitations! Si vous avez rencontré des problèmes, veuillez poster une question pour empiler le débordement avec une balise OKTA, ou frappez-moi sur Twitter @mrable.

Vous pouvez trouver une version terminée de l'application créée dans cet article de blog sur GitHub. Pour en savoir plus sur la sécurité dans Angular, voir la documentation de sécurité d'Angular. Si vous souhaitez en savoir plus sur OpenID Connect, je vous recommande de regarder la vidéo apaisante ci-dessous.

Questions fréquemment posées (FAQ) sur l'authentification angulaire avec OIDC

Quel est le rôle de OIDC dans l'authentification angulaire?

OpenID Connect (OIDC) est une simple couche d'identité construite sur le dessus du protocole OAuth 2.0. Il permet aux clients de vérifier l'identité de l'utilisateur final en fonction de l'authentification effectuée par un serveur d'autorisation. Dans Angular, OIDC est utilisé pour gérer l'authentification des utilisateurs. Il fournit un cadre sécurisé et évolutif qui peut gérer plusieurs identités utilisateur, ce qui facilite la gestion des sessions utilisateur et du contrôle d'accès.

Comment puis-je implémenter OIDC dans Angular?

La mise en œuvre de l'OIDC dans Angular implique plusieurs étapes. Tout d'abord, vous devez installer les packages nécessaires, tels que l'angul-Auth-OIDC-Client. Ensuite, vous configurez le module OIDC dans votre module d'application, en spécifiant les paramètres nécessaires tels que l'autorité, l'ID client et le type de réponse. Après cela, vous pouvez utiliser le service OIDC pour gérer la connexion, la déconnexion et la validation des jetons de l'utilisateur.

Comment gérer les jetons JWT Angular?

Les jetons Web JSON (JWT) sont utilisés dans Angular to to to to to to to to to to to to to to to to to to to to to to to to to to to the Transmettez en toute sécurité les informations entre les parties en tant qu'objet JSON. Lorsqu'un utilisateur se connecte, le serveur génère un JWT qui contient l'identité de l'utilisateur et l'envoie au client. Le client stocke ce jeton et l'inclut dans chaque demande au serveur. Le serveur vérifie ensuite le jeton pour s'assurer que l'utilisateur est authentifié.

Quelle est la différence entre OAuth2 et OIDC?

OAuth2 est un protocole qui permet aux applications d'obtenir un accès limité aux comptes d'utilisateurs sur un service HTTP. Il est utilisé pour l'autorisation. D'un autre côté, OIDC est une couche d'identité construite au-dessus de OAuth2. Il étend OAuth2 pour fournir une authentification, permettant aux applications de vérifier l'identité des utilisateurs.

Comment puis-je sécuriser mon application angulaire?

La sécurisation de votre application angulaire implique plusieurs étapes. Tout d'abord, vous devez utiliser HTTPS pour crypter les données en transit. Deuxièmement, utilisez JWT pour l'authentification des utilisateurs et la gestion de session. Troisièmement, implémentez le contrôle d'accès pour restreindre les ressources auxquelles un utilisateur peut accéder. Enfin, désinfecter la saisie des utilisateurs pour empêcher les attaques de scripts inter-sites (XSS).

Comment puis-je gérer les sessions utilisateur dans Angular?

Les séances utilisateur en angulaire peuvent être manipulées à l'aide de JWT. Lorsqu'un utilisateur se connecte, le serveur génère un JWT qui contient l'identité de l'utilisateur et l'envoie au client. Le client stocke ce jeton et l'inclut dans chaque demande au serveur. Le serveur vérifie ensuite le jeton pour s'assurer que l'utilisateur est authentifié.

Quel est le rôle du package angulaire-AuTh-OiDC-Client?

Le package angulaire-AUTH-OIDC-Client est Une bibliothèque pour Angular qui vous permet de connecter votre application avec des fournisseurs d'identité à l'aide d'OpenID Connect et OAuth2. Il gère l'authentification des utilisateurs, la gestion de session et la validation des jetons.

Comment puis-je implémenter le contrôle d'accès dans Angular?

Le contrôle d'accès dans Angular peut être implémenté à l'aide de gardes de route. Les gardes d'itinéraire sont des interfaces qui peuvent indiquer au routeur s'il devrait ou non permettre à la navigation un itinéraire demandé. Ils peuvent être utilisés pour restreindre l'accès à certaines routes en fonction du rôle ou de l'état d'authentification de l'utilisateur.

Comment puis-je gérer les erreurs d'authentification angulaire?

Les erreurs d'authentification angulaire peuvent être gérées à l'aide de gestionnaires d'erreurs . Un gestionnaire d'erreurs est une fonction qui prend une erreur en tant que paramètre et la gère. Vous pouvez l'utiliser pour afficher un message d'erreur à l'utilisateur, enregistrer l'erreur ou même rediriger l'utilisateur vers une autre page.

Comment puis-je tester l'authentification angulaire?

Tester l'authentification angulaire implique Création de tests unitaires pour votre service d'authentification et des tests de bout en bout pour votre application. Vous pouvez utiliser des outils comme le jasmin et le karma pour les tests unitaires et le rapporteur pour les tests de bout en bout. Ces tests doivent vérifier que le processus d'authentification fonctionne comme prévu et gère correctement les erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:10 JQUERY HTML5 Audio PlayersArticle suivant:10 JQUERY HTML5 Audio Players