我正在将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);
}
}
每次我尝试获取或发布配置文件更新时,都会以401针对Management API结束。但是,身份验证和授权机制可以正常工作,我可以登录和注销就可以了。我试图将令牌切换为idTokens,并确保我不会错过Auth0仪表板内部的任何权限,但看不到任何东西。知道会是什么吗?
答案 0 :(得分:1)
根据您的描述,我假设您正在尝试使用与自己的后端/ API相同的访问令牌来调用Auth0管理API。由于令牌受众和范围错误,因此无法正常工作。需要使用为此明确发出的令牌来调用Management API。
请注意,尽管通常最终用户不会自己调用该管理API,但这将是您的后端对Management API的调用,您的后端将通过Client Credentials Grant(M2M /机器对机器)。
SPA(单页应用程序)无法安全地存储客户端凭据以执行此类客户端凭据授予。
请参见