Keycloak angular 应用文件上传不发送令牌

Keycloak angular app file uploading not sending token

这是我的 angular 配置,用于在每个 HTTP 请求中附加 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 forbidden 错误。

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;
  }
});

后端安全配置

因为您可以将 token 发送到后端,正如您在浏览器的网络选项卡中看到的那样。

问题出在处理 csrf token

api 方面

如果 csrf token 默认启用,您应该禁用它。

这是在您的帮助下禁用它的代码

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