Liferay上REST服务的Spring基本授权不起作用

Posted

技术标签:

【中文标题】Liferay上REST服务的Spring基本授权不起作用【英文标题】:Spring Basic Authorization for REST service on Liferay not working 【发布时间】:2018-04-22 16:22:31 【问题描述】:

通过在 liferay 中为休息服务实施 Spring 基本授权,我面临一个非常尴尬的问题。 实际上,当我在本地计算机上测试应用程序时,配置工作得很好。

当我在我们的测试服务器上部署应用程序时,问题就出现了。 服务器总是返回 401 未授权访问,但从未到达授权提供者。

通过调试,我注意到请求在到达 BasicAuthenticationFilter 时不包含带有凭据的标头(header = null):

if(header != null && header.startsWith("Basic "))

通过分析浏览器的网络流量,Authorization 标头就在那里。

这是我的安全配置:

 <http pattern="/*" security="none"/>

<!-- urls that need authentication and roles  -->
<http use-expressions="true" >
    <intercept-url pattern="/myrest/url/**" access="hasAnyRole('myrole')" />
    <http-basic/>
</http>

<!-- AuthenticationManager / Provider that checks the authentication against Liferay -->
<beans:bean id="myCustomAuthorizationProvider"
            class="myCustomAuthorizationProvider">
    <beans:constructor-arg ref="myUsersDao"/>
    <beans:constructor-arg ref="MyRolesDao"/>
</beans:bean>

<authentication-manager>
    <authentication-provider ref="myCustomAuthorizationProvider"/>
</authentication-manager>

我将不胜感激。

【问题讨论】:

您使用的是什么版本的 Liferay? 【参考方案1】:

在涉及 liferay tomcat 之前,您需要检查过滤 http 标头之间是否有任何中间 apache 或网络服务器。在 apache webserver 或 nginx 中需要设置授权头转发。

Apache 配置

proxy_pass_header Authorization;

对于 nginx

proxy_set_header X-Forwarded-User $http_authorization;
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Accept;
proxy_pass_header Server;
proxy_http_version 1.1;
proxy_set_header Authorization $http_authorization;
#proxy_pass_header Authorization;
proxy_set_header ns_server-ui yes;

【讨论】:

以上是关于Liferay上REST服务的Spring基本授权不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring 安全性中使用 rest 服务进行身份验证和授权 [关闭]

java 构建与数据库实体分离的Liferay Rest / SOAP服务

Ldap 用户授权失败 - 未处理的 Spring 身份验证“访问被拒绝”

Spring Security OAuth2 在 REST 服务上被拒绝访问

通过 REST 端点进行 Spring Security 身份验证/授权

Spring Data REST 中的身份验证和授权