/// <summary> /// Retrieves a populated <see cref="PersonalConfiguration"/> given an address and an <see cref="IDocumentRetriever"/>. /// </summary> /// <param name="fileName">address of the discovery document.</param> /// <returns>A populated <see cref="PersonalConfiguration"/> instance.</returns> public static async Task <PersonalConfiguration> GetAsync(string fileName, string authority) { string jDoc = ""; if (string.IsNullOrWhiteSpace(fileName)) // then use default values { Uri uriAuth = new Uri(authority); Uri uriAuthz = new Uri(uriAuth, "auth"); // this adds the endpoint id that we have defined for "Personal" authentication PersonalConfiguration personalConfiguration = new PersonalConfiguration { AuthorizationEndpoint = uriAuthz.ToString(), Issuer = "https://self-issued.me", ScopesSupported = { "openid", "profile", "email", "address", "phone" }, ResponseTypesSupported = { "id_token" }, SubjectTypesSupported = { "pairwise" }, IdTokenEncryptionAlgValuesSupported = { "RS256" }, RequestObjectSigningAlgValuesSupported = { "none", "RS256" } }; return(personalConfiguration); } else { using (FileStream sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true)) { StringBuilder sb = new StringBuilder(); byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = await sourceStream.ReadAsync(buffer, 0, buffer.Length)) != 0) { string text = Encoding.Unicode.GetString(buffer, 0, numRead); sb.Append(text); } jDoc = sb.ToString(); } LogHelper.LogVerbose(LogMessages.IDX21811, jDoc); PersonalConfiguration personalConfiguration = JsonConvert.DeserializeObject <PersonalConfiguration>(jDoc); if (!string.IsNullOrEmpty(personalConfiguration.JwksUri)) { LogHelper.LogVerbose(LogMessages.IDX21812, personalConfiguration.JwksUri); // string keys = await retriever.GetDocumentAsync(personalConfiguration.JwksUri, cancel).ConfigureAwait(false); LogHelper.LogVerbose(LogMessages.IDX21813, personalConfiguration.JwksUri); // personalConfiguration.JsonWebKeySet = JsonConvert.DeserializeObject<JsonWebKeySet>(keys); foreach (SecurityKey key in personalConfiguration.JsonWebKeySet.GetSigningKeys()) { personalConfiguration.SigningKeys.Add(key); } } return(personalConfiguration); } }
/// <summary> /// Serializes the <see cref="PersonalConfiguration"/> object to a json string. /// </summary> /// <param name="configuration"><see cref="PersonalConfiguration"/> object to serialize.</param> /// <returns>json string representing the configuration object.</returns> /// <exception cref="ArgumentNullException">If 'configuration' is null.</exception> public static string Write(PersonalConfiguration configuration) { if (configuration == null) { throw LogHelper.LogArgumentNullException(nameof(configuration)); } LogHelper.LogVerbose(LogMessages.IDX21809); return(JsonConvert.SerializeObject(configuration)); }
public async Task <PersonalConfiguration> GetConfigurationAsync() { PersonalConfiguration pc = await GetAsync(_fileName, _authority); return(pc); }