Spring Security OpenID поток с использованием JWT для аутентификации - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь выполнить аутентификацию для моего веб-приложения, используя широко используемый OpenId Connect поток.

Я понимаю, что пользователь, который хочет пройти аутентификацию на example1.com , сначала будет перенаправлен на сервер аутентификации (или OP: «Поставщик OpenId»). Пользователь аутентифицируется на этом сервере, который затем перенаправляет его обратно на исходный сайт example1.com с подписанным токеном JWT.

Технические проблемы:

Я подаю в суд Spring Security как часть моего веб-приложения. Я взял специальный фильтр для перенаправления пользователя на сервер аутентификации , а затем он перенаправил обратно на мой example1.com с действительным JWT (Json Web Token).

Мой пользовательский фильтр:

public class MyCustomFilter extends AbstractAuthenticationProcessingFilter {
   @Override

     public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
        throws AuthenticationException, IOException, ServletException {
         //reading the AWT access token from reqest beahder
         String token = request.getHeader("Authorization");

         if(token == null){
            // redirecting user to authentication server
            String accessCodeUrl = "authentication.com?query string"
            response.sendRedirect(accessCodeUrl);
         } else{
            response.addHeader("Authorization", token);
         }
         //Now how can i inject the above received token to spring security
    }
}

Конфигурация xml моей весны:

<security:http auto-config="false" entry-point-ref="entryPoint" disable-url-rewriting="true">
    <!-- set disabled to true to remove Cross Site Request Forger support -->
    <security:csrf disabled="true" />
    <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />
    <security:custom-filter ref="${MyCustomFilter }" position="PRE_AUTH_FILTER" />
    <security:access-denied-handler error-page="${security.accessDeniedPage}"/>
    <security:headers>
        <security:frame-options policy="SAMEORIGIN"/>
    </security:headers>        
</security:http>

Мой пользовательский фильтр расширяется AbstractAuthenticationProcessingFilter. это хорошо подходит для моих требований, или я должен рассмотреть вопрос о расширении любого другого фильтра, как BasicAuthenticationFilter или OncePerRequestFilter или GenericFilterBean.

Я запутался здесь, чтобы взять 1 или 2 фильтра. потому что в первый раз я перенаправляю на сервер авторизации , но со второго раза я должен использовать JWT token, предоставленный сервером аутентификации .

Так как я иду с stateless подходом. Мне нужно каждый раз обмениваться JWT token между example.com и browser . Я использую ExtJs в качестве внешнего интерфейса, что является лучшим способом обмена JWT token между браузером и example.com .

Согласно моему пониманию, я должен отправлять JWT token каждый раз из браузера вместе с каждым запросом. Означает ли это, что я должен вручную вводить каждый раз JWT token как часть Ajax request или у нас есть какой-то подход для добавления ко всем исходящим Ajax requests.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...