如何在 api 请求标头中插入 api 身份验证所需的 jwt 令牌?

Posted

技术标签:

【中文标题】如何在 api 请求标头中插入 api 身份验证所需的 jwt 令牌?【英文标题】:How can I insert jwt token needed for api authentication in api request header? 【发布时间】:2021-10-17 06:59:50 【问题描述】:

我想访问在数据库中发布一些数据的 api。对于 api 身份验证,我使用的是 jwt 令牌。我在将 jwt 令牌放入请求的标头时遇到问题。

我正在使用 aws api,它调用了一个可以访问我的数据库的 lambda 函数,以及前端的 angular。

我的语言代码是:

const request = 
      "header": new HttpHeaders(
        'Authorization': 'Bearer '+myVariables.jwt,

      ),

      "body": 
        ... //body part works
      
    
this.http.post(this.postBlogUrl, request).subscribe(
      res => console.log("data posted to api"); window.location.reload();,
      err => console.log("Error occured: " + err.message);
    );

myVariable.jwt 是一个导出的变量,我在其中保存已签名的用户登录时的 jwt 令牌。

this.postBlogUrl 是我的 api 的 url 链接

还有一个奇怪的部分是,当我尝试 console.log(request.header) 时,我看不到授权字段 console.log(request.header);给我:console.log result

当我在 POSTMAN 中尝试相同的操作并在“标头”部分而不是在请求对象中指定标头授权时,它可以完美运行。那么我怎样才能在我的 Angular 应用中做同样的事情呢?

那么我怎样才能像邮递员https://imgur.com/a/Qk7P7D3 那样指定一个标头,而不是在请求中包含它呢?

【问题讨论】:

【参考方案1】:

你应该使用 HttpInterceptor

将中间件添加到http处理链的角度方式是HttpInterceptor。

你基本上写了一个带有intercept()方法的类:

@Injectable()
export class HeadersInterceptor implements HttpInterceptor 
  public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 
    const headers = req.headers.append('Authorization', myData);
    return next.handle(req.clone( headers ));
  

然后您使用HTTP_INTERCEPTORS 注入令牌注入它。

【讨论】:

非常感谢!这非常有效!感谢您向我推荐 httpinterceptors。一种帮助我理解拦截器的资源:@​​987654323@【参考方案2】:

我认为您只是拼写错误 header 而不是 headers

【讨论】:

以上是关于如何在 api 请求标头中插入 api 身份验证所需的 jwt 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将身份验证令牌放在 GET 请求的标头中

如何在Tornado中获取请求的身份验证标头

通过身份验证标头 API WCF Soap C# .Net

Google People API:请求具有无效的身份验证凭据 - 未设置授权承载标头

如何在同一个 Angular JS 应用程序中使用具有不同身份验证标头的不同 API

使用 swift 进行 API 身份验证