Auth0 Angular - 401 при попытке получить / обновить профиль с помощью auth0.client - PullRequest
0 голосов
/ 06 июля 2019

Я использую Auth0 вместе с приложением Angular. Я использую API управления Auth0 для обновления метаданных профиля следующими методами, которые я получил из документации 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 у меня будет несколько дополнительных настраиваемых логических операций, я написал такую ​​же, вместо того чтобы использовать HttpClient из расширений Auth0:

@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);
    }
}

Это заканчивается 401 против API управления каждый раз, когда я пытаюсь получить или опубликовать обновление профиля. Однако механизмы аутентификации и авторизации работают без проблем, и я могу войти в систему и выйти из нее просто отлично. Вместо этого я пытался переключить токены на idTokens и убедиться, что я не пропускаю никаких разрешений внутри панели мониторинга Auth0, но ничего не вижу. Есть идеи, что это может быть?

1 Ответ

1 голос
/ 07 июля 2019

Из вашего описания я предполагаю, что вы пытаетесь вызвать API управления Auth0 с тем же маркером доступа, который вы используете для своего собственного бэкенда / API.Это не сработает из-за неправильной аудитории и области действия токенов.Необходимо вызвать API-интерфейс управления с помощью токена, явно выданного для этого.

Обратите внимание, что обычно конечный пользователь сам не вызывает этот API-интерфейс управления, но это будет вызов из вашего внутреннего интерфейса в API-интерфейс управления,где ваш бэкэнд получит маркер доступа для него через Предоставление клиентских учетных данных (M2M / машина к машине).

SPA (одностраничное приложение) не имеет возможности безопасно хранить учетные данные клиентачтобы выполнить такое предоставление учетных данных клиента.

См.

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

enter image description here

...