public static X509Certificate2 GetSigningCertificate(this IdentityServerHost host) { var meta = host.GetDiscoveryDocument(); meta["jwks_uri"].Should().NotBeNull(); var jwks = meta["jwks_uri"].ToString(); var result = host.Client.GetAsync(jwks).Result; result.StatusCode.Should().Be(HttpStatusCode.OK); result.Content.Headers.ContentType.MediaType.Should().Be("application/json"); var json = result.Content.ReadAsStringAsync().Result; var data = JObject.Parse(json); data["keys"].Should().NotBeNull(); var keys = (JArray)data["keys"]; var rsa = keys.FirstOrDefault(x => (string)x["kty"] == "RSA" && (string)x["use"] == "sig"); rsa.Should().NotBeNull(); var certs = (JArray)rsa["x5c"]; certs.Should().NotBeNull(); var cert = (string)certs.First(); cert.Should().NotBeNull(); var bytes = Convert.FromBase64String(cert); var ret = new X509Certificate2(bytes); ret.Should().NotBeNull(); return(ret); }
public static string GetAuthorizeUrl( this IdentityServerHost host, string client_id = null, string redirect_uri = null, string scope = null, string response_type = null, string state = null, string nonce = null, string code_challenge = null, string code_challenge_method = null) { var disco = host.GetDiscoveryDocument(); disco["authorization_endpoint"].Should().NotBeNull(); disco["response_types_supported"].Should().NotBeNull(); var arr = (JArray)disco["response_types_supported"]; var values = arr.Select(x => x.ToString()); values.Should().Contain("code"); var url = disco["authorization_endpoint"].ToString(); var query = ""; if (response_type.IsPresent()) { query += "&response_type=" + HttpUtility.UrlEncode(response_type); } if (scope.IsPresent()) { query += "&scope=" + HttpUtility.UrlEncode(scope); } if (client_id.IsPresent()) { query += "&client_id=" + HttpUtility.UrlEncode(client_id); } if (redirect_uri.IsPresent()) { query += "&redirect_uri=" + HttpUtility.UrlEncode(redirect_uri); } if (state.IsPresent()) { query += "&state=" + HttpUtility.UrlEncode(state); } if (nonce.IsPresent()) { query += "&nonce=" + HttpUtility.UrlEncode(nonce); } if (code_challenge.IsPresent()) { query += "&code_challenge=" + HttpUtility.UrlEncode(code_challenge); } if (code_challenge_method.IsPresent()) { query += "&code_challenge_method=" + HttpUtility.UrlEncode(code_challenge_method); } if (query.StartsWith("&")) { url += "?" + query.Substring(1); } return(url); }