/// <summary>
        ///     Retrieve access token for the configured "client_id", specified scope and resource
        /// </summary>
        /// <param name="parameters">Custom grant parameters</param>
        /// <param name="token">Cancellation token</param>
        /// <returns>Access token</returns>
        /// <exception cref="TokenEndpointException">Exception during token endpoint communication</exception>
        public async Task <string> GetTokenAsync(ResourceScopedAccessGrantParameters parameters,
                                                 CancellationToken token = default(CancellationToken))
        {
            var result = await _customGrantTokenClient
                         .GetTokenInternalAsync(GetPostParams(parameters), new[] { parameters.Scope }, token)
                         .ConfigureAwait(false);

            return(result.Item1);
        }
        private IList <NameValuePair> GetPostParams(ResourceScopedAccessGrantParameters grantParameters)
        {
            var parameters = new List <NameValuePair>
            {
                new NameValuePair("resource", grantParameters.Resource)
            };

            if (grantParameters.TenantId != null)
            {
                parameters.Add(new NameValuePair("tenantId", grantParameters.TenantId));
            }

            var amr = grantParameters.AmrString;

            if (amr != null)
            {
                parameters.Add(new NameValuePair("amr", amr));
            }

            return(parameters);
        }