0

我将 Auth0 与 Angular 应用程序一起使用。我正在使用 Auth0 的管理 API 使用从 Auth0 文档中获得的以下方法更新配置文件元数据:

  public getProfile(cb): void {
    if (!this._accessToken) {
      throw new Error('Access Token must exist to fetch profile');
    }

    const self = this;
    this.auth0.client.userInfo(this._accessToken, (err, profile) => {
      if (profile) {
        self.userProfile = profile;
      }
      cb(err, profile);
    });
  }

  public updateProfile(profileChanges : ProfileUpdate): Observable<any>  {
    console.log(this.userProfile);
    var url = 'https://APP.auth0.com/api/v2/users/' + this.userProfile.sub;
    var data = {
      user_metadata: {
        firstName: profileChanges.firstName,
        lastName: profileChanges.lastName,
        telephone: profileChanges.telephone
      }
    };

    return this.http.patch(url, data);
  }

由于我将在 JwtInterceptor 内部触发一些额外的自定义逻辑,因此我编写了一个这样的自定义逻辑,而不是使用来自 Auth0 扩展的 HttpClient:

@Injectable()
export class JwtInterceptor implements HttpInterceptor {
    constructor(private authenticationService: AuthService) { }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      let currentUser = this.authenticationService.currentUserValue;
      if (currentUser) {
        request = request.clone({
          setHeaders: {
            Authorization: `Bearer ${currentUser.token}`
          }
        });
      }
      return next.handle(request);
    }
}

每次我尝试获取或发布个人资料更新时,管理 API 都会出现 401。但是,身份验证和授权机制可以正常工作,我可以正常登录和注销。我试图将令牌切换到 idTokens,并确保我不会错过 Auth0 仪表板内的任何权限,但我什么也没看到。知道它可能是什么吗?

4

1 回答 1

1

根据您的描述,我假设您尝试使用与您自己的后端/API 相同的访问令牌调用 Auth0 管理 API。由于错误的令牌受众和范围,这将不起作用。需要使用为此明确发布的令牌调用管理 API。

请注意,尽管通常最终用户自己不会调用该管理 API,但这将是从您的后端到管理 API 的调用,您的后端将通过客户端凭据授予(M2M / 机器到机器)为其获取访问令牌.

SPA(单页应用程序)无法安全地存储客户端凭据以执行此类客户端凭据授予。

https://auth0.com/docs/api/management/v2/tokens

在此处输入图像描述

于 2019-07-07T15:30:52.743 回答