在 Angular 拦截器中使用 Amplify 凭据
Using Amplify credentials in Angular Interceptor
我们正在使用 Amplify 对 AWS Lambda 进行身份验证。我们正在尝试为我们的产品增加安全性,因此我添加了一个拦截器来检索当前凭据并将它们添加到每个请求的 header。
下面的代码正确拦截了请求,并正确检索了访问令牌。然而,因为所有的移动部分都是由异步 Promise / Observable 驱动的,所以请求在 header 添加之前就已经结束了。我需要更改什么?
对于我对 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) 我需要设置 withCredentials=false。 2) 我需要从我的订阅中 return next.handle。 3) 来自用户凭据的会话令牌是错误的令牌,Cognito 需要 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);
}
import { Auth } from 'aws-amplify';
....
async getToken(){
return (await Auth.currentSession()).getAccessToken().getJwtToken()
}
我们正在使用 Amplify 对 AWS Lambda 进行身份验证。我们正在尝试为我们的产品增加安全性,因此我添加了一个拦截器来检索当前凭据并将它们添加到每个请求的 header。
下面的代码正确拦截了请求,并正确检索了访问令牌。然而,因为所有的移动部分都是由异步 Promise / Observable 驱动的,所以请求在 header 添加之前就已经结束了。我需要更改什么?
对于我对 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) 我需要设置 withCredentials=false。 2) 我需要从我的订阅中 return next.handle。 3) 来自用户凭据的会话令牌是错误的令牌,Cognito 需要 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);
}
import { Auth } from 'aws-amplify';
....
async getToken(){
return (await Auth.currentSession()).getAccessToken().getJwtToken()
}