Я пытаюсь выполнить аутентификацию для моего веб-приложения, используя широко используемый 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
.