Expected Behavior

OAuth2AuthorizationRequest.Builder could get registrationId as condition

Context

Sometimes,we need to customize OAuth2AuthorizationRequest via authorizationRequestCustomizer in DefaultOAuth2AuthorizationRequestResolver, but there is not a method in OAuth2AuthorizationRequest.Builder to expose registrationId, so i have to do this :

        String registrationId = (String) oAuth2AuthorizationRequestBuilder.build()
                .getAttributes()
                .get(OAuth2ParameterNames.REGISTRATION_ID);

in

    public void customize(OAuth2AuthorizationRequest.Builder builder) {
        String registrationId = (String) builder.build()
                .getAttributes()
                .get(OAuth2ParameterNames.REGISTRATION_ID);
        if (wechatRegistrationId.equals(registrationId)) {
            builder.parameters(this::wechatParametersConsumer);
            builder.authorizationRequestUri(this::authorizationRequestUriFunction);
        }
    }

Builded it twice may be not good. OAuth2AuthorizationRequest.Builder#getAttributes() or OAuth2AuthorizationRequest.Builder#getRegistrationId() may be a good way.

Comment From: sjohnr

Hi @NotFound403, thanks for the suggestion.

Have you tried something like the following?

    public void customize(OAuth2AuthorizationRequest.Builder builder) {
        builder.attributes(attributes -> {
            String registrationId = (String) attributes.get(OAuth2ParameterNames.REGISTRATION_ID);
            if (wechatRegistrationId.equals(registrationId)) {
                this.wechatParametersConsumer.accept(attributes);
                builder.authorizationRequestUri(this::authorizationRequestUriFunction);
            }
        });
    }

Comment From: NotFound403

Done! It's amazing! I should have thought that. Thanks @sjohnr

Comment From: sjohnr

Wow, awesome! Glad to help!