|
VB .NET Authentication Program Example
Create a new class library project and you might want to use AuthenticateVB as the solution and project names.
|
Rename the source file to AuthenticateClassSample to reflect the application that will be developed.
Add the following codes.
Imports System Imports System.Net Imports System.Text Imports System.IO Imports System.Collections
Public Class AuthenticateClassSample ' Displays simple usage information for running the sample. Shared Sub usage() Console.WriteLine("usage: Executable_file_name [-r URI] [-u user-name] [-p password] [-d domain]") Console.WriteLine("Available options:") Console.WriteLine(" -r URI URI resource to retrieve") Console.WriteLine(" -u user-name Username to use for authentication") Console.WriteLine(" -p password Password to use for authentication") Console.WriteLine(" -d domain Domain to use for authentication") Console.WriteLine(" -m Displays authentication modules") Console.WriteLine() End Sub
' Retrieves the specified URI with the given credential information. The retrieved resource ' is simply printed to the Console. Shared Sub RetrieveUri(ByVal uriName As String, ByVal creds As NetworkCredential) Dim httpRequest As HttpWebRequest = Nothing Dim httpResponse As HttpWebResponse = Nothing
Try httpRequest = CType(WebRequest.Create(uriName), HttpWebRequest)
Console.WriteLine("Creating web request...") httpRequest.Credentials = creds httpResponse = CType(httpRequest.GetResponse(), HttpWebResponse)
Dim httpReader As StreamReader = New StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8) Dim httpContent As String = httpReader.ReadToEnd()
Console.WriteLine(httpContent) httpReader.Close() Catch wex As WebException Console.WriteLine("Exception occurred: {0}", wex.Message) Console.WriteLine(wex.StackTrace) httpResponse = CType(wex.Response, HttpWebResponse) Finally If (Not IsNothing(httpResponse)) Then httpResponse.Close() End If End Try End Sub
' Enumerates and prints the available authentication modules. Shared Sub DisplayAuthenticationModules() Dim registeredModules As IEnumerator = AuthenticationManager.RegisteredModules Console.WriteLine("Authentication Modules:") While (registeredModules.MoveNext()) Dim currentAuthenticationModule As IAuthenticationModule = CType(registeredModules.Current, IAuthenticationModule)
Console.WriteLine(" Module : {0}", registeredModules.Current) Console.WriteLine(" Supports Pre-Authentication : {0}", currentAuthenticationModule.CanPreAuthenticate) End While End Sub
' This routine parses the command line, creates the user credential object if ' credentials are supplied and issues the request. Shared Sub Main() Dim userCredentials As NetworkCredential = Nothing Dim uriResource As String = "https://www.cert.org" Dim userName As String = "anonymous" Dim passWord As String = "test@yahoo.com" Dim domain As String = Nothing
' Parse the command line Dim args As String() = Environment.GetCommandLineArgs() Dim i As Integer
usage()
For i = 1 To args.GetUpperBound(0) Try Dim CurArg() As Char = args(i).ToCharArray(0, args(i).Length) If (CurArg(0) = "-") Or (CurArg(0) = "/") Then Select Case Char.ToLower(CurArg(1), System.Globalization.CultureInfo.CurrentCulture) Case "d" ' Domain to use for authentication i = i + 1 domain = args(i) Case "m" ' Display registered authentication modules DisplayAuthenticationModules() Case "p" ' Password to use for authentication i = i + 1 passWord = args(i) Case "r" ' URI resource to download (get) i = i + 1 uriResource = args(i) Case "u" ' Username to use for authentication i = i + 1 userName = args(i) Case "x" ' Web proxy to use for all requests i = i + 1 WebRequest.DefaultWebProxy = New WebProxy(args(i)) Case Else usage() Exit Sub End Select End If Catch e As Exception usage() Exit Sub End Try Next ' Make the request Console.WriteLine("Make the request...") Try If ((Not userName Is Nothing) Or (Not passWord Is Nothing) Or (Not domain Is Nothing)) Then userCredentials = New NetworkCredential(userName, passWord, domain) End If RetrieveUri(uriResource, userCredentials) Catch ex As Exception Console.WriteLine("Exception occurred: {0}", ex.Message) Console.WriteLine(ex.StackTrace) End Try End Sub End Class
|
To test this project we need to change the DLL to application (EXE) type project. Select the project folder > Right click mouse > Select Properties context menu. Change the Application type: to Console Application and the Startup object: to Sub Main.
Build the project.
Run the project.
![]() |
|
The following are the sample outputs. You should try running this program against the HTTPS (web) server with username and password.
The .NET Framework Web classes can be accessed from a variety of application types, including console applications, ASP.NET, XML-based Web Services, Windows Forms, and Windows Services. However, it is important to realize that these application models can run under different environments. For example, a Windows Service or ASP.Net application can run under a different user account or impersonate different users, meaning it might not have the ability to change proxy settings or access to certain resources such as certificates.
The threading models also can vary from one application to another. For example, the ASP.NET environment uses a thread pool to satisfy incoming HTTP requests. This thread pool is also used by the HttpWebRequest class. This means that, if you are building a middle-tier application, you should be aware that both the Web server (ASP.NET) and any back-end Web requests issued will share the same limited set of threads and you should adjust the limits accordingly. This is a significant contrast to using HttpWebRequest from within a console-based application where all work is started from a “main” execution thread.
As seen with other .NET network classes, use of the Web classes is restricted depending on where the executable is running from. Table 10-6 lists resources the Web classes can access from the various application zones. For example, an application accessed from an intranet share can only connect back to the same machine on which it is running (the localhost). Notice that version 1.1 of the .NET Framework allows applications run from the Internet zone to access the localhost, whereas this was not allowed in version 1.
Table 10-6: Code Access Permissions for Web Classes
|
|||
.NET Framework Version |
Internet |
Intranet |
Local Machine |
1 |
None |
Localhost |
Anywhere |
1.1 |
Localhost |
Localhost |
Anywhere |