UserAuthenticator is an abstract (MustInherit) base class that defines the authenticator strategy contract and provides two shared static helpers: authenticator selection by host classification (Find) and the already-authenticated short-circuit check (IsAuthenticated). The concrete subclasses ExternalUserAuthenticator and InternalUserAuthenticator are declared in the same source file and implement the internal/external fallback behavior.
Public Shared Function Find(host As String, externalHostNames As String) As UserAuthenticator
Classifies host against externalHostNames (case-insensitive substring match) and returns a new ExternalUserAuthenticator or InternalUserAuthenticator instance.
IsAuthenticated
Public Shared Function IsAuthenticated(user As IPrincipal) As Boolean
Returns true when user is non-null and user.Identity.IsAuthenticated is true.
Authenticate
Public MustOverride Sub Authenticate(WebContext As HttpApplication)
Abstract contract implemented by ExternalUserAuthenticator and InternalUserAuthenticator to perform the concrete authentication attempt and fallback.
Find performs an uppercase-normalized substring match (If(externalHostNames, "").ToUpper().Contains(host.ToUpper())), not an exact host-name comparison — any configured entry containing the host as a substring (or vice versa, since Contains is called on the settings string) causes external classification.*
Both concrete subclasses delegate their cookie-authentication attempt to the shared static CookieAuthenticator.Authenticate method before applying their distinct fallback.
UserAuthenticator cannot be instantiated directly (MustInherit); callers obtain an instance exclusively via Find.
IsAuthenticated and Find are Shared (static) members and do not require an instance.
Note: Statements marked with * were inferred from code structure, naming conventions, or
contextual evidence where direct confirmation was not available in source artifacts.