簡體   English   中英

自定義Spring OAUTH2授權請求URL

[英]Customize Spring OAUTH2 authorization request URL

如何自定義由 Spring 發送到我配置的身份提供商的 OAUTH2 授權請求 URL?

實施OAuth2AuthorizationRequestResolver

@Component
public class CustomAuthorizationRequestResolver implements OAuth2AuthorizationRequestResolver {

    private final CustomAuthorizationRequestResolver defaultResolver;

    public CustomAuthorizationRequestResolver(OAuth2ClientProperties oauth2ClientProperties){
        ClientRegistration auth0 =
                OAuth2ClientPropertiesRegistrationAdapter.getClientRegistrations(oauth2ClientProperties).get("auth0");
        InMemoryClientRegistrationRepository clientRegistrationRepository =
                new InMemoryClientRegistrationRepository(auth0);
        this.defaultResolver = new DefaultOAuth2AuthorizationRequestResolver(clientRegistrationRepository, "/oauth2/authorization");
    }

    @Override
    public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
        OAuth2AuthorizationRequest req = defaultResolver.resolve(request);
        if(req != null){
            req = customizeAuthorizationRequest(req);
        }
        return req;
    }

    @Override
    public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String clientRegistrationId) {
        OAuth2AuthorizationRequest req = defaultResolver.resolve(request, clientRegistrationId);
        if(req != null){
            req = customizeAuthorizationRequest(req);
        }
        return req;
    }

    // Customize request here
    private OAuth2AuthorizationRequest customizeAuthorizationRequest(OAuth2AuthorizationRequest req) {
        Map<String,Object> extraParams = new HashMap<>(req.getAdditionalParameters());
        extraParams.put("connection", "my-connection-name");
        return OAuth2AuthorizationRequest.from(req).additionalParameters(extraParams).build();
    }
}

在您的 Spring 安全配置上設置授權請求解析器:

 @Override
 public void configure(HttpSecurity http) throws Exception {
     http
     ...
      .oauth2Login()
      .authorizationEndpoint()             
      .authorizationRequestResolver(customAuthorizationRequestResolver)
     ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM