Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

Implementing HTTP Basic Authentication

Route around many of the common limitations of traditional forms-based authentication

Most ColdFusion applications that require users to be authenticated follow the pattern laid out in the official ColdFusion documentation and in the ColdFusion MX Developer's Guide.

This HTML forms-based method is perfectly serviceable, but as applications become more complicated it's not uncommon to run across issues with session expiration and deep linking/bookmarking. This article describes an alternative method of implementing user authentication that's based on the mature and time-tested authentication scheme laid out in the original HTTP specification. Without making the application significantly more complex, it can route around many of the most common limitations of traditional forms-based authentication.

An Overview of Forms-Based Authentication
To start off, let's take a look at some typical ColdFusion code that uses forms-based authentication from the point-of-view of a Web browser. A typical application might have code in the Application.cfm file that looks something like this:

<cfif NOT IsDefined("SESSION.login")>
    <cfif NOT IsDefined("FORM.login")>
      <cfinclude template="loginForm.cfm">
      <cfabort>
    <cfelse>
      <!--- Process login information --->
    </cfif>
</cfif>

Let's look at the series of requests and responses that occur between a Web browser (WB) and a server (S) when the user requests a page that's protected by this kind of authentication code:

WB: Please send me the page called /index.cfm.
S: OK, here's the page called /index.cfm. (The server sends a page containing a form with text fields for user name and password and a submit button.)
WB: (After the user fills in the form and clicks the submit button) Here's a POST to the page called /index.cfm.
S: OK, I processed the submission and here's the page called /index.cfm.

Notice how the server claimed the two pages it sent were both /index.cfm? That's an example of one problem with forms-based authentication: it misrepresents the resources identified by URLs. To illustrate another problem, take a look at what happens later, after the user takes a break from using the application and the session expires:

WB: Please send me the page called /administrator/addUser.cfm.
S: OK, here's the page called /administrator/addUser.cfm. (The server sends a page containing a form with text fields for user name and password and a submit button.)

Since the session expired, the server responded to the request by providing the login form again. Even if the form provides some information about why the user needs to log in again, the user may become confused, and at the very least is inconvenienced.

There are other ways to implement forms-based authentication (such as using <cflocation> to redirect the browser to the login form instead of using <cfinclude> to send it in place of the requested page), but the basic issues are the same:

  1. Forms-based authentication misrepresents the resource requested by the browser. Depending on the implementation, it claims the login form is the resource that was requested, or it sometimes claims that the resource requested is located somewhere else (that "somewhere else" being the location of the login form).
  2. It forces the user to understand technical issues like session expiration.
  3. Since it's dependent on session cookies, it's not easily scalable to cluster environments and doesn't work if the browser has cookies disabled.
  4. Since it's dependent on the end user to read the login form and understand that it's not the resource the user requested, it's not compatible with alternative user agents
More Detail: URLs and HTTP Status Codes
What's all this talk about "misrepresenting the resource," you say? It boils down to URLs and status codes.

Each time the browser requests a page, it specifies the exact resource (page) it's requesting. This resource is identified by the URL and a basic tenet of HTTP is that two requests for the same resource (assuming there's no form submission happening) should return exactly the same result (this is closely related to the property of HTTP requests called "idempotency," the principle that GET requests shouldn't change the state of the resource being requested). When the server sometimes sends a login form and sometimes sends the actual page, it's breaking this one-to-one correspondence between the URL and the resource.

Each time the server responds to a request, it sends a status code that very succinctly tells the Web browser the "gist" of its response. Most of the time (when it's serving ColdFusion pages at least), the server sends the status code 200 ("OK"), which means "this page I'm sending you is exactly what you asked for." If instead of executing the page the user requested, the server is sends a login form, it's lying to the browser when it says it found what the user asked for.

When the ColdFusion server processes a <cflocation> tag, it sends the status code 302 ("Found"), which means "the page you're looking for is temporarily located somewhere else and I'm sending you its location." If the address the server sends isn't actually the page the user requested, but a login form, it's lying again.

These distinctions may seem pedantic. But every Web browser since NCSA Mosaic has been raised speaking HTTP as its native language and there's a surprising amount of potential to be leveraged in modern browsers when you respect the true meaning of the terms in that language. And sometimes when you ignore the rules of HTTP you get burned - a notable example of this was when Google released a beta of its Web Accelerator and lots of developers who had ignored the principle of idempotency found that their Web sites were breaking.

Basic Authentication to the Rescue
All the way back at the dawn of the Web (May 1996, to be specific), when Tim Berners-Lee codified the rules of the Hypertext Transfer Protocol (HTTP/1.0), he and his co-authors considered the problem of how to secure resources on the Web and their answer to the problem has come to be known as HTTP Basic Authentication. With Basic authentication, the initial dialogue between Web browser and server looks more like this:

WB: Please send me the page called /index.cfm.
S: Sorry, that page is part of an application called "MyApplication." You can't see that page without providing a user name and password. Here's a page to tell the user why he can't see the page he asked for.
WB: (Prompts the user for a user name and password.) Please send me the page called /index.cfm - and here are the user's credentials to access that page.
S: OK, I processed the credentials and here's the page called /index.cfm.

Doesn't that look like a much more productive exchange than when the server was telling all sorts of lies about the resources it was sending to the browser? In fact it is more productive and here are a few reasons why:

  1. HTTP status codes and URLs are used exactly as they were intended.
  2. Once the browser knows the user's credentials for the application, it can continue to provide them when needed without prompting the user again (more on this below). Depending on your application, this might mean the end of session expiration!
  3. It's not dependent on keeping login credentials in the session scope, so it even works when browsers have cookies disabled. (Your application may still need to use session-scope variables for other purposes.)
  4. It allows alternative clients (such as command-line and automated user agents) to access your application, unlocking the potential for new and exciting uses of the data in your application.
Web Server-Integrated Basic Authentication
Basic authentication doesn't have to be implemented in application code. All the most common Web servers (including Apache and Microsoft's Internet Information Server) allow the administrator to protect resources with Basic authentication by setting some configuration parameters. In some cases, this may be sufficient, but if you want to validate the user login information against an existing user database (the one built into your application, for example), you'll almost certainly find it easier to keep the authentication code integrated with the rest of your application.

More Stories By Patrick Correia

Patrick Correia is a Web developer for Clough Harbour & Associates LLP, an east coast multi-disciplined engineering firm. A Certified Advanced ColdFusion MX Developer based in Albany, New York, he has spent the last five years developing ColdFusion-based business process improvement solutions for the firm's numerous municipal and private clients.

Comments (1) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
MikeR 06/08/06 11:43:56 PM EDT

Interesting article but it failed to mention the huge flaw with basic auth.

Basic authentication can't be used for most real-world sites because:
(1) There is now way for the user to log out short of closing all browser windows.
and (2) There is no practical way for the site to logout or timeout a user.

@ThingsExpo Stories
"When we talk about cloud without compromise what we're talking about is that when people think about 'I need the flexibility of the cloud' - it's the ability to create applications and run them in a cloud environment that's far more flexible,” explained Matthew Finnie, CTO of Interoute, in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
The Internet giants are fully embracing AI. All the services they offer to their customers are aimed at drawing a map of the world with the data they get. The AIs from these companies are used to build disruptive approaches that cannot be used by established enterprises, which are threatened by these disruptions. However, most leaders underestimate the effect this will have on their businesses. In his session at 21st Cloud Expo, Rene Buest, Director Market Research & Technology Evangelism at Ara...
No hype cycles or predictions of zillions of things here. IoT is big. You get it. You know your business and have great ideas for a business transformation strategy. What comes next? Time to make it happen. In his session at @ThingsExpo, Jay Mason, Associate Partner at M&S Consulting, presented a step-by-step plan to develop your technology implementation strategy. He discussed the evaluation of communication standards and IoT messaging protocols, data analytics considerations, edge-to-cloud tec...
New competitors, disruptive technologies, and growing expectations are pushing every business to both adopt and deliver new digital services. This ‘Digital Transformation’ demands rapid delivery and continuous iteration of new competitive services via multiple channels, which in turn demands new service delivery techniques – including DevOps. In this power panel at @DevOpsSummit 20th Cloud Expo, moderated by DevOps Conference Co-Chair Andi Mann, panelists examined how DevOps helps to meet the de...
When growing capacity and power in the data center, the architectural trade-offs between server scale-up vs. scale-out continue to be debated. Both approaches are valid: scale-out adds multiple, smaller servers running in a distributed computing model, while scale-up adds fewer, more powerful servers that are capable of running larger workloads. It’s worth noting that there are additional, unique advantages that scale-up architectures offer. One big advantage is large memory and compute capacity...
With major technology companies and startups seriously embracing Cloud strategies, now is the perfect time to attend 21st Cloud Expo October 31 - November 2, 2017, at the Santa Clara Convention Center, CA, and June 12-14, 2018, at the Javits Center in New York City, NY, and learn what is going on, contribute to the discussions, and ensure that your enterprise is on the right path to Digital Transformation.
Amazon started as an online bookseller 20 years ago. Since then, it has evolved into a technology juggernaut that has disrupted multiple markets and industries and touches many aspects of our lives. It is a relentless technology and business model innovator driving disruption throughout numerous ecosystems. Amazon’s AWS revenues alone are approaching $16B a year making it one of the largest IT companies in the world. With dominant offerings in Cloud, IoT, eCommerce, Big Data, AI, Digital Assista...
Artificial intelligence, machine learning, neural networks. We’re in the midst of a wave of excitement around AI such as hasn’t been seen for a few decades. But those previous periods of inflated expectations led to troughs of disappointment. Will this time be different? Most likely. Applications of AI such as predictive analytics are already decreasing costs and improving reliability of industrial machinery. Furthermore, the funding and research going into AI now comes from a wide range of com...
Internet of @ThingsExpo, taking place October 31 - November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 21st Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The Internet of Things (IoT) is the most profound change in personal and enterprise IT since the creation of the Worldwide Web more than 20 years ago. All major researchers estimate there will be tens of billions devic...
We build IoT infrastructure products - when you have to integrate different devices, different systems and cloud you have to build an application to do that but we eliminate the need to build an application. Our products can integrate any device, any system, any cloud regardless of protocol," explained Peter Jung, Chief Product Officer at Pulzze Systems, in this SYS-CON.tv interview at @ThingsExpo, held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA
SYS-CON Events announced today that Ayehu will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place on October 31 - November 2, 2017 at the Santa Clara Convention Center in Santa Clara California. Ayehu provides IT Process Automation & Orchestration solutions for IT and Security professionals to identify and resolve critical incidents and enable rapid containment, eradication, and recovery from cyber security breaches. Ayehu provides customers greater control over IT infras...
SYS-CON Events announced today that MobiDev, a client-oriented software development company, will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. MobiDev is a software company that develops and delivers turn-key mobile apps, websites, web services, and complex software systems for startups and enterprises. Since 2009 it has grown from a small group of passionate engineers and business...
SYS-CON Events announced today that GrapeUp, the leading provider of rapid product development at the speed of business, will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Grape Up is a software company, specialized in cloud native application development and professional services related to Cloud Foundry PaaS. With five expert teams that operate in various sectors of the market acr...
SYS-CON Events announced today that Enzu will exhibit at SYS-CON's 21st Int\ernational Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Enzu’s mission is to be the leading provider of enterprise cloud solutions worldwide. Enzu enables online businesses to use its IT infrastructure to their competitive advantage. By offering a suite of proven hosting and management services, Enzu wants companies to focus on the core of their ...
SYS-CON Events announced today that Cloud Academy named "Bronze Sponsor" of 21st International Cloud Expo which will take place October 31 - November 2, 2017 at the Santa Clara Convention Center in Santa Clara, CA. Cloud Academy is the industry’s most innovative, vendor-neutral cloud technology training platform. Cloud Academy provides continuous learning solutions for individuals and enterprise teams for Amazon Web Services, Microsoft Azure, Google Cloud Platform, and the most popular cloud com...
SYS-CON Events announced today that IBM has been named “Diamond Sponsor” of SYS-CON's 21st Cloud Expo, which will take place on October 31 through November 2nd 2017 at the Santa Clara Convention Center in Santa Clara, California.
In his session at Cloud Expo, Alan Winters, an entertainment executive/TV producer turned serial entrepreneur, presented a success story of an entrepreneur who has both suffered through and benefited from offshore development across multiple businesses: The smart choice, or how to select the right offshore development partner Warning signs, or how to minimize chances of making the wrong choice Collaboration, or how to establish the most effective work processes Budget control, or how to ma...
SYS-CON Events announced today that CA Technologies has been named "Platinum Sponsor" of SYS-CON's 21st International Cloud Expo®, which will take place October 31-November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. CA Technologies helps customers succeed in a future where every business - from apparel to energy - is being rewritten by software. From planning to development to management to security, CA creates software that fuels transformation for companies in the applic...
Multiple data types are pouring into IoT deployments. Data is coming in small packages as well as enormous files and data streams of many sizes. Widespread use of mobile devices adds to the total. In this power panel at @ThingsExpo, moderated by Conference Chair Roger Strukhoff, panelists looked at the tools and environments that are being put to use in IoT deployments, as well as the team skills a modern enterprise IT shop needs to keep things running, get a handle on all this data, and deliver...
In his session at @ThingsExpo, Eric Lachapelle, CEO of the Professional Evaluation and Certification Board (PECB), provided an overview of various initiatives to certify the security of connected devices and future trends in ensuring public trust of IoT. Eric Lachapelle is the Chief Executive Officer of the Professional Evaluation and Certification Board (PECB), an international certification body. His role is to help companies and individuals to achieve professional, accredited and worldwide re...