CSRF:如何从后端将JAX-RS中名为XSRF-TOKEN的cookie设置为与前端的AngularJS一起使用
我的应用程序在前端使用AngularJS,在后端使用Java RESTful web服务。我们正在尝试使用XSRF-TOKEN来防止跨站点请求伪造 在前端,我添加了angular-cookies.js,并将ngCookies依赖项包含在我的“模块”中CSRF:如何从后端将JAX-RS中名为XSRF-TOKEN的cookie设置为与前端的AngularJS一起使用,angularjs,rest,csrf,Angularjs,Rest,Csrf,我的应用程序在前端使用AngularJS,在后端使用Java RESTful web服务。我们正在尝试使用XSRF-TOKEN来防止跨站点请求伪造 在前端,我添加了angular-cookies.js,并将ngCookies依赖项包含在我的“模块”中 angular.module('myapp.list', ['ngCookies']) .controller('ListCtrl', ['$scope', '$http', '$location', function CoiListCtrl($
angular.module('myapp.list', ['ngCookies'])
.controller('ListCtrl', ['$scope', '$http', '$location', function CoiListCtrl($scope, $http, $location) {
//some functions
})
.run(['$http', '$cookies', function($http, $cookies) {
//check if the header X-XSRF-TOKEN is already set by AngularJS
console.log($http.defaults.headers.post['X-XSRF-TOKEN']);
debugger;
}]);
在前端,我无法通过以下两种方式看到我在后端创建的cookie:
1.
使用HttpServletResponse
对象,但这样我不确定如何将其发送回UI,因为我们没有使用类似于httpResponse.sendRedirect(url)的任何东西代码>
2.
在典型JAX-RS服务中使用ResponseBuilder.build()
方法返回响应时,将cookie添加到ResponseBuilder
ResponseBuilder responseBuilder = Response.temporaryRedirect(new URI(redirectUrl));
NewCookie abc = new NewCookie("XSRF-TOKEN", String.valueOf(Math.random()));
responseBuilder.cookie(abc);
return responseBuilder.build();
请有人帮我创建有效的cookie并使用它们。您可以添加自己的ServletFilter实现,在这里您将检查CRSF头和CSRF cookie的存在,并检查它们是否相互匹配。
代码示例:
boolean isRequestContainsValidCsrfToken(HttpServletRequest request) {
String authCookie = Arrays.stream(request.getCookies())
.filter(cookie -> cookie.getName().equals(COOKIE_NAME))
.findFirst()
.map(Cookie::getValue)
.orElse(null);
String authHeader = request.getHeader(X_CSRF_TOKEN);
return authCookie != null && authCookie.equals(authHeader);
}
boolean isRequestContainsValidCsrfToken(HttpServletRequest request) {
String authCookie = Arrays.stream(request.getCookies())
.filter(cookie -> cookie.getName().equals(COOKIE_NAME))
.findFirst()
.map(Cookie::getValue)
.orElse(null);
String authHeader = request.getHeader(X_CSRF_TOKEN);
return authCookie != null && authCookie.equals(authHeader);
}