Пользовательская конфигурация клиента весенней загрузки Oauth 2 - PullRequest
0 голосов
/ 19 января 2019

сервер аутентификации использует традиционные термины, такие как api_key вместо идентификатора клиента и api_secret вместо client_secret, и обратный вызов будет содержать параметры следующим образом: callbackurl / request_token = "clksdnfvklcm" вместо code = "nvckjlefdkm" $ state = "somestate" и нет параметра состояния я понятия не имею, как правильно его реализовать у способа, которым я пробовал, было так много недостатков, что я создал страницу входа в систему, где я предоставил ссылку для oauth-сервера oauth, например oauthserver / api_key = mcklfdms, а затем создал фильтр перед фильтром oauth и перенаправил его в правильном формате, чтобы запрос преобразовывался oauth / code = cnjdsn вместо oauth / callback / request_token = cnjdsn Может ли кто-нибудь предоставить мне правильный способ его реализации

Запрос разрешения

@Component
public class KiteAuthorizationRequestResolver implements OAuth2AuthorizationRequestResolver {
    DefaultOAuth2AuthorizationRequestResolver defaultOAuth2AuthorizationRequestResolver;
    ClientRegistration clientRegistration;
    public KiteAuthorizationRequestResolver(ClientRegistrationRepository clientRegistrationRepository,String authorizationBaseUri){
        this.defaultOAuth2AuthorizationRequestResolver=new DefaultOAuth2AuthorizationRequestResolver(
                clientRegistrationRepository,authorizationBaseUri);
        this.clientRegistration=clientRegistrationRepository.findByRegistrationId("kite");
    }
    @Override
    public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
        OAuth2AuthorizationRequest oAuth2AuthorizationRequest=defaultOAuth2AuthorizationRequestResolver.resolve(request);
        if(request!=null){
            return requestResolver(oAuth2AuthorizationRequest);
        }
        return null;
    }

    @Override
    public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String clientRegistrationId) {
        OAuth2AuthorizationRequest oAuth2AuthorizationRequest=defaultOAuth2AuthorizationRequestResolver.resolve(request,clientRegistrationId);
        if(request!=null){
            return requestResolver(oAuth2AuthorizationRequest);
        }
        return null;
    }
    private OAuth2AuthorizationRequest requestResolver(OAuth2AuthorizationRequest request){
        Map<String,Object> parms=new HashMap<>();
        if(request.getAdditionalParameters()!=null){
            parms.putAll(request.getAdditionalParameters());
        }
        parms.put("api_key",this.clientRegistration.getClientId());
        OAuth2AuthorizationRequest oAuth2AuthorizationRequest=OAuth2AuthorizationRequest
                .from(request)
                .state("hello")
                .additionalParameters(parms)
                .build();
        return oAuth2AuthorizationRequest;
    }
}

Фильтр

package com.kumar.coingen.filter;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
@WebFilter(urlPatterns = "/oauth/code/kite")
@Order(-150)
public class AuthenticationFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if(!request.getParameter("code").isEmpty()){
            chain.doFilter(request,response);
        }
        String code=request.getParameter("request_token");
        HttpServletRequest servletRequest=(HttpServletRequest) request;
        HttpServletResponse servletResponse=(HttpServletResponse)response;
        servletResponse.sendRedirect(request.getServerName()+":"+request.getServerPort()+"/"+((HttpServletRequest) request).getServletPath()+"/code="+code+"&state=hello");
    }
}

**, пожалуйста, дайте мне знать, если это можно сделать без использования фильтра для перенаправления **

...