代码之家  ›  专栏  ›  技术社区  ›  Arlo Guthrie

在角截获器中使用放大凭证

  •  0
  • Arlo Guthrie  · 技术社区  · 6 年前

    我们正在使用放大来验证AWS Lambda。我们正在尝试为我们的产品添加安全性,因此我添加了一个拦截器来检索当前凭据,并将它们添加到每个请求的头中。

    下面的代码正确地截获了请求,并正确地检索了访问令牌。但是,因为所有的移动部分都是由异步Promise/Observable驱动的,所以请求在添加报头之前发出。我需要改变什么?

    我对我在承诺/可观察方面的有限经验表示歉意。

        intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        console.log("INTERCEPTED!!");
        this.auth.userCredentials().subscribe( result => {
            this.sessionToken = result.sessionToken;
            console.log(this.sessionToken);
            request = request.clone({
                withCredentials : true,
                setHeaders: {
                    Authorization: `Bearer ${this.sessionToken}`
                }            
            });
        });
        console.log(request);
        return next.handle(request);
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Arlo Guthrie    6 年前

    这似乎很管用。有三个问题。1) 我需要设置为credentials=false。2) 我需要从订阅中返回next.handle。3) 来自用户凭据的会话令牌是错误的令牌,Cognoto需要session.idToken.jwtToken。

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        this.auth.session().subscribe( 
            result => {
                this.sessionToken = result.idToken.jwtToken;
                request = request.clone({
                    withCredentials : false,
                    setHeaders: {
                        Authorization: `Bearer ${this.sessionToken}`
                    }            
                });    
                return next.handle(request);
            });
        return next.handle(request);
    }
    
        2
  •  0
  •   Cyril Ferté    4 年前
    import { Auth } from 'aws-amplify';
    ....
    
    async getToken(){
       return (await Auth.currentSession()).getAccessToken().getJwtToken()
      }