我计划将jasper服务器与我的Web应用程序集成为单点登录。我经历了Jasper Authentication cookbook 和碧玉 建议基于令牌的身份验证作为解决方案之一(因为我的Web应用程序已经完成了身份验证)
Jasper建议的是这个
您将特定格式的令牌(如下面在tokenFormatMapping下定义)传递给jasper服务器 ,jasper将验证请求。
所以有效令牌可以是
u=user|r=role1|o=org1|pa1=PA11|pa2=PA21|exp=2001404150601
无效令牌可以是
u1=user|r=role1|o=org1|pa1=PA11|pa2=PA21|exp=2001404150601
r=role1|u=user|o=org1|pa1=PA11|pa2=PA21|exp=2001404150601
我的问题是这真的是一个安全的过程,因为很快黑客知道模式,他可以简单地登录到jasper服务器? 对我来说,安全性可能会受到影响。我在这里遗漏了什么吗?
<bean class="com.jaspersoft.jasperserver.api.security.externalAuth.wrappers.spring.preauth.JSPreAuthenticatedAuthenticationProvider">
....................
<property name="tokenPairSeparator" value="|" />
<property name="tokenFormatMapping">
<map>
<entry key="username" value="u" />
<entry key="roles" value="r" />
<entry key="orgId" value="o" />
<entry key="expireTime" value="exp" />
<entry key="profile.attribs">
<map>
<entry key="profileAttrib1" value="pa1" />
<entry key="profileAttrib2" value="pa2" />
</map>
</entry>
</map>
</property>
<property name="tokenExpireTimestampFormat" value="yyyyMMddHHmmssZ" />
</bean>
</property>
</bean>
答案 0 :(得分:1)
根据Jasper Reports Authentication cookbook,使用基于令牌的身份验证,用户不会直接登录,这意味着只能使用此方法执行某些操作。
此外,它指定了以下内容:
JasperReports Server将接受任何格式正确的令牌; 因此,您需要使用保护令牌的完整性 措施如下:
- 使用SSL连接到JasperReports服务器以防止令牌拦截。
- 加密令牌以防止篡改。
- 配置令牌以使用时间戳来防止重播攻击。如果没有时间戳,当您将令牌包含在网页或REST Web服务URL中时,URL可以被未经授权的人员或系统复制和使用。设置令牌的到期时间将停止令牌/ URL用于在指定时间之外进行身份验证。您可以根据您的使用情况设置到期时间。对于登录到应用程序/门户并请求访问JasperReports Server的用户,从请求时间开始的一分钟或更短的到期时间是合适的。
所有通信都需要通过SSL隧道进行。否则,任何人都可以建立与JR服务器的连接,发送令牌并从中获取信息。
答案 1 :(得分:0)
我还希望用Jasper Server实现基于令牌的SSO,并且陷入了完全相同的问题。这种方法对我来说似乎不安全,因为如果请求格式正确,从不会拒绝身份验证,这是一件很简单的事情。
另一种替代方法(如果您不使用CAS或LDAP提供程序)将根据请求进行身份验证,如身份验证cookbook中的第7.4节“基于请求的身份验证”中所述。创建自己的自定义身份验证提供程序并在applicationContext-externalAuth.xml中配置它:
<bean id="customAuthenticationManager" class="org.springframework.security.
providers.ProviderManager">
<property name="providers">
<list>
<ref bean="${bean.myCustomProvider}"/>
<ref bean="${bean.daoAuthenticationProvider}"/>
</list>
</property>
</bean>