class AzureAd2OidcConfiguration extends OidcConfiguration {

    /** AzureAd tenant **/
    private String tenant;

    /**
     * <p>Constructor for AzureAd2OidcConfiguration.</p>
     */
    public AzureAd2OidcConfiguration() {
    }

    /**
     * <p>Constructor for AzureAd2OidcConfiguration.</p>
     *
     * @param oidcConfiguration a {@link OidcConfiguration} object
     */
    public AzureAd2OidcConfiguration(final OidcConfiguration oidcConfiguration) {
        this.setOpMetadataResolver(oidcConfiguration.getOpMetadataResolver());
        this.setClientId(oidcConfiguration.getClientId());
        this.setSecret(oidcConfiguration.getSecret());
        this.setScope(oidcConfiguration.getScope());
        this.setCustomParams(oidcConfiguration.getCustomParams());
        this.setClientAuthenticationMethod(oidcConfiguration.getClientAuthenticationMethod());
        this.setUseNonce(oidcConfiguration.isUseNonce());
        this.setPreferredJwsAlgorithm(oidcConfiguration.getPreferredJwsAlgorithm());
        this.setMaxClockSkew(oidcConfiguration.getMaxClockSkew());
        this.setConnectTimeout(oidcConfiguration.getConnectTimeout());
        this.setReadTimeout(oidcConfiguration.getReadTimeout());
        this.setDiscoveryURI(oidcConfiguration.getDiscoveryURI());
        this.setResourceRetriever(oidcConfiguration.getResourceRetriever());
        this.setResponseType(oidcConfiguration.getResponseType());
        this.setResponseMode(oidcConfiguration.getResponseMode());
        this.setLogoutUrl(oidcConfiguration.getLogoutUrl());
        if (oidcConfiguration instanceof AzureAd2OidcConfiguration azureAd2OidcConfiguration) {
            this.setTenant(azureAd2OidcConfiguration.getTenant());
        }
    }

    /** {@inheritDoc} */
    @Override
    protected void internalInit(final boolean forceReinit) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override
    public String getDiscoveryURI() {
        return "https://login.microsoftonline.com/" + getTenant() + "/v2.0/.well-known/openid-configuration";
    }

    /**
     * <p>makeOauth2TokenRequest.</p>
     *
     * @param refreshToken a {@link String} object
     * @return a {@link String} object
     */
    public String makeOauth2TokenRequest(String refreshToken) {
        var scope = this.getScope();
        if (isBlank(scope)){
            // default values
            scope = "openid profile email";
        }
        val payload = HttpUtils.encodeQueryParam("client_id",this.getClientId())
            + "&" + HttpUtils.encodeQueryParam("client_secret",this.getSecret())
            + "&" + HttpUtils.encodeQueryParam("grant_type","refresh_token")
            + "&" + HttpUtils.encodeQueryParam("refresh_token",refreshToken)
            + "&" + HttpUtils.encodeQueryParam("tenant", this.getTenant())
            + "&" + HttpUtils.encodeQueryParam("scope", scope);

        return payload;
    }
}

        if (isBlank(getTenant())){
            // default value
            setTenant("common");
        }

        if (this.getOpMetadataResolver() == null) {
            assertNotBlank("discoveryURI", getDiscoveryURI());
            this.opMetadataResolver = new AzureAdOpMetadataResolver(this);
            this.opMetadataResolver.init();
        }

        super.internalInit(forceReinit);
    
<methods>public non-sealed void <init>() ,public void addCustomParam(java.lang.String, java.lang.String) ,public void configureHttpRequest(com.nimbusds.oauth2.sdk.http.HTTPRequest) ,public java.lang.String findLogoutUrl() ,public com.nimbusds.oauth2.sdk.pkce.CodeChallengeMethod findPkceMethod() ,public com.nimbusds.jose.util.ResourceRetriever findResourceRetriever() ,public java.lang.String getCustomParam(java.lang.String) ,public java.lang.String getResponseType() ,public int getTokenExpirationAdvance() ,public void setClientAuthenticationMethodAsString(java.lang.String) ,public void setCodeVerifierGenerator(org.pac4j.core.util.generator.ValueGenerator) ,public void setCustomParams(Map<java.lang.String,java.lang.String>) ,public void setDiscoveryURIIfUndefined(java.lang.String) ,public void setPreferredJwsAlgorithmAsString(java.lang.String) ,public void setResponseType(java.lang.String) ,public void setStateGenerator(org.pac4j.core.util.generator.ValueGenerator) ,public void setSupportedClientAuthenticationMethods(Set<com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod>) ,public void setValueRetriever(org.pac4j.oidc.util.ValueRetriever) <variables>public static final List<com.nimbusds.oauth2.sdk.ResponseType> AUTHORIZATION_CODE_FLOWS,public static final java.lang.String CLIENT_ID,public static final java.lang.String CODE_CHALLENGE,public static final java.lang.String CODE_CHALLENGE_METHOD,public static final java.lang.String CUSTOM_PARAMS,public static final int DEFAULT_MAX_CLOCK_SKEW,public static final int DEFAULT_TOKEN_EXPIRATION_ADVANCE,public static final List<com.nimbusds.oauth2.sdk.ResponseType> HYBRID_CODE_FLOWS,public static final List<com.nimbusds.oauth2.sdk.ResponseType> IMPLICIT_FLOWS,public static final java.lang.String MAX_AGE,public static final java.lang.String NONCE,public static final java.lang.String PROMPT,public static final java.lang.String REDIRECT_URI,public static final java.lang.String RESPONSE_MODE,public static final java.lang.String RESPONSE_TYPE,public static final java.lang.String SCOPE,public static final java.lang.String STATE,private boolean allowUnsignedIdTokens,private boolean callUserInfoEndpoint,private com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod clientAuthenticationMethod,private java.lang.String clientId,private org.pac4j.core.util.generator.ValueGenerator codeVerifierGenerator,private int connectTimeout,private Map<java.lang.String,java.lang.String> customParams,private boolean disablePkce,private java.lang.String discoveryURI,private boolean expireSessionWithToken,private javax.net.ssl.HostnameVerifier hostnameVerifier,private boolean includeAccessTokenClaimsInProfile,private java.lang.String logoutUrl,private Map<java.lang.String,java.lang.String> mappedClaims,private java.lang.Integer maxAge,private int maxClockSkew,protected org.pac4j.oidc.metadata.OidcOpMetadataResolver opMetadataResolver,private com.nimbusds.oauth2.sdk.pkce.CodeChallengeMethod pkceMethod,private com.nimbusds.jose.JWSAlgorithm preferredJwsAlgorithm,private org.pac4j.oidc.config.PrivateKeyJWTClientAuthnMethodConfig privateKeyJWTClientAuthnMethodConfig,private int readTimeout,private com.nimbusds.jose.util.ResourceRetriever resourceRetriever,private java.lang.String responseMode,private com.nimbusds.oauth2.sdk.ResponseType responseType,private java.lang.String scope,private java.lang.String secret,private javax.net.ssl.SSLSocketFactory sslSocketFactory,private org.pac4j.core.util.generator.ValueGenerator stateGenerator,private Set<com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod> supportedClientAuthenticationMethods,private int tokenExpirationAdvance,private boolean useNonce,private org.pac4j.oidc.util.ValueRetriever valueRetriever,private boolean withState