mcpField
A
auth0-angular

auth0-angular

github.com/auth0安全55762 次安装1 天前更新
代码仓库

关于 auth0-angular

为 Angular 13+ 应用提供 Auth0 认证集成指南,使用 @auth0/auth0-angular。指南介绍登录配置、认证界面、受保护路由及向 API 发送令牌的方式。

主要功能

  1. 01配置 Angular Auth0 SDK
  2. 02支持独立组件与 NgModule 配置
  3. 03使用 AuthGuard 保护路由
  4. 04通过拦截器或服务获取访问令牌

适用场景

  1. 01为 Angular 应用添加登录和登出
  2. 02保护应用中的指定路由
  3. 03向受保护 API 发送访问令牌

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/auth0/agent-skills --skill auth0-angular

安装后在 Claude Code 中输入/auth0-angular确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api.md
integration.md
setup.md

详细介绍

Auth0 Angular 集成

使用 @auth0/auth0-angular 为 Angular 应用添加身份验证。


前置条件

  • Angular 13+ 应用
  • 已配置的 Auth0 账户和应用
  • 如果尚未设置 Auth0,请先使用 auth0-quickstart 技能

不适用场景

  • AngularJS(1.x)——此 SDK 需要 Angular 13+,AngularJS 请使用旧版解决方案
  • 移动应用——React Native 请使用 auth0-react-native,Ionic 请使用原生 SDK
  • 后端 API——请使用适用于服务器语言的 JWT 验证中间件

快速入门工作流

1. 安装 SDK
npm install @auth0/auth0-angular
2. 配置环境

使用 Auth0 CLI 自动设置,请参阅设置指南,获取完整脚本。

手动设置:

更新 src/environments/environment.ts:

export const environment = {
  production: false,
  auth0: {
    domain: 'your-tenant.auth0.com',
    clientId: 'your-client-id',
    authorizationParams: {
      redirect_uri: window.location.origin
    }
  }
};
3. 配置身份验证模块

对于独立组件(Angular 14+):

更新 src/app/app.config.ts:

import { ApplicationConfig } from '@angular/core';
import { provideAuth0 } from '@auth0/auth0-angular';
import { environment } from '../environments/environment';

export const appConfig: ApplicationConfig = {
  providers: [
    provideAuth0({
      domain: environment.auth0.domain,
      clientId: environment.auth0.clientId,
      authorizationParams: environment.auth0.authorizationParams
    })
  ]
};

对于基于 NgModule 的应用:

更新 src/app/app.module.ts:

import { AuthModule } from '@auth0/auth0-angular';
import { environment } from '../environments/environment';

@NgModule({
  imports: [
    AuthModule.forRoot({
      domain: environment.auth0.domain,
      clientId: environment.auth0.clientId,
      authorizationParams: environment.auth0.authorizationParams
    })
  ]
})
export class AppModule {}
4. 添加身份验证 UI

更新 src/app/app.component.ts:

import { Component } from '@angular/core';
import { AuthService } from '@auth0/auth0-angular';

@Component({
  selector: 'app-root',
  template: `
    <div *ngIf="auth.isLoading$ | async; else loaded">
      <p>Loading...</p>
    </div>

    <ng-template #loaded>
      <ng-container *ngIf="auth.isAuthenticated$ | async; else loggedOut">
        <div *ngIf="auth.user$ | async as user">
          <img [src]="user.picture" [alt]="user.name" />
          <h2>Welcome, {{ user.name }}!</h2>
          <button (click)="logout()">Logout</button>
        </div>
      </ng-container>

      <ng-template #loggedOut">
        <button (click)="login()">Login</button>
      </ng-template>
    </ng-template>
  `
})
export class AppComponent {
  constructor(public auth: AuthService) {}

  login(): void {
    this.auth.loginWithRedirect();
  }

  logout(): void {
    this.auth.logout({ logoutParams: { returnTo: window.location.origin } });
  }
}
5. 测试身份验证

启动开发服务器并测试登录流程:

ng serve

详细文档

  • 设置指南——自动设置脚本(Bash/PowerShell)、CLI 命令和手动配置
  • 集成指南——使用守卫保护路由、HTTP 拦截器和错误处理
  • API 参考——完整的 SDK API、配置选项、服务参考和测试策略

常见错误

错误修正方法
忘记在 Auth0 Dashboard 中添加重定向 URI在 Auth0 Dashboard 的 Allowed Callback URLs 中添加应用 URL(例如,http://localhost:4200、https://app.example.com)
未正确配置 AuthModule必须在 NgModule 中调用 AuthModule.forRoot(),或在独立配置中调用 provideAuth0()
初始化完成前访问身份验证信息使用 isLoading$ 可观察对象等待 SDK 初始化
手动存储令牌切勿手动存储令牌——SDK 会自动安全地处理存储
未向 API 发送令牌使用 authHttpInterceptorFn 自动附加令牌,或使用 getAccessTokenSilently() 手动控制——请参阅集成指南
路由守卫未保护路由在路由配置中为受保护的路由应用 AuthGuard(或 authGuardFn)

相关技能

  • auth0-quickstart - Auth0 基本设置
  • auth0-migration - 从其他身份验证提供商迁移
  • auth0-mfa - 添加多重身份验证
  • auth0-cli - 在终端中管理 Auth0 资源

快速参考

核心服务:

  • AuthService - 主要身份验证服务
  • isAuthenticated$ - 检查用户是否已登录的可观察对象
  • user$ - 用户个人资料信息的可观察对象
  • loginWithRedirect() - 发起登录
  • logout() - 退出用户登录
  • getAccessTokenSilently() - 手动获取访问令牌(HTTP 拦截器的替代方案)

常见用例:


参考资料

评论

支持 Markdown