oAuth-токен для анонимного пользователя при загрузке Spring - PullRequest
0 голосов
/ 27 сентября 2019

Team

Используя Spring boot, я могу выполнять рабочие процессы, где сервер oAuth может генерировать токен для вошедшего в систему пользователя.Однако как сервер oAuth генерирует уникальный токен для каждого анонимного пользователя?

Например, если два одновременно работающих пользователя пытаются получить доступ к серверу ресурсов из своих соответствующих браузеров, то я бы хотел, чтобы сервер ресурсов идентифицировал2 разных пользователя в каждом последующем запросе.Для этого я хотел бы создать разные токены для каждого анонимного пользователя.Это возможно, и если да, то как?

1 Ответ

0 голосов
/ 27 сентября 2019

Это простая вещь, вы делаете ее сложной.

Я хотел бы создать разные токены для каждого анонимного пользователя.Возможно ли это

после того, как вы создадите действительный токен, пользователь станет аутентифицированным пользователем.
Вы можете подумать о проверке токена и установке ROLE='ROLE_ANONYMOUS'.Как я уже сказал, это будет все равно, что сделать простую вещь сложной.Создание аутентифицированного пользователя для анонимного пользователя не очень хороший подход.Вы можете создать новую роль, такую ​​как ROLE_SEMIANONYMOUS, и предоставить полномочия, которые были открыты для пользователя ANONYMOUS.
(но этот подход не имеет для меня никакого смысла, поэтому я предлагаю альтернативную версию для достижения вашего требования идентификации AnonymousUser)

As Анонимный пользователь = Неаутентифицированный пользователь
Для анонимного пользователя, если вы напечатаете участника

String principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

принципал = "anonymousUser"

Вы можете создать сеанс для анонимного пользователя для его идентификации, как указано ниже

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();

if(principal instanceof String && ((String)principal).equalsIgnoreCase("anonymousUser"))
{
    if(request.getSession(false) == null)
    {
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(300); // As per Your requirement
    //  store session id from session and ip address from request in to DB or cache if required and use it
    }
    else
    {
        //identify anonymous user against session id and strored details
    }
}

Этого можно добиться, зарегистрировав фильтр

  • В порядке конвективных пружинфильтра должно быть после springSecurityFilterChain.
  • При весенней загрузке вы можете достичь этого на FilterRegistrationBean
...