将 Bearer 令牌添加到 header 未按预期工作
Adding the Bearer token to the header doesn't work as expected
为了试用 JJWT,我创建了一个 Spring-Boot back-end 和一个 Angular front-end,我整理了 back-end 并我卡在了 front-end.
所以基本上,我在登录过程完成时获取令牌,然后将其存储在 localStorage 中。
我创建了一个自定义 HttpInterceptor,其目的是将令牌添加到每个请求:
@Injectable()
export class JwtRequestInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, handler: HttpHandler): Observable<HttpEvent<any>> {
return handler.handle(request.clone({
setHeaders: {
"Authorization": `Bearer ${localStorage.getItem("jwt")}`
}
}))
}
}
然后我在 AppModule 中添加了这个拦截器作为 HTTP_INTERCEPTORS 的提供者:
{ provide: HTTP_INTERCEPTORS, useClass: JwtRequestInterceptor, multi: true }
问题是当我发出请求时(来自我的 front-end),该请求在浏览器的“网络”选项卡中显示两次,第一个请求具有 CORS 错误状态 - 授权 header 存在,第二个请求的状态为 403,但缺少授权 header。
Quick disclaimer, doing a request with Postman to the back-end with the token added in the header works without a problem
知道为什么吗?
您似乎没有在后端启用 CORS。
在这种情况下,您需要启用 CORS。
在这里查看如何在 Speing Security 中启用它:
https://auth0.com/blog/spring-boot-authorization-tutorial-secure-an-api-java/#Enable-CORS-in-Spring-Boot
为了试用 JJWT,我创建了一个 Spring-Boot back-end 和一个 Angular front-end,我整理了 back-end 并我卡在了 front-end.
所以基本上,我在登录过程完成时获取令牌,然后将其存储在 localStorage 中。
我创建了一个自定义 HttpInterceptor,其目的是将令牌添加到每个请求:
@Injectable()
export class JwtRequestInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, handler: HttpHandler): Observable<HttpEvent<any>> {
return handler.handle(request.clone({
setHeaders: {
"Authorization": `Bearer ${localStorage.getItem("jwt")}`
}
}))
}
}
然后我在 AppModule 中添加了这个拦截器作为 HTTP_INTERCEPTORS 的提供者:
{ provide: HTTP_INTERCEPTORS, useClass: JwtRequestInterceptor, multi: true }
问题是当我发出请求时(来自我的 front-end),该请求在浏览器的“网络”选项卡中显示两次,第一个请求具有 CORS 错误状态 - 授权 header 存在,第二个请求的状态为 403,但缺少授权 header。
Quick disclaimer, doing a request with Postman to the back-end with the token added in the header works without a problem
知道为什么吗?
您似乎没有在后端启用 CORS。
在这种情况下,您需要启用 CORS。
在这里查看如何在 Speing Security 中启用它:
https://auth0.com/blog/spring-boot-authorization-tutorial-secure-an-api-java/#Enable-CORS-in-Spring-Boot