如何将授权令牌从Web应用传递到休息服务

时间:2018-10-08 08:02:17

标签: java ajax rest jetty keycloak

我在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
    });
  });
}]);

编辑:请求标头

enter image description here

1 个答案:

答案 0 :(得分:1)

无论您是通过URL还是通过ajax调用来访问,都需要授权标头。

您可以随请求一起以下面提到的格式传递HTTP授权标头。不同的API和工具使用不同的方式来设置HTTP标头。

     Authorization: <authorization scheme>  < authorization parameters >

请注意,凭据在下一行中进行了设置。如果不需要,您需要更改它      'withCredentials':true