public object Create (object parent, object context, XmlNode section)
		{
			AuthConfig config = new AuthConfig (parent);

			string mode = AttValue ("mode", section);
			if (mode != null)
				config.SetMode (mode);
			
			if (section.Attributes != null && section.Attributes.Count != 0)
				ThrowException ("Unrecognized attribute", section);

			XmlNodeList authNodes = section.ChildNodes;
			foreach (XmlNode child in authNodes) {
				XmlNodeType ntype = child.NodeType;
				if (ntype != XmlNodeType.Element)
					continue;
				
				if (child.Name == "forms") {
					config.CookieName = AttValue ("name", child);
					config.CookiePath = AttValue ("path", child);
					config.LoginUrl = AttValue ("loginUrl", child);
					config.SetProtection (AttValue ("protection", child));
					config.SetTimeout (AttValue ("timeout", child));
#if NET_1_1
					string att = AttValue ("requireSSL", child);
					if (att != null) {
						if (att == "true") {
							config.RequireSSL = true;
						} else if (att == "false") {
							config.RequireSSL = false;
						} else {
							HandlersUtil.ThrowException
								("Invalid value for RequireSSL", child);
						}
					}

					att = AttValue ("slidingExpiration", child);
					if (att != null) {
						if (att == "true") {
							config.SlidingExpiration = true;
						} else if (att == "false") {
							config.SlidingExpiration = false;
						} else {
							HandlersUtil.ThrowException
								("Invalid value for SlidingExpiration", child);
						}
					}
#endif

					ReadCredentials (child.ChildNodes, config);
					continue;
				}

				if (child.Name == "passport") {
					continue;
				}

				HandlersUtil.ThrowException ("Unexpected element", child);
			}

			return config;
		}
		static void ReadCredentials (XmlNodeList nodes, AuthConfig config)
		{
			foreach (XmlNode child in nodes) {
				XmlNodeType ntype = child.NodeType;
				if (ntype != XmlNodeType.Element)
					continue;

				if (child.Name != "credentials")
					HandlersUtil.ThrowException ("Unexpected element", child);

				config.SetPasswordFormat (AttValue ("passwordFormat", child));
				ReadUsers (child.ChildNodes, config.CredentialUsers);
			}
		}