/// <summary>
 /// Try to get the value of an idp with a given entity id.
 /// </summary>
 /// <param name="opEntityId">Entity id to search for.</param>
 /// <param name="op">The op, if found.</param>
 /// <returns>True if an idp with the given entity id was found.</returns>
 public bool TryGetValue(string opEntityId, out OpenIDProviderData op)
 {
     lock (dictionary)
     {
         return(dictionary.TryGetValue(opEntityId, out op));
     }
 }
        /// <summary>
        /// Add an OpenID provider to the collection..
        /// </summary>
        /// <param name="op">OpenID provider to add.</param>
        public void Add(OpenIDProviderData op)
        {
            if (op == null)
            {
                throw new ArgumentNullException(nameof(op));
            }

            lock (dictionary)
            {
                dictionary.Add(op.EntityId, op);
            }
        }
        private OIDCAuthorizationRequestMessage generateRequestMessage(OpenIDProviderData providerData, OpenIDUrls urls)
        {
            OIDCAuthorizationRequestMessage requestMessage = new OIDCAuthorizationRequestMessage();
            requestMessage.ClientId = providerData.ClientInformation.ClientId;
            requestMessage.Scope = new List<MessageScope>() { MessageScope.Openid, MessageScope.Profile };
            requestMessage.ResponseType = new List<ResponseType>() { ResponseType.Code };
            requestMessage.RedirectUri = urls.CodeCallbackCommand.ToString();
            requestMessage.State = WebOperations.RandomString();
            requestMessage.Nonce = WebOperations.RandomString();
            requestMessage.Validate();

            return requestMessage;
        }
        public static OpenIDProviderData GetOpenIDProviderData(string entityId, OpenIDProviderElement opEntry, IRPOptions options)
        {
            lock (providers)
            {
                if (providers.ContainsKey(entityId))
                {
                    return providers[entityId];
                }

                OpenIDProviderData op = new OpenIDProviderData(opEntry, options);
                providers.Add(entityId, op);
                return op;
            }
        }
        public static OpenIDProviderData GetOpenIDProviderData(string entityId, OpenIDProviderElement opEntry, IRPOptions options)
        {
            lock (providers)
            {
                if (providers.ContainsKey(entityId))
                {
                    return(providers[entityId]);
                }

                OpenIDProviderData op = new OpenIDProviderData(opEntry, options);
                providers.Add(entityId, op);
                return(op);
            }
        }
        private OIDCAuthorizationRequestMessage generateRequestObject(OpenIDProviderData providerData, OpenIDUrls urls, string state, string nonce)
        {
            OIDCAuthorizationRequestMessage requestObject = new OIDCAuthorizationRequestMessage();
            requestObject.Iss = providerData.ClientInformation.ClientId;
            requestObject.Aud = providerData.ProviderMatadata.Issuer;
            requestObject.ClientId = providerData.ClientInformation.ClientId;
            requestObject.Scope = new List<MessageScope>() { MessageScope.Openid, MessageScope.Profile };
            requestObject.ResponseType = new List<ResponseType>() { ResponseType.Code };
            requestObject.RedirectUri = urls.CodeCallbackCommand.ToString();
            requestObject.State = state;
            requestObject.Nonce = nonce;
            requestObject.Validate();

            return requestObject;
        }
 /// <summary>
 /// Try to get the value of an idp with a given entity id.
 /// </summary>
 /// <param name="opEntityId">Entity id to search for.</param>
 /// <param name="op">The op, if found.</param>
 /// <returns>True if an idp with the given entity id was found.</returns>
 public bool TryGetValue(string opEntityId, out OpenIDProviderData op)
 {
     lock (dictionary)
     {
         return dictionary.TryGetValue(opEntityId, out op);
     }
 }
        /// <summary>
        /// Add an OpenID provider to the collection..
        /// </summary>
        /// <param name="op">OpenID provider to add.</param>
        public void Add(OpenIDProviderData op)
        {
            if(op == null)
            {
                throw new ArgumentNullException(nameof(op));
            }

            lock(dictionary)
            {
                dictionary.Add(op.EntityId, op);
            }
        }