Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Net / System / Net / _BasicClient.cs / 1 / _BasicClient.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System.Text; using System.Globalization; using System.Security.Permissions; internal class BasicClient : IAuthenticationModule { internal const string AuthType = "Basic"; internal static string Signature = AuthType.ToLower(CultureInfo.InvariantCulture); internal static int SignatureSize = Signature.Length; public Authorization Authenticate(string challenge, WebRequest webRequest, ICredentials credentials) { GlobalLog.Print("BasicClient::Authenticate(): " + challenge); GlobalLog.Assert(credentials != null, "BasicClient::Authenticate()|credentials == null"); #if !FEATURE_PAL if (credentials==null || credentials is SystemNetworkCredential) { #else if (credentials==null) { #endif // !FEATURE_PAL return null; } HttpWebRequest httpWebRequest = webRequest as HttpWebRequest; GlobalLog.Assert(httpWebRequest != null, "BasicClient::Authenticate()|httpWebRequest == null"); if (httpWebRequest==null || httpWebRequest.ChallengedUri==null) { // // there has been no challenge: // 1) the request never went on the wire // 2) somebody other than us is calling into AuthenticationManager // return null; } int index = AuthenticationManager.FindSubstringNotInQuotes(challenge, Signature); if (index < 0) { return null; } return Lookup(httpWebRequest, credentials); } public bool CanPreAuthenticate { get { return true; } } public Authorization PreAuthenticate(WebRequest webRequest, ICredentials credentials) { GlobalLog.Print("BasicClient::PreAuthenticate()"); GlobalLog.Assert(credentials != null, "BasicClient::Authenticate()|credentials == null"); #if !FEATURE_PAL if (credentials==null || credentials is SystemNetworkCredential) { #else if (credentials==null) { #endif // !FEATURE_PAL return null; } HttpWebRequest httpWebRequest = webRequest as HttpWebRequest; GlobalLog.Assert(httpWebRequest != null, "BasicClient::Authenticate()|httpWebRequest == null"); if (httpWebRequest==null) { return null; } return Lookup(httpWebRequest, credentials); } public string AuthenticationType { get { return AuthType; } } private Authorization Lookup(HttpWebRequest httpWebRequest, ICredentials credentials) { GlobalLog.Print("BasicClient::Lookup(): ChallengedUri:" + httpWebRequest.ChallengedUri.ToString()); NetworkCredential NC = credentials.GetCredential(httpWebRequest.ChallengedUri, Signature); GlobalLog.Print("BasicClient::Lookup() GetCredential() returns:" + ValidationHelper.ToString(NC)); if (NC==null) { return null; } ICredentialPolicy policy = AuthenticationManager.CredentialPolicy; if (policy != null && !policy.ShouldSendCredential(httpWebRequest.ChallengedUri, httpWebRequest, NC, this)) return null; string username = NC.InternalGetUserName(); string domain = NC.InternalGetDomain(); if (ValidationHelper.IsBlankString(username)) { return null; } string rawString = ((!ValidationHelper.IsBlankString(domain)) ? (domain + "\\") : "") + username + ":" + NC.InternalGetPassword(); // The response is an "Authorization:" header where the value is // the text "Basic" followed by BASE64 encoded (as defined by RFC1341) value byte[] bytes = EncodingRightGetBytes(rawString); string responseHeader = BasicClient.AuthType + " " + Convert.ToBase64String(bytes); return new Authorization(responseHeader, true); } internal static byte[] EncodingRightGetBytes(string rawString) { GlobalLog.Enter("BasicClient::EncodingRightGetBytes", "[" + rawString.Length.ToString() + ":" + rawString + "]"); // // in order to know if there will not be any '?' translations (which means // we should use the Default Encoding) we need to attempt encoding and then decoding. //this is a limitation only on win9x, if we ever drop support for this platform there might be // a more efficient way of doing this. // GlobalLog.Print("BasicClient::EncodingRightGetBytes(): Default Encoding is:" + Encoding.Default.EncodingName); byte[] bytes = Encoding.Default.GetBytes(rawString); string rawCopy = Encoding.Default.GetString(bytes); bool canMapToCurrentCodePage = string.Compare(rawString, rawCopy, StringComparison.Ordinal)==0; GlobalLog.Print("BasicClient::EncodingRightGetBytes(): canMapToCurrentCodePage:" + canMapToCurrentCodePage.ToString()); //// if mapping to the current code page leaves characters out of the // [0x00, 0xFF] range, then we need to use the new encoding that IIS6.0 // will support. do it when they decide it's good enough. // if (!canMapToCurrentCodePage) { //// for now throw. when IIS 6.0 adds support test it. // GlobalLog.LeaveException("BasicClient::EncodingRightGetBytes", ExceptionHelper.MethodNotSupportedException); throw ExceptionHelper.MethodNotSupportedException; /* GlobalLog.Print("BasicClient::EncodingRightGetBytes(): using:" + Encoding.UTF8.EncodingName); bytes = Encoding.UTF8.GetBytes(rawString); string blob = "=?utf-8?B?" + Convert.ToBase64String(bytes) + "?="; bytes = Encoding.ASCII.GetBytes(blob); */ } GlobalLog.Dump(bytes); GlobalLog.Leave("BasicClient::EncodingRightGetBytes", bytes.Length.ToString()); return bytes; } }; // class BasicClient } // namespace System.Net // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System.Text; using System.Globalization; using System.Security.Permissions; internal class BasicClient : IAuthenticationModule { internal const string AuthType = "Basic"; internal static string Signature = AuthType.ToLower(CultureInfo.InvariantCulture); internal static int SignatureSize = Signature.Length; public Authorization Authenticate(string challenge, WebRequest webRequest, ICredentials credentials) { GlobalLog.Print("BasicClient::Authenticate(): " + challenge); GlobalLog.Assert(credentials != null, "BasicClient::Authenticate()|credentials == null"); #if !FEATURE_PAL if (credentials==null || credentials is SystemNetworkCredential) { #else if (credentials==null) { #endif // !FEATURE_PAL return null; } HttpWebRequest httpWebRequest = webRequest as HttpWebRequest; GlobalLog.Assert(httpWebRequest != null, "BasicClient::Authenticate()|httpWebRequest == null"); if (httpWebRequest==null || httpWebRequest.ChallengedUri==null) { // // there has been no challenge: // 1) the request never went on the wire // 2) somebody other than us is calling into AuthenticationManager // return null; } int index = AuthenticationManager.FindSubstringNotInQuotes(challenge, Signature); if (index < 0) { return null; } return Lookup(httpWebRequest, credentials); } public bool CanPreAuthenticate { get { return true; } } public Authorization PreAuthenticate(WebRequest webRequest, ICredentials credentials) { GlobalLog.Print("BasicClient::PreAuthenticate()"); GlobalLog.Assert(credentials != null, "BasicClient::Authenticate()|credentials == null"); #if !FEATURE_PAL if (credentials==null || credentials is SystemNetworkCredential) { #else if (credentials==null) { #endif // !FEATURE_PAL return null; } HttpWebRequest httpWebRequest = webRequest as HttpWebRequest; GlobalLog.Assert(httpWebRequest != null, "BasicClient::Authenticate()|httpWebRequest == null"); if (httpWebRequest==null) { return null; } return Lookup(httpWebRequest, credentials); } public string AuthenticationType { get { return AuthType; } } private Authorization Lookup(HttpWebRequest httpWebRequest, ICredentials credentials) { GlobalLog.Print("BasicClient::Lookup(): ChallengedUri:" + httpWebRequest.ChallengedUri.ToString()); NetworkCredential NC = credentials.GetCredential(httpWebRequest.ChallengedUri, Signature); GlobalLog.Print("BasicClient::Lookup() GetCredential() returns:" + ValidationHelper.ToString(NC)); if (NC==null) { return null; } ICredentialPolicy policy = AuthenticationManager.CredentialPolicy; if (policy != null && !policy.ShouldSendCredential(httpWebRequest.ChallengedUri, httpWebRequest, NC, this)) return null; string username = NC.InternalGetUserName(); string domain = NC.InternalGetDomain(); if (ValidationHelper.IsBlankString(username)) { return null; } string rawString = ((!ValidationHelper.IsBlankString(domain)) ? (domain + "\\") : "") + username + ":" + NC.InternalGetPassword(); // The response is an "Authorization:" header where the value is // the text "Basic" followed by BASE64 encoded (as defined by RFC1341) value byte[] bytes = EncodingRightGetBytes(rawString); string responseHeader = BasicClient.AuthType + " " + Convert.ToBase64String(bytes); return new Authorization(responseHeader, true); } internal static byte[] EncodingRightGetBytes(string rawString) { GlobalLog.Enter("BasicClient::EncodingRightGetBytes", "[" + rawString.Length.ToString() + ":" + rawString + "]"); // // in order to know if there will not be any '?' translations (which means // we should use the Default Encoding) we need to attempt encoding and then decoding. //this is a limitation only on win9x, if we ever drop support for this platform there might be // a more efficient way of doing this. // GlobalLog.Print("BasicClient::EncodingRightGetBytes(): Default Encoding is:" + Encoding.Default.EncodingName); byte[] bytes = Encoding.Default.GetBytes(rawString); string rawCopy = Encoding.Default.GetString(bytes); bool canMapToCurrentCodePage = string.Compare(rawString, rawCopy, StringComparison.Ordinal)==0; GlobalLog.Print("BasicClient::EncodingRightGetBytes(): canMapToCurrentCodePage:" + canMapToCurrentCodePage.ToString()); //// if mapping to the current code page leaves characters out of the // [0x00, 0xFF] range, then we need to use the new encoding that IIS6.0 // will support. do it when they decide it's good enough. // if (!canMapToCurrentCodePage) { //// for now throw. when IIS 6.0 adds support test it. // GlobalLog.LeaveException("BasicClient::EncodingRightGetBytes", ExceptionHelper.MethodNotSupportedException); throw ExceptionHelper.MethodNotSupportedException; /* GlobalLog.Print("BasicClient::EncodingRightGetBytes(): using:" + Encoding.UTF8.EncodingName); bytes = Encoding.UTF8.GetBytes(rawString); string blob = "=?utf-8?B?" + Convert.ToBase64String(bytes) + "?="; bytes = Encoding.ASCII.GetBytes(blob); */ } GlobalLog.Dump(bytes); GlobalLog.Leave("BasicClient::EncodingRightGetBytes", bytes.Length.ToString()); return bytes; } }; // class BasicClient } // namespace System.Net // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AbstractExpressions.cs
- FileInfo.cs
- ReplacementText.cs
- ObjectNavigationPropertyMapping.cs
- XmlSchemaType.cs
- CompleteWizardStep.cs
- MenuItem.cs
- StrongName.cs
- AddInAttribute.cs
- SafeHandles.cs
- ScriptingSectionGroup.cs
- Win32.cs
- SecurityContextTokenCache.cs
- MessageHeaderDescription.cs
- Win32SafeHandles.cs
- PathTooLongException.cs
- PropertyDescriptorCollection.cs
- OutputScope.cs
- TextServicesCompartmentContext.cs
- XmlExceptionHelper.cs
- GroupByExpressionRewriter.cs
- LockCookie.cs
- Border.cs
- MenuItemBinding.cs
- sqlstateclientmanager.cs
- DataGridViewCellEventArgs.cs
- TemplatePropertyEntry.cs
- EditorZoneBase.cs
- WorkItem.cs
- FixedPageAutomationPeer.cs
- ComplexPropertyEntry.cs
- TextLineBreak.cs
- TraceContextEventArgs.cs
- GetCertificateRequest.cs
- RowToParametersTransformer.cs
- RegistrationServices.cs
- UrlAuthFailedErrorFormatter.cs
- TableLayoutPanelCodeDomSerializer.cs
- SafeMILHandle.cs
- ClientApiGenerator.cs
- JapaneseCalendar.cs
- SQLCharsStorage.cs
- ScrollChrome.cs
- Journaling.cs
- MDIControlStrip.cs
- TextElementEditingBehaviorAttribute.cs
- CapacityStreamGeometryContext.cs
- ScriptResourceAttribute.cs
- Geometry.cs
- DecimalConverter.cs
- QuestionEventArgs.cs
- Constants.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- BuildProvider.cs
- ColumnWidthChangedEvent.cs
- EntityConnection.cs
- _ScatterGatherBuffers.cs
- SessionViewState.cs
- ScrollContentPresenter.cs
- MemberHolder.cs
- AudioFormatConverter.cs
- HttpCacheVaryByContentEncodings.cs
- DetailsViewPagerRow.cs
- HttpMethodConstraint.cs
- ActivityDesignerAccessibleObject.cs
- ArgumentsParser.cs
- SqlFacetAttribute.cs
- XmlSerializerOperationGenerator.cs
- BitStream.cs
- KnownAssemblyEntry.cs
- SafeRegistryKey.cs
- QilGenerator.cs
- FileDialogCustomPlacesCollection.cs
- PreviewPrintController.cs
- TabletDevice.cs
- SessionEndingCancelEventArgs.cs
- Rethrow.cs
- RTLAwareMessageBox.cs
- Rotation3DAnimationBase.cs
- Stylus.cs
- XmlEncodedRawTextWriter.cs
- FileLevelControlBuilderAttribute.cs
- IisTraceWebEventProvider.cs
- SmtpDigestAuthenticationModule.cs
- ChildDocumentBlock.cs
- XmlUTF8TextWriter.cs
- DesignerAutoFormatStyle.cs
- StorageAssociationSetMapping.cs
- ErrorTolerantObjectWriter.cs
- AdPostCacheSubstitution.cs
- EventSinkHelperWriter.cs
- Transform3D.cs
- Formatter.cs
- MenuItemCollectionEditor.cs
- ToolBarButton.cs
- NativeCppClassAttribute.cs
- PropertyCollection.cs
- XmlNodeWriter.cs
- validationstate.cs
- DelegateArgumentReference.cs