示例#1
0
        public async Task <IEnumerable <JsonWebKey> > ResolveJsonWebKeys(IHttpClientFactory httpClientFactory)
        {
            if (JsonWebKeys != null && JsonWebKeys.Any())
            {
                return(JsonWebKeys);
            }

            Uri uri = null;

            if (string.IsNullOrWhiteSpace(JwksUri) || !Uri.TryCreate(JwksUri, UriKind.Absolute, out uri))
            {
                return(new JsonWebKey[0]);
            }

            using (var httpClient = httpClientFactory.GetHttpClient())
            {
                httpClient.BaseAddress = uri;
                var request = await httpClient.GetAsync(uri.AbsoluteUri).ConfigureAwait(false);

                request.EnsureSuccessStatusCode();
                var json = await request.Content.ReadAsStringAsync().ConfigureAwait(false);

                var keysJson    = JObject.Parse(json)["keys"].ToString();
                var jsonWebKeys = JsonConvert.DeserializeObject <JArray>(keysJson).Select(k => JsonWebKey.Deserialize(k.ToString()));
                return(jsonWebKeys);
            }
        }