public static async Task <IntrospectionResponse> IntrospectTokenAsync(HttpClient client, IdentityServerSettings settings, string token)
        {
            var disco = await client.GetDiscoveryDocumentAsync(settings.Uri);

            return(await client.IntrospectTokenAsync(new TokenIntrospectionRequest
            {
                Address = disco.IntrospectionEndpoint,
                Token = token,
                ClientId = IdentityServerConfig.MyApiResource,
                ClientSecret = IdentityServerConfig.MyClientSecret
            }));
        }
        public static async Task <IEnumerable <SecurityKey> > GetIssuerSigningKeysAsync(HttpClient client, IdentityServerSettings settings)
        {
            var disco = await client.GetDiscoveryDocumentAsync(settings.Uri);

            if (disco?.KeySet == null)
            {
                throw new Exception("Failed to get signing keys. Make sure the Portal is running.");
            }

            var keys = new List <SecurityKey>();

            foreach (var webKey in disco.KeySet.Keys)
            {
                var key = new RsaSecurityKey(new RSAParameters
                {
                    Exponent = Base64Url.Decode(webKey.E),
                    Modulus  = Base64Url.Decode(webKey.N)
                });

                key.KeyId = webKey.Kid;
                keys.Add(key);
            }

            return(keys);
        }
        public static async Task <TokenResponse> RequestClientCredentialsTokenAsync(HttpClient client, IdentityServerSettings settings)
        {
            var disco = await client.GetDiscoveryDocumentAsync(settings.Uri);

            return(await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
            {
                Address = disco.TokenEndpoint,
                ClientId = IdentityServerConfig.MyClientId,
                ClientSecret = IdentityServerConfig.MyClientSecret,
                Scope = IdentityServerConfig.MyApiResource
            }));
        }