2017-02-08 15 views
2

Можно ли использовать Kerberos в приложении с угловым 2? Мы используем Spring, который обслуживает нашу службу REST, а также защищает ресурсы Angular 2 с помощью Kerberos. Мы хотим добавить роли и определить, какая функциональность в приложении Angular2 доступна для определенных ролей. Кажется, мало информации о том, как это сделать, поскольку большинство людей, похоже, отправились использовать JWT или OAuth.Угловая 2 и Весна Kerberos

Можно ли использовать Kerberos для первоначальной проверки подлинности, а затем создать JWT, который отправляется обратно в браузер?

На данный момент я думаю о настройке конечной точки REST/пользователя, которая возвращает всю информацию о текущем входе пользователя, включая его/ее разрешения. В Angular я могу затем прочитать эти разрешения и соответствующим образом управлять пользовательским интерфейсом и маршрутами. Данные, поступающие с сервера, уже будут защищены Kerberos и Spring. Поэтому, если пользователь может изменить свой локальный угол, чтобы посетить некоторые защищенные маршруты, они не будут видеть никаких данных.

ответ

0

Вы абсолютно правы в том, что вы сказали. Вы хотите обработать аутентификацию через внутренний сервер, будь то Kerberos, OAuth или что-то еще. После успешного входа в систему бэкэнд вернет ответ метаданных, который позволяет пользовательскому интерфейсу правильно настроить себя. Поскольку бэкэнд - это защищенные ресурсы, пользовательский интерфейс не обязательно должен быть «защищен», но более «динамически настроен» для конкретного пользователя.

Вы должны решить, как вы хотите это сделать, и где вы хотите написать большую часть своей логики. Например, back-end может возвращать что-то столь же простое, как идентификатор роли или опыта (например, Admin, User, Guest). Оттуда пользовательский интерфейс должен знать, какие действия должны/должны выполняться, какие ресурсы доступны и т. Д. Пользовательский интерфейс будет знать, например, что Гость не может добавить нового пользователя, но, поскольку г-н Гость может получить любопытное, самое важное Дело в том, что фоновый код действительно не позволяет ему изменять учетные записи пользователей.

0

Это будет идеальный вариант использования для токенов JWT. После того, как вы авторизованы на сервере, серверный сервер может создать токен JWT с ролями конкретного пользователя и вернуть его обратно в приложение Angular2. Угловое приложение может настраивать пользовательский интерфейс в зависимости от роли пользователя. На каждом последовательном сервере вызовы углового приложения могут отправлять обратно этот токен, так что этот токен используется для поиска ролей пользователя. Безопасность Spring позволяет добавить пользовательский фильтр до аутентификации, который можно использовать для проверки токена.

@Configuration 
public class WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.addFilterAfter(new TokenFilter(), BasicAuthenticationFilter.class); 
    } 
} 

Внутри TokenFilter маркер JWT может быть разобран для поиска ролей пользователей и позволяет доступ к конкретному защищаемому ресурсу. Если кто-то попытается изменить токен или запросить запрещенный ресурс защиты, проверка маркера JWT завершится неудачно.

public class TokenFilter extends GenericFilterBean { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { 
     // Validate Token her for the requested url 
     if(validateToken(request.getHeader("auth")){ 
      chain.doFilter(request, response); 
     }else{ 
      // return 403 response 
    } 
} 
0

Вы выбор Идент технологии на стороне серверной не должны влиять на ваши решения на стороне внешнего интерфейса много, будь то OAuth, JWT, Kerberos, или что-то на заказ.

Вам необходимо будет аутентифицировать пользователя в своем бэкэнде, используя Kerberos, сохранить билет (токен аутентификации) где-то на стороне интерфейса (например, в cookie или локальном хранилище) и использовать этот билет для аутентификации будущих запросов. Для этого потребуется определенный код и базовые знания протокола Kerberos (http://www.roguelynn.com/words/explain-like-im-5-kerberos/, Kerberos authentication in Node.js https.get or https.request), так как я не вижу никакой существующей реализации протокола Kerberos в Angular2 (но не слишком сложно).

Вы можете использовать JWT над Kerberos, но для этого потребуется дополнительный уровень между конечной точкой и интерфейсом. IMHO, будет проще придерживаться только одной технологии, которую вы уже используете (Kerberos).

Затем вы можете реализовать пользовательские охранники в Angular2 для защиты маршрутов от несанкционированного доступа (см. https://blog.thoughtram.io/angular/2016/07/18/guards-in-angular-2.html).