Использование одной аутентификации с несколькими веб-приложениями внутри уха

1

У меня есть веб-приложение на основе JSF, которое использует проверку подлинности. Домен безопасности настраивается в конфигурации jboss. У меня также есть приложение JAX-RS которое содержит REST-API, и я хочу, чтобы к некоторым его методам обращались только пользователи, прошедшие аутентификацию в первом приложении.
Я посмотрел на JASG CAS но мне кажется, что это тяжело для моей цели, и я полагаю, что есть более простое решение, и, возможно, вы, ребята, поможете мне найти его. Заранее спасибо.

Теги:
authentication
jax-rs
jboss

1 ответ

2
Лучший ответ

То, что вам нужно, можно решить с помощью Oauth.

Ваш сервер (REST-API) потребует аутентифицированного доступа к вашим действиям API. В свою очередь, вашему интерфейсу (веб-приложение на основе JSF) необходимо будет отправлять аутентифицированные запросы при общении с бэкэнд. Это достигается путем отправки access tokens.

Хотя это может показаться сложным, вам будет очень полезно взглянуть на Stormpath. Для этого у нас есть довольно простое решение. Пожалуйста, взгляните на Использование Stormpath для аутентификации API.

Как итог, ваше решение будет выглядеть так:

  1. Вы будете использовать SDK Stormpath Java, чтобы легко делегировать все ваши потребности в управлении пользователями.
  2. В вашем лице, когда пользователь нажимает кнопку входа в систему, ваш внешний интерфейс будет безопасно отправлять учетные данные на ваш серверный интерфейс, чтобы завершить его REST API.

    2.1. Кстати, Stormpath значительно расширяет все возможности здесь. Вместо своей собственной страницы входа вы можете полностью делегировать функцию входа/регистрации в Stormpath через свой IDSite или вы также можете делегировать ее в наш плагин Servlet. Stormpath также поддерживает логин Google, Facebook, LinkedIn и Github.

  3. Затем ваш бэкэнд попытается аутентифицировать пользователя с помощью средства Stormpath Backend и в результате получит access token:

    /** This code will throw an Exception if the authentication fails */
    public void postOAuthToken(HttpServletRequest request, HttpServletResponse response) {
        Application application = client.getResource(applicationRestUrl, Application.class);
    
        //Getting the authentication result
        AccessTokenResult result = (AccessTokenResult) application.authenticateApiRequest(request);
    
        //Here you can get all the user data stored in Stormpath
        Account account = accessTokenResult.getAccount();
    
        response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType("application/json");
    
        //Output the json of the Access Token
        response.getWriter().print(token.toJson());
        response.getWriter().flush();
    }
    
  4. Затем для каждого аутентифицированного запроса ваш бэкэнд будет делать:

    public void getEquipment(HttpServletRequest request, HttpServletResponse response) {
        Application application = client.getResource(applicationRestUrl, Application.class);
    
        OauthAuthenticationResult result = (OauthAuthenticationResult) application.authenticateOauthRequest(request).execute();
    
        System.out.println(result.getApiKey());
        System.out.println(result.getAccount());
    
        //Return what you need to return in the response
        handleEquipmentRequest(response);
    }
    

Пожалуйста, загляните сюда для получения дополнительной информации

Надеюсь, это поможет!

Отказ от ответственности, я активный участник Stormpath.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню