AngularJs和Jboss以及JAAS

时间:2015-05-07 21:15:35

标签: angularjs jboss jaas

如果要查看JBoss security framework作为一个可能的解释,说明如何使用JBoss 6启用JAAS并创建此web.xml来配置JAAS安全性以保护,即Rest api:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/api</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>fileRealm</realm-name>
    <form-login-config>
    <form-login-page>/login.html</form-login-page>
    <form-error-page>/error.html</form-error-page>
    </form-login-config>
  </login-config>

   <error-page>
     <error-code>403</error-code>
     <location>/accessdenied.jsp</location>
   </error-page>

  <security-constraint>
    <display-name>Secured Content</display-name>
    <web-resource-collection>
      <web-resource-name>Secured Content</web-resource-name>
      <url-pattern>/api/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      <http-method>HEAD</http-method>
      <http-method>PUT</http-method>
      <http-method>OPTIONS</http-method>
      <http-method>TRACE</http-method>
      <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>ADMINISTRATOR</role-name>
      <role-name>MANAGER</role-name>
    </auth-constraint>
  </security-constraint>

  <security-role>
    <role-name>ADMINISTRATOR</role-name>
  </security-role>

  <security-role>
    <role-name>MANAGER</role-name>
  </security-role>

  <security-role>
    <role-name>EMPLOYEE</role-name>
  </security-role>

  <security-role>
    <role-name>USER</role-name>
  </security-role>

  <security-role>
    <role-name>DEFAULT</role-name>
  </security-role>

  <session-config>
    <session-timeout>5</session-timeout>
    <cookie-config>
      <name>SESSIONID</name>
    </cookie-config>
  </session-config>
</web-app>

然后像http://localhost:8080/webcontext/api/restpath这样的网址会受到保护,点击此网址会重定向到登录页面。这对我有用。

现在我想将AngularJS作为前端加入到这个组合中。可能吗?是这样,我应该如何实现它。如果没有,有哪些替代方案?理想情况下,我想使用JAAS。

我想我想知道的是,如何更改

<form-login-config>
    <form-login-page>/login.html</form-login-page>
    <form-error-page>/error.html</form-error-page>
</form-login-config>

<form-login-page>宁愿服务于而是在Angular应用程序中使用/partial/view/login.html代替? (如果这确实有意义)换句话说,摆脱login.html文件并让JAAS重定向到任何页面/文件在Angular中定义为登录表单。

1 个答案:

答案 0 :(得分:3)

您可以为您的REST端点使用Servlet / Java EE安全性,我猜这是您为Angular使用的。

然而,FORM身份验证方法可能不适合这种情况,因为它更适合实际的用户到应用程序交互,而不是API的代码。 Java EE还有一个CUSTOM选项。看看这个http://arjan-tijms.omnifaces.org/2014/11/header-based-stateless-token.html的一般想法。

您可能只想对HTTP返回码采取行动。当用户未经过身份验证时,让Java EE身份验证模块返回403 *,然后在Angular代码中显示基于该身份的本机登录页面/对话框。登录对话框可以调用登录端点,其中用户名/密码交换为您在以下REST调用中使用的令牌。

确保使用HTTPS访问所有受保护的端点,但至少访问登录服务。另外,您可能希望在一段时间后使令牌过期。

*) 403是一个很好的起点,但总有一个回复404的话可以说,所以攻击者无法开始猜测存在哪些受保护的URL。要检查身份验证是否成功(不是URL存在或受保护),您可以在标头中回显经过身份验证的用户的ID或名称。