code: @Sensitive
      public Map<String, Object> obtainAccessToken(SocialLoginConfig config, String requestToken, String verifierOrPinValue) {
  
          String endpointUrl = config.getTokenEndpoint();
          try {
              SocialUtil.validateEndpointWithQuery(endpointUrl);
          } catch (SocialLoginException e) {
              return createErrorResponse("TWITTER_BAD_ACCESS_TOKEN_URL", new Object[] { endpointUrl, TwitterLoginConfigImpl.KEY_accessTokenUrl, config.getUniqueId(), e.getLocalizedMessage() });
          }
  
          // Create the Authorization header string necessary to authenticate the request
          String authzHeaderString = createAuthzHeaderForAuthorizedEndpoint(endpointUrl, requestToken);
          if (tc.isDebugEnabled()) {
              Tr.debug(tc, "Authz header string: " + authzHeaderString);
          }
  
          return executeRequest(config, requestMethod, authzHeaderString, endpointUrl, TwitterConstants.TWITTER_ENDPOINT_ACCESS_TOKEN, verifierOrPinValue);
      }
docs: Invokes the {@value TwitterConstants#TWITTER_ENDPOINT_ACCESS_TOKEN} endpoint in order to obtain an access token. The
  request is authorized for the consumer key set by the class and the previously obtained request token. The appropriate
  consumer key must be set before invoking this method in order to obtain an access token for the correct consumer. The
  verifierOrPinValue argument must match the oauth_verifier or PIN value returned from an earlier
  {@value TwitterConstants#TWITTER_ENDPOINT_AUTHORIZE} request. For more information, see
  {@link https://dev.twitter.com/oauth/reference/post/oauth/access_token}.
  
  @param config
  @param requestToken
  @param verifierOrPinValue
  @return