public async Task <ResponseWithHeaders <StsTokenResponseMessage, MixedRealityStsGetTokenHeaders> > GetTokenAsync(Guid accountId, MixedRealityTokenRequestOptions tokenRequestOptions = null, CancellationToken cancellationToken = default)
        {
            using var message = CreateGetTokenRequest(accountId, tokenRequestOptions);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            var headers = new MixedRealityStsGetTokenHeaders(message.Response);

            switch (message.Response.Status)
            {
            case 200:
            {
                StsTokenResponseMessage value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                value = StsTokenResponseMessage.DeserializeStsTokenResponseMessage(document.RootElement);
                return(ResponseWithHeaders.FromValue(value, headers, message.Response));
            }
        /// <summary>
        /// Converts an <see cref="StsTokenResponseMessage"/> to an <see cref="AccessToken"/>.
        /// </summary>
        /// <param name="stsTokenResponseMessage">The STS token response message.</param>
        /// <returns><see cref="AccessToken"/>.</returns>
        public static AccessToken ToAccessToken(this StsTokenResponseMessage stsTokenResponseMessage)
        {
            DateTimeOffset tokenExpiration = JwtHelper.RetrieveTokenExpiration(stsTokenResponseMessage.AccessToken);

            return(new AccessToken(stsTokenResponseMessage.AccessToken, tokenExpiration));
        }