public async Task <SignalRConnectionInfo> GetClientConnectionInfoAsync(string userId, IList <Claim> claims, HttpContext httpContext)
        {
            var negotiateResponse = await _serviceHubContext.NegotiateAsync(new NegotiationOptions()
            {
                UserId      = userId,
                Claims      = BuildJwtClaims(claims, AzureSignalRUserPrefix).ToList(),
                HttpContext = httpContext
            });

            return(new SignalRConnectionInfo
            {
                Url = negotiateResponse.Url,
                AccessToken = negotiateResponse.AccessToken
            });
        }
        /// <summary>
        /// Gets client endpoint access information object for SignalR hub connections to connect to Azure SignalR Service
        /// </summary>
        protected async Task <SignalRConnectionInfo> NegotiateAsync(NegotiationOptions options)
        {
            if (_hubContext != null)
            {
                var negotiateResponse = await _hubContext.NegotiateAsync(options);

                return(new SignalRConnectionInfo
                {
                    Url = negotiateResponse.Url,
                    AccessToken = negotiateResponse.AccessToken
                });
            }
            else
            {
                //fall back to single endpoint negotiation
                return(new SignalRConnectionInfo
                {
                    Url = _serviceManager.GetClientEndpoint(HubName),
                    AccessToken = _serviceManager.GenerateClientAccessToken(HubName, options.UserId, options.Claims, options.TokenLifetime)
                });
            }
        }