|
This ASP.NET Members Administration page assists
in using a single subfolder for "members only" access, and in administering
which users are allowed access. No database is required.

Introduction
When building web sites, it is often requested to have a so-called "members
only" section, which is password protected.
The code in this project helps to implement "members only" access.
You can easily administer (see the image above) which users are allowed (add, modify
and delete users) in a single page.
This is done through ASP.NET Forms authentication, which is the most flexible for
applications on the web. In this project, the user names and passwords are stored
in web.config. Therefore, no database is needed.
As soon as a file with the extension aspx is stored in a special "members"
subfolder, automatically, it will be protected.
The user administration in this project is done in a single ASP.NET page (admin.aspx).
The data is saved in the web.config file.
Any user that is authenticated can add new users, delete existing ones, and reset
passwords.
Of course, existing passwords can not be read, nor can they be changed without this
being detected by the user.
Using the code
You don't need any programming knowledge to implement this project. Just copy the
sample files to your website.
web.config and login.aspx should be in the root folder, admin.aspx should be in
the protected folder.
Both index.aspx files (one in the root and one in the protected folder) are provided
as samples. You should replace them with your own content.
To make it work on your site, move all files that should be protected (all files
that are "members only") into the "Members" folder, and rename
them with the .aspx extension (instead of .htm or .html). Of course, all links referring
these files should be updated too. Most HTML editors can do this automatically.
In the downloadable sample code, two users are already configured:
1) the user "admin", password "admin"
2) the user "John", password "123"
Log on with one of these credentials in order to add your own name and password.
Use this page URL: http://www.sitename.com/members/admin.aspx
(replace www.sitename.com with your own hostname).
The section that is protected is currently hard-coded as "Members".
When you want to use another folder for this section, then you have to modify the
project in 3 places:
- Rename the folder itself (or move the admin.aspx file to the other folder)
- Change the value of the "path" attribute for the "location"
element in web.config
- Modify the XPath-search string that is used twice in admin.aspx. Replace the word
"members" by the name of the folder that you use.
How it works
The authentication process is pretty straightforward, and can be found in most ASP.NET
tutorials.
First of all, ASP.NET Forms authentication is set in the web.config file (placed
in the root folder of the web site).
Users are added to the <credentials> element, with an encrypted password.
The program will update a section in web.config similar to this one:
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="login.aspx" protection="All" timeout="999999">
<credentials passwordFormat="MD5">
<user name="admin" password="21232F297A57A5A743894A0E4A801FC3" />
<user name="John" password="202CB962AC59075B964B07152D234B70" />
</credentials>
</forms>
</authentication>
Of course, from now on, you can add users and encrypted passwords through the administration
web page.
Once the credentials are added, the access is authorized for all users to all folders,
except to the special "members" folder.
This is the section that makes this happen, as produced by the program:
<location path="members">
<system.web>
<authorization>
<allow users="admin" />
<allow users="John" />
<deny users="*" />
</authorization>
</system.web>
</location>
As an example, here's the procedure in VB.NET to modify a password in web.config:
Function ModifyPasswordInConfigFile(strUsername As String,strHash As String) As Boolean
ModifyPasswordInConfigFile = False
If (strUsername <> "") Then
Try
Dim doc As New XmlDocument()
doc.Load(Server.MapPath("../web.config"))
Dim strSel As String
strSel = "/configuration/system.web/authentication/forms/credentials/user[@name='" & _
strUserName & "']"
Dim node As XmlNode = doc.SelectSingleNode(strSel)
Dim element As XmlElement = CType(node,XmlElement)
element.SetAttribute("password",strHash)
doc.Save(Server.MapPath("../web.config"))
ModifyPasswordInConfigFile = True
Catch ex As Exception
Trace.Warn(ex.ToString())
End Try
End If
End Function
Future
Here are some ideas for improvement:
- Prevent users from deleting themselves.
- Differentiate into 2 levels of users: simple users and administrators
- Extend the protection to HTML files, images, databases, etc.
- Add an option to add roles as well
- Add a textbox to choose the name of the "Members" folder
If anyone decides to extend this, or has any comments or questions then it would
be great to hear from you.
Points of interest
The code shows how to easily look up and modify elements in web.config configuration
files (or other XML files) by using XPath query strings.
History
This is the first version 1.0.
|