如果要查看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中定义为登录表单。
答案 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或名称。