我想在连接到Spring Boot后端的当前Angular应用程序中集成JWT身份验证。
我静静地浏览了许多教程,但是由于它们已连接到Auth0,因此大多数教程都不适合。我想自己处理用户管理。
我找到了这个例子:
角度:https://medium.com/@juliapassynkova/angular-springboot-jwt-integration-p-1-800a337a4e0
不幸的是,这个Angular前端是Angular 4,我已经在使用Angular 6。他们使用与Angular 6不兼容的'angular2-jwt'。我必须使用'auth0 / angular-jwt'。
我的问题是,在使用登录表单后,浏览器再次打开一个登录弹出窗口以登录后端。但是,即使拥有正确的凭据,也无法正常工作。我猜想,请求中缺少某些凭据。在app.module.ts中有2个旧的angular2-jwt代码,我不知道如何将其升级到auth0 / angular-jwt
export function authHttpServiceFactory(http: Http) {
return new AuthHttp(new AuthConfig({
headerPrefix: 'Bearer',
tokenName: TOKEN_NAME,
globalHeaders: [{'Content-Type': 'application/json'}],
noJwtError: false,
noTokenScheme: true,
tokenGetter: (() => localStorage.getItem(TOKEN_NAME))
}), http);
}
和
providers: [
{provide: AuthHttp, useFactory: authHttpServiceFactory, deps: [Http]},
]
有人可以帮助我解决此问题。可能是我猜错了,可能还有其他原因吗?
边注;我只是更改了前端,但尝试从该示例连接到后端。如果我在示例中同时使用前端和后端,则可以正常工作。
答案 0 :(得分:1)
几个月前,我已经成功地从angular2-jwt迁移到auth0 / angular-jwt。这样做时要记住的是:
新的angular-jwt使用HttpInterceptors-这使您可以将JWT直接附加到HttpClient过滤器链。因此,您不必在上面迁移代码。您必须将其完全删除并替换为拦截器初始化:(来自auth0 / angular-jwt文档的copy-paste):
import { JwtModule } from '@auth0/angular-jwt';
import { HttpClientModule } from '@angular/common/http';
export function tokenGetter() {
return localStorage.getItem('access_token');
}
@NgModule({
bootstrap: [AppComponent],
imports: [
// ...
HttpClientModule,
JwtModule.forRoot({
config: {
tokenGetter: tokenGetter,
whitelistedDomains: ['localhost:3001'],
blacklistedRoutes: ['localhost:3001/auth/']
}
})
]
})
export class AppModule {}
请记住在根模块中应用此代码-然后使用HttpClient而不进行任何更改,拦截器将自动应用JWT。如果出现问题-怪罪白名单域/黑名单路由。这些字段目前实施得很差,并导致正则表达式等出现问题。
由于迁移不是一件容易的事,并且花了我很多时间,请随时询问。我很可能会知道答案。