基于令牌的身份验证的SSO安全性如何?

时间:2015-01-22 15:31:48

标签: security single-sign-on jasperserver

我计划将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>

2 个答案:

答案 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>