class GenericApi20 extends DefaultApi20 {

    /** Constant <code>BASIC_AUTH_AUTHENTICATION_METHOD="basicAuth"</code> */
    public static final String BASIC_AUTH_AUTHENTICATION_METHOD = "basicAuth";

    /** Constant <code>REQUEST_BODY_AUTHENTICATION_METHOD="requestBody"</code> */
    public static final String REQUEST_BODY_AUTHENTICATION_METHOD = "requestBody";

    protected final String authUrl;
    protected final String tokenUrl;
    protected Verb accessTokenVerb = Verb.POST;
    protected String clientAuthenticationMethod = BASIC_AUTH_AUTHENTICATION_METHOD;

    /**
     * <p>Constructor for GenericApi20.</p>
     *
     * @param authUrl a {@link String} object
     * @param tokenUrl a {@link String} object
     */
    public GenericApi20(final String authUrl, final String tokenUrl) {
        this.authUrl = authUrl;
        this.tokenUrl = tokenUrl;
    }

    /** {@inheritDoc} */
    @Override
    public Verb getAccessTokenVerb() {
        return accessTokenVerb;
    }

    /**
     * <p>Setter for the field <code>accessTokenVerb</code>.</p>
     *
     * @param verb a {@link Verb} object
     */
    public void setAccessTokenVerb(final Verb verb) {
        accessTokenVerb = verb;
    }

    /** {@inheritDoc} */
    @Override
    public String getAccessTokenEndpoint() {
        return tokenUrl;
    }

    /** {@inheritDoc} */
    @Override
    protected String getAuthorizationBaseUrl() {
        return authUrl;
    }

    /**
     * <p>Getter for the field <code>clientAuthenticationMethod</code>.</p>
     *
     * @return a {@link String} object
     */
    public String getClientAuthenticationMethod() {
        return clientAuthenticationMethod;
    }

    /**
     * <p>Setter for the field <code>clientAuthenticationMethod</code>.</p>
     *
     * @param clientAuthenticationMethod a {@link String} object
     */
    public void setClientAuthenticationMethod(final String clientAuthenticationMethod) {
        this.clientAuthenticationMethod = clientAuthenticationMethod;
    }

    /** {@inheritDoc} */
    @Override
    public ClientAuthentication getClientAuthentication() {<FILL_FUNCTION_BODY>}
}

        if (BASIC_AUTH_AUTHENTICATION_METHOD.equalsIgnoreCase(clientAuthenticationMethod)) {
            return HttpBasicAuthenticationScheme.instance();
        } else if (REQUEST_BODY_AUTHENTICATION_METHOD.equalsIgnoreCase(clientAuthenticationMethod)) {
            return RequestBodyAuthenticationScheme.instance();
        } else {
            throw new TechnicalException("Unsupported client authentication method: " + clientAuthenticationMethod);
        }
    
<methods>public void <init>() ,public com.github.scribejava.core.oauth.OAuth20Service createService(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.io.OutputStream, java.lang.String, com.github.scribejava.core.httpclient.HttpClientConfig, com.github.scribejava.core.httpclient.HttpClient) ,public abstract java.lang.String getAccessTokenEndpoint() ,public TokenExtractor<com.github.scribejava.core.model.OAuth2AccessToken> getAccessTokenExtractor() ,public com.github.scribejava.core.model.Verb getAccessTokenVerb() ,public java.lang.String getAuthorizationUrl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, Map<java.lang.String,java.lang.String>) ,public com.github.scribejava.core.oauth2.bearersignature.BearerSignature getBearerSignature() ,public com.github.scribejava.core.oauth2.clientauthentication.ClientAuthentication getClientAuthentication() ,public java.lang.String getDeviceAuthorizationEndpoint() ,public com.github.scribejava.core.extractors.DeviceAuthorizationJsonExtractor getDeviceAuthorizationExtractor() ,public java.lang.String getRefreshTokenEndpoint() ,public java.lang.String getRevokeTokenEndpoint() <variables>