【问题标题】:getting 403 forbidden on passing correct token request in header in Angular 8 ,在 Angular 8 的标头中传递正确的令牌请求时被禁止 403,
【发布时间】:2020-01-06 06:39:21
【问题描述】:

我正在使用 get 方法在 header 中发送 4 个数据(id、token、ROLE、EMPCODE),

我收到错误

错误 HttpErrorResponse {标头:HttpHeaders,状态:403, statusText: "禁止"

我的令牌是正确的,它我签入了 Postman, 我得到了状态为 200 的响应,但我在我的项目中遇到了这个问题

我正在分享我的服务文件代码

employeeData( id ,   token , role , employeeCode){
 let headers = new HttpHeaders();
  headers.append('id', id);
  headers.append('TOKEN', token);
  headers.append('ROLE', role);
  headers.append('EMPCODE' , employeeCode);
  headers.append( 'Content-Type' ,  'application/json');


  return this.http.get(this.emp_data, {headers: headers});

}

我正在从我订阅的组件共享代码以获取响应。

viewdetails(){

     this.rest.employeeData(this.userId,this.token,this.role, this.employeeCode).subscribe(
      result => {
        console.log('hello');
        console.log(result);
      })
}

当我签入浏览器的网络标头时,我可以检查我在请求中传递的标头没有通过那里。

【问题讨论】:

  • 这意味着您的令牌无效。请在发送请求之前检查令牌或使用有效凭据创建新令牌。
  • @Channa 我的令牌是正确的,我在 Postman 中检查过,当我检查浏览器的网络标头时,我可以检查我在请求中传递的标头没有通过那里
  • 如果您的令牌有效,它来自邮递员并且您使用来自 Angular 的相同令牌,然后尝试在标头中传递 userAgent。如果有 cloudfare,那么当 userAgent 未在标头中传递时,它可能会抛出 403。 Postman 默认将其添加到请求的标头中。

标签: angular angular8 angular-httpclient angular-http


【解决方案1】:

这里可能会发生很多事情,我们不知道你如何获得令牌,如何生成它等等。

通常您需要在 Authorization 标头中发送它是什么类型的 Auth。例如不记名令牌或其他东西。喜欢这个“持有者 {your_token}”。

headers.append('Authorization', 'bearer ' + token);

【讨论】:

  • 方法是 get ,我已经在邮递员中检查了响应,它即将与我提供的数据相同,
  • 但是你的授权头在哪里?
  • 我对授权标头了解不多,能否详细说明一下。据我所知,我在标头中传递的这些数据仅用于授权
  • 没有承载,令牌我也得到其他具有相同基本 URL 的 API 的响应
  • 好的,所以您可能正在为令牌使用自定义标头。通常它用于标准的“授权”标头中。如果没有显示令牌,你需要调试它,看看你是否真的在请求中得到了令牌
【解决方案2】:

根据this question

尝试如下添加标题,

let headers = new HttpHeaders();
headers = headers.set('id', id).set('TOKEN', token).set('ROLE', role).set('EMPCODE' , employeeCode).set( 'Content-Type' ,  'application/json');

【讨论】:

  • { "messagecode": 403, "message": "无效令牌!" }
【解决方案3】:

你也可以像这样传递多个标题:

return this.http.get(this.emp_data, 
  {headers: 
    { 'id':id, 'TOKEN':token, 'ROLE':role, 'EMPCODE': employeeCode, 'Content-Type': 'application/json'}
  });

【讨论】:

  • 仍然收到 { "messagecode": 403, "message": "not valid token!" }
【解决方案4】:

我的项目也有同样的问题:

问题是服务器没有处理新请求/跨源请求。在 spring-boot 微服务的后端,我实现了 WebMvcConfigurer 以启用 crossOrigin

@Configuration
@EnableWebMvc
public class CorsConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedHeaders("*")
                .allowedMethods("GET", "POST")
                .allowCredentials(true).maxAge(3600);
    }
}

这也有帮助“status”: 403, “error”: “Forbidden”, “message”: “Forbidden”, “path”: “/post/create”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2017-11-28
    • 2019-04-13
    • 1970-01-01
    • 2017-12-18
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多