Spring Boot OAuth2 с перенаправлением Intuit - PullRequest
0 голосов
/ 23 октября 2018

Я использую Spring Boot для входа в OAuth2 в Intuit.Однако Intuit не отвечает на redirect_uri токенами доступа, а отправляет код, который затем необходимо обменять на токены.Я могу выполнить этот запрос вручную и попытался установить токены непосредственно в сеансе, но это не вызывает аутентификацию пользователя.

Вот мой redirect_uri, который затем выполняет запрос Intuit для заполнения оставшейся частиданные токена.

@RequestMapping("/redirect")
public String oAuth2Redirect(HttpSession session,
                             @RequestParam(value = "state", required = false) String state,
                             @RequestParam(value = "code", required = false) String code,
                             @RequestParam(value = "realmId", required = false) String realmId,
                             @RequestParam(value = "error", required = false) String error) throws com.intuit.oauth2.exception.OAuthException {

    ...

    // Exchange Code for Tokens
    OAuth2PlatformClient platformClient = new OAuth2PlatformClient(oAuth2Config);
    BearerTokenResponse bearerTokenResponse = platformClient.retrieveBearerTokens(code, oauth2RedirectUri);

    DefaultOAuth2ClientContext context = (DefaultOAuth2ClientContext) session.getAttribute("scopedTarget.oauth2ClientContext");
    DefaultOAuth2AccessToken defaultOAuth2AccessToken = new DefaultOAuth2AccessToken(bearerTokenResponse.getAccessToken());
    defaultOAuth2AccessToken.setExpiration(new Date(System.currentTimeMillis() + bearerTokenResponse.getExpiresIn()));
    defaultOAuth2AccessToken.setRefreshToken(new DefaultExpiringOAuth2RefreshToken(bearerTokenResponse.getRefreshToken(),
            new Date(System.currentTimeMillis() + bearerTokenResponse.getXRefreshTokenExpiresIn())));
    context.setAccessToken(defaultOAuth2AccessToken);

    ...

    return "success";
}

Есть ли способ аутентификации пользователя внутри конечной точки?Есть ли лучший способ выполнить этот дополнительный шаг OAuth?

EDIT:

Я попытался просто обновить контекст с помощью кода авторизации, чтобы он мог получить токены через Spring Security.Но этот контекст не работает в моем фильтре.

Это перенаправление:

    DefaultOAuth2ClientContext context = (DefaultOAuth2ClientContext) session.getAttribute("scopedTarget.oauth2ClientContext");
    context.getAccessTokenRequest().setAuthorizationCode(code);

Вот мой фильтр (который может использовать неправильный контекст):

@Qualifier("oauth2ClientContext")
@Autowired
private OAuth2ClientContext oauth2ClientContext;

@Bean("oauth2Filter")
public Filter oauth2Filter(@Qualifier("quickbooksResource") ResourceServerProperties quickbooksResource,
                           @Qualifier("quickbooksDetails") AuthorizationCodeResourceDetails quickbooksDetails) {
    OAuth2ClientAuthenticationProcessingFilter quickbooksFilter = new OAuth2ClientAuthenticationProcessingFilter("/login");

    OAuth2RestTemplate quickbooksTemplate = new OAuth2RestTemplate(quickbooksDetails, oauth2ClientContext);
    quickbooksFilter.setRestTemplate(quickbooksTemplate);

    UserInfoTokenServices tokenServices = new UserInfoTokenServices(quickbooksResource.getUserInfoUri(), quickbooksDetails.getClientId());
    tokenServices.setRestTemplate(quickbooksTemplate);
    quickbooksFilter.setTokenServices(tokenServices);

    return quickbooksFilter;
}
...