/// <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);
            }
        }
Пример #2
0
        /// <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);
        }