我在Jetty中部署了一个JS应用。我已通过在码头WebAppContext
上设置安全处理程序来启用密钥斗篷安全性
WebAppContext wac = null;
String webAppPath = "/../../server/webapp/mywebapp";
wac = new WebAppContext(webAppPath, "/mywebapp");
wac.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
wac.setParentLoaderPriority(true);
context.setSecurityHandler(keycloakSecurity);
当我访问上面的webapp URL时,流程运行正常,提示我进行身份验证,并在身份验证成功后将我重定向到webapp。 但是,此webapp(ajax调用)对服务器进行的任何剩余调用(也通过keycloak保护)都未经授权(401)。
我是否需要在ajax调用中显式设置授权标头,或者在WebAppContext
中启用安全处理程序就足够了,并且缺少某些配置?
(如果我将令牌直接发送给其他人,但不能通过上面的webapp自动发送,则可以调用其余电话)
在有角JS中,我像这样使用RestAngular
:
app.factory('DesignVaultRestangular', ['Restangular', '$location', function(Restangular, $location) {
var url = baseURL;
var location = $location.search();
if (location && location.url)
url = location.url;
url = url + '/api/secured/';
return Restangular.withConfig(function(RestangularConfigurer) {
RestangularConfigurer.setBaseUrl(url);
RestangularConfigurer.setDefaultHeaders({
'Content-Type': 'application/json',
'withCredentials': true
});
});
}]);
编辑:请求标头
答案 0 :(得分:1)
无论您是通过URL还是通过ajax调用来访问,都需要授权标头。
您可以随请求一起以下面提到的格式传递HTTP授权标头。不同的API和工具使用不同的方式来设置HTTP标头。
Authorization: <authorization scheme> < authorization parameters >
请注意,凭据在下一行中进行了设置。如果不需要,您需要更改它 'withCredentials':true