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();
这是我的 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();