//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; using Validation; /// /// Reads client authentication information from the HTTP Authorization header via Basic authentication. /// public class ClientCredentialHttpBasicReader : ClientAuthenticationModule { /// /// Gets this module's contribution to an HTTP 401 WWW-Authenticate header so the client knows what kind of authentication this module supports. /// public override string AuthenticateHeader { get { return string.Format(CultureInfo.InvariantCulture, "Basic realm=\"{0}\"", this.Realm); } } /// /// Gets or sets the realm that is included in an HTTP WWW-Authenticate header included in a 401 Unauthorized response. /// public string Realm { get; set; } /// /// Attempts to extract client identification/authentication information from a message. /// /// The authorization server host. /// The incoming message. /// Receives the client identifier, if one was found. /// The level of the extracted client information. public override ClientAuthenticationResult TryAuthenticateClient(IAuthorizationServerHost authorizationServerHost, AuthenticatedClientRequestBase requestMessage, out string clientIdentifier) { Requires.NotNull(authorizationServerHost, "authorizationServerHost"); Requires.NotNull(requestMessage, "requestMessage"); var credential = OAuthUtilities.ParseHttpBasicAuth(requestMessage.Headers); if (credential != null) { clientIdentifier = credential.UserName; return TryAuthenticateClientBySecret(authorizationServerHost, credential.UserName, credential.Password); } clientIdentifier = null; return ClientAuthenticationResult.NoAuthenticationRecognized; } } }