2017-06-02 81 views
0

這是我爲每個HTTP請求附加keycloak令牌的角度配置。Keycloak角度應用文件上傳不發送令牌

module.factory('authInterceptor', function($q, Auth) { 
    return { 
     request: function (config) { 
      var deferred = $q.defer(); 
      if (Auth.authz.token) { 
       Auth.authz.updateToken(5).success(function() { 
        config.headers = config.headers || {}; 
        config.headers.Authorization = 'Bearer ' + Auth.authz.token; 
        deferred.resolve(config); 
       }).error(function() { 
         deferred.reject('Failed to refresh token'); 
        }); 
      } 
      return deferred.promise; 
     } 
    }; 
}); 
module.config(["$httpProvider", function ($httpProvider) { 
    $httpProvider.interceptors.push('authInterceptor'); 
}]); 

這是我發送到後端的請求。這似乎沒有添加keycloak標記的請求,所以我得到403禁止錯誤。

var formData = new FormData(file); 
formData.append('file', file); 
return $http({ 
    method: 'POST', 
    url: API_BASE + '/uploadEmployeeDetails/excelUpload', 
    headers: { 
    'Content-Type': undefined 
    }, 
    data: formData, 
    transformRequest: function(data, headersGetterFunction) { 
    return data; 
    } 
}); 

後端安全配置enter image description here

+0

當我改變了POST方法來獲得兩個後端和前端將解決403禁止性問題。那麼爲什麼POST方法會產生禁止的錯誤? – boycod3

+0

你的後端如何受到保護? –

+0

後端是僅受保護的承載。 – boycod3

回答

1

因爲你可以到token發送到後端,你可以從瀏覽器的網絡選項卡中看到。

的問題是在api側處理csrf token

如果csrf token是默認啓用的,你應該禁用它。

這裏是你的幫助的代碼,來禁用它

http.csrf().disable(); 
http.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class) 
.authorizeRequests().antMatchers("/**") 
.hasAnyRole("ORG_ADMIN", "EMPLOYEE", "PARENT", "STUDENT") 
.anyRequest().permitAll();