2015-05-07 11 views
2

Если один будет смотреть на JBoss security framework как один из возможных объяснений о том, как включить JAAS с помощью JBoss 6 и создать этот web.xml для настройки безопасности JAAS для защиты т.е. апи отдыха:AngularJs и Jboss и JAAS

<?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> 

затем URL-адрес, такой как http://localhost:8080/webcontext/api/restpath, будет защищен, и попадание этого URL-адреса будет перенаправлено на страницу входа. И это работает для меня.

Теперь я хотел бы принести 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> к довольно служить, например, a /partial/view/login.html в Угловом приложении? (если это имеет смысл) Другими словами, избавиться от файла login.html и перенаправить JAAS на любую страницу/файл, определяемую в Angular как форму входа.

+0

Перенаправление в точку входа углового приложения и использование угловой маршрутизации для управления загрузкой шаблона в зависимости от статуса авторизации – charlietfl

+0

Это не безопасность JAAS, это функции безопасности Сервлета. JAAS - это не универсальная система безопасности, о которой вы, вероятно, думаете. –

+0

Ну, вы, вероятно, правы, но знаете ли вы, по крайней мере, если это возможно? – Jannie

ответ

3

Вы можете использовать защиту сервлета/Java EE для своей конечной точки REST, что, я думаю, вы используете для Angular.

Однако метод проверки подлинности FORM, вероятно, не подходит для этого, поскольку он больше предназначен для взаимодействия с пользователем, а не с API-интерфейсом. Java EE также имеет параметр CUSTOM. Взгляните на это http://arjan-tijms.omnifaces.org/2014/11/header-based-stateless-token.html за общую идею.

Возможно, вы захотите действовать только по кодам возврата HTTP. Пусть модуль аутентификации Java EE возвращает 403 *, когда пользователь не прошел аутентификацию, а затем в вашем угловом коде отображает собственную страницу/диалог входа на основе. В диалоговом окне входа в систему можно вызвать конечную точку входа, в которой имя пользователя/пароль обменивается на токен, который затем используется в следующих вызовах REST.

Убедитесь, что вы используете все защищенные конечные точки, используя HTTPS, но, по крайней мере, службу входа в систему. Кроме того, вы, вероятно, захотите закончить токен через некоторое время.

*) 403 - хорошая стартовая точка, но есть что сказать, чтобы всегда возвращать 404, чтобы злоумышленники не могли придумать, какие защищенные URL-адреса существуют. Чтобы проверить, удалась ли проверка подлинности (если URL-адрес не существует или не защищен), вы можете повторить идентификатор или имя аутентифицированного пользователя в заголовке.

+0

Удивительный, большое спасибо за эту ссылку и подробное объяснение. – Jannie

Смежные вопросы