将令牌传递给我的Angular 4应用程序的优雅方法是什么?

时间:2017-10-12 13:20:18

标签: javascript node.js angular authentication

我有以下实施:

前端:localhost:4200(这是Angular应用)

后端:localhost:3000(这是我在Node.js& Express上运行的REST API)

-

第1步。在Angular应用中,用户点击一个链接,将其重定向到我的REST API(localhost:3000 / auth / steam)。

第2步。我的REST API会将他重定向到他登录的OpenID提供商(Steam)。

第3步。成功登录后,OpenID Provider会将用户与用户数据一起重定向回我的后端服务器。我的后端服务器将这些数据保存在数据库中,并创建一个包含用户数据的JWT(JSON Web令牌)。

第4步。将用户与令牌一起重定向到前端......

这是我不知道这样做的优雅方式的部分。我想过将令牌作为URL参数传递(?token = ...),但这有点不安全,因为令牌在URL中可见。

有更好的方法吗?谢谢:))

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是将其发送到Http Headers。 最好的方法是使用HttpClientModule进行http请求。 此模块还以下一种方式提供Interceptor功能:



providers: [
      ...
      { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
]

export class AuthInterceptor implements HttpInterceptor {
    constructor(private authService: AuthService) {}
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const copy = req.clone({headers: req.headers.set('Authorization', this.authService.getToken())});
        return next.handle(copy);
    }
}
&#13;
&#13;
&#13;