В настоящее время я пытаюсь обойти этап утверждения/отказа авторизации доступа процесс в Spring Security OAuth2, поскольку ранее разрешенный доступ (для определенного client_id и user_id) должен быть сохранен в памяти и разрешить перенаправление OAuth-приложения на клиент-приложение без запроса пользователя каждый раз для его утверждения.Как обойти шаг подтверждения доступа в Spring безопасности OAuth2, если пользователь ранее разрешил доступ?
<version.spring-security>3.2.0.RELEASE</version.spring-security>
<version.spring-security-oauth>1.0.5.RELEASE</version.spring-security-oauth>
Так у меня есть AccessConfirmationController, который имеет отображение для/OAuth/confirm_access конечной точки:
@RequestMapping("/oauth/confirm_access")
public ModelAndView getAccessConfirmation(@ModelAttribute final AuthorizationRequest clientAuth)
{
final ClientDetails client = this.clientDetailsService.loadClientByClientId(clientAuth.getClientId());
final TreeMap<String, Object> model = Maps.newTreeMap();
model.put("auth_request", clientAuth);
model.put("client", client);
return new ModelAndView("access_confirmation", model);
}
очень классический способ обработки подтверждения доступа.
Теперь я знаю, что мне нужно проверить (где-то в этом методе), был ли ранее аутентифицированный пользователь (Принципал) ранее одобрил доступ, и если да, мы должны просто получить связанный с пользователем токен и, возможно, просто отправить ему токен через redirect_uri.
Существует внутренняя конечная точка в Spring Security, которая позволяет токенам извлечения:
@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {
@RequestMapping
public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,
@RequestParam(value = "grant_type", required = false) String grantType,
@RequestParam Map<String, String> parameters) {
// the logic here
}
}
Как я могу назвать эту рамочную конечную точку внутри моего контроллера? и это даже лучший способ (~ передовая практика?) сделать это?
заранее спасибо,
В соответствии с '@ RequestMapping' документации, если вы не передать' value' атрибут является относительно корневой URL, что означает его можно получить непосредственно на '/ oauth/token' –
@NikhilTalreja Вы не понимаете, что я имею в виду, мне нужно вызвать метод ResponseEntity getAccessToken (...) из моего AccessConfirmationController, и я не знаю как действовать. –
kaffein