internal static async Task <MobileConnectStatus> RevokeToken(IAuthenticationService authentication, string token, string tokenTypeHint, DiscoveryResponse discoveryResponse, MobileConnectConfig config)
        {
            Validate.RejectNull(discoveryResponse, "discoveryResponse");
            Validate.RejectNullOrEmpty(token, "token");

            string revokeTokenUrl = discoveryResponse.OperatorUrls.RevokeTokenUrl;

            var notSupported = IsSupported(revokeTokenUrl, "Revoke", discoveryResponse.ProviderMetadata?.Issuer);

            if (notSupported != null)
            {
                return(notSupported);
            }

            string clientId     = discoveryResponse.ResponseData.response.client_id;
            string clientSecret = discoveryResponse.ResponseData.response.client_secret;

            try
            {
                var response = await authentication.RevokeTokenAsync(clientId, clientSecret, revokeTokenUrl, token, tokenTypeHint);

                return(MobileConnectStatus.TokenRevoked(response));
            }
            catch (Exception e)
            {
                Log.Error(() => $"RevokeToken failed", e);
                return(MobileConnectStatus.Error(ErrorCodes.Unknown, "Revoke token error", e));
            }
        }