Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Selectors / SecurityTokenResolver.cs / 1 / SecurityTokenResolver.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.IdentityModel.Selectors { using System.Collections.ObjectModel; using System.IdentityModel.Tokens; public abstract class SecurityTokenResolver { public SecurityToken ResolveToken(SecurityKeyIdentifier keyIdentifier) { if (keyIdentifier == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifier"); } SecurityToken token; if (!this.TryResolveTokenCore(keyIdentifier, out token)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.GetString(SR.UnableToResolveTokenReference, keyIdentifier))); } return token; } public bool TryResolveToken(SecurityKeyIdentifier keyIdentifier, out SecurityToken token) { if (keyIdentifier == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifier"); } return TryResolveTokenCore(keyIdentifier, out token); } public SecurityToken ResolveToken(SecurityKeyIdentifierClause keyIdentifierClause) { if (keyIdentifierClause == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); } SecurityToken token; if (!this.TryResolveTokenCore(keyIdentifierClause, out token)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.GetString(SR.UnableToResolveTokenReference, keyIdentifierClause))); } return token; } public bool TryResolveToken(SecurityKeyIdentifierClause keyIdentifierClause, out SecurityToken token) { if (keyIdentifierClause == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); } return this.TryResolveTokenCore(keyIdentifierClause, out token); } public SecurityKey ResolveSecurityKey(SecurityKeyIdentifierClause keyIdentifierClause) { if (keyIdentifierClause == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); } SecurityKey key; if (!this.TryResolveSecurityKeyCore(keyIdentifierClause, out key)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.GetString(SR.UnableToResolveKeyReference, keyIdentifierClause))); } return key; } public bool TryResolveSecurityKey(SecurityKeyIdentifierClause keyIdentifierClause, out SecurityKey key) { if (keyIdentifierClause == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); } return this.TryResolveSecurityKeyCore(keyIdentifierClause, out key); } // protected methods protected abstract bool TryResolveTokenCore(SecurityKeyIdentifier keyIdentifier, out SecurityToken token); protected abstract bool TryResolveTokenCore(SecurityKeyIdentifierClause keyIdentifierClause, out SecurityToken token); protected abstract bool TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause, out SecurityKey key); public static SecurityTokenResolver CreateDefaultSecurityTokenResolver(ReadOnlyCollectiontokens, bool canMatchLocalId) { return new SimpleTokenResolver(tokens, canMatchLocalId); } class SimpleTokenResolver : SecurityTokenResolver { ReadOnlyCollection tokens; bool canMatchLocalId; public SimpleTokenResolver(ReadOnlyCollection tokens, bool canMatchLocalId) { if (tokens == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("tokens"); this.tokens = tokens; this.canMatchLocalId = canMatchLocalId; } protected override bool TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause, out SecurityKey key) { if (keyIdentifierClause == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); key = null; for (int i = 0; i < this.tokens.Count; ++i) { SecurityKey securityKey = this.tokens[i].ResolveKeyIdentifierClause(keyIdentifierClause); if (securityKey != null) { key = securityKey; return true; } } if (keyIdentifierClause is EncryptedKeyIdentifierClause) { EncryptedKeyIdentifierClause keyClause = (EncryptedKeyIdentifierClause)keyIdentifierClause; SecurityKeyIdentifier keyIdentifier = keyClause.EncryptingKeyIdentifier; if (keyIdentifier != null && keyIdentifier.Count > 0) { for (int i = 0; i < keyIdentifier.Count; i++) { SecurityKey unwrappingSecurityKey = null; if (TryResolveSecurityKey(keyIdentifier[i], out unwrappingSecurityKey)) { byte[] wrappedKey = keyClause.GetEncryptedKey(); string wrappingAlgorithm = keyClause.EncryptionMethod; byte[] unwrappedKey = unwrappingSecurityKey.DecryptKey(wrappingAlgorithm, wrappedKey); key = new InMemorySymmetricSecurityKey(unwrappedKey, false); return true; } } } } return key != null; } protected override bool TryResolveTokenCore(SecurityKeyIdentifier keyIdentifier, out SecurityToken token) { if (keyIdentifier == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifier"); token = null; for (int i = 0; i < keyIdentifier.Count; ++i) { SecurityToken securityToken = ResolveSecurityToken(keyIdentifier[i]); if (securityToken != null) { token = securityToken; break; } } return (token != null); } protected override bool TryResolveTokenCore(SecurityKeyIdentifierClause keyIdentifierClause, out SecurityToken token) { if (keyIdentifierClause == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); token = null; SecurityToken securityToken = ResolveSecurityToken(keyIdentifierClause); if (securityToken != null) token = securityToken; return (token != null); } SecurityToken ResolveSecurityToken(SecurityKeyIdentifierClause keyIdentifierClause) { if (keyIdentifierClause == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("keyIdentifierClause"); if (!this.canMatchLocalId && keyIdentifierClause is LocalIdKeyIdentifierClause) return null; for (int i = 0; i < this.tokens.Count; ++i) { if (this.tokens[i].MatchesKeyIdentifierClause(keyIdentifierClause)) return this.tokens[i]; } return null; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EmbeddedObject.cs
- XmlChildEnumerator.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- LinqDataSourceInsertEventArgs.cs
- AssociationSetEnd.cs
- StructuredCompositeActivityDesigner.cs
- XomlCompilerHelpers.cs
- UpdateRecord.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- FtpRequestCacheValidator.cs
- CultureTable.cs
- TraceUtils.cs
- SerializationFieldInfo.cs
- WaitHandleCannotBeOpenedException.cs
- ProgressPage.cs
- ApplicationProxyInternal.cs
- WS2007HttpBinding.cs
- CompilerResults.cs
- DelegateSerializationHolder.cs
- EmptyControlCollection.cs
- WebConfigurationManager.cs
- Crypto.cs
- PeerCollaborationPermission.cs
- CompilerGeneratedAttribute.cs
- OleDbMetaDataFactory.cs
- namescope.cs
- ConvertEvent.cs
- InteropDesigner.xaml.cs
- TraceHwndHost.cs
- PipelineModuleStepContainer.cs
- RoleManagerModule.cs
- Formatter.cs
- EarlyBoundInfo.cs
- StyleCollectionEditor.cs
- GeometryCollection.cs
- FontCollection.cs
- MenuItem.cs
- EnterpriseServicesHelper.cs
- Timeline.cs
- ExpressionStringBuilder.cs
- BufferBuilder.cs
- SessionEndingCancelEventArgs.cs
- SimplePropertyEntry.cs
- DesignSurfaceManager.cs
- ColorConverter.cs
- InsufficientExecutionStackException.cs
- InkCanvasSelectionAdorner.cs
- RenderCapability.cs
- PropertyPath.cs
- ScriptReference.cs
- FlowDocumentView.cs
- TrustManagerPromptUI.cs
- ServiceDeploymentInfo.cs
- ConfigurationStrings.cs
- SafeRightsManagementSessionHandle.cs
- ListBase.cs
- XmlNodeComparer.cs
- ColorAnimation.cs
- WindowsListViewItem.cs
- DataGridState.cs
- IndexedSelectQueryOperator.cs
- PageAdapter.cs
- HtmlSelect.cs
- SafeNativeMethods.cs
- XDRSchema.cs
- UrlAuthFailedErrorFormatter.cs
- ClientSession.cs
- DependencyPropertyValueSerializer.cs
- ExtensionSurface.cs
- SqlUserDefinedTypeAttribute.cs
- MediaContextNotificationWindow.cs
- RowTypePropertyElement.cs
- Directory.cs
- SharedUtils.cs
- XmlSchemaFacet.cs
- PointLightBase.cs
- DependencyPropertyHelper.cs
- WebPartConnectionCollection.cs
- SoapBinding.cs
- StrokeCollectionConverter.cs
- StringDictionaryWithComparer.cs
- SerializerDescriptor.cs
- IssuedTokenServiceElement.cs
- FastEncoderWindow.cs
- WindowsListView.cs
- ListenUriMode.cs
- SetStoryboardSpeedRatio.cs
- PropertyGridCommands.cs
- AsyncCompletedEventArgs.cs
- IsolatedStorageException.cs
- ContainerActivationHelper.cs
- ErrorTableItemStyle.cs
- GradientSpreadMethodValidation.cs
- XPathException.cs
- SqlDataSourceStatusEventArgs.cs
- SafeFileMapViewHandle.cs
- LoginCancelEventArgs.cs
- UnsafeNativeMethodsCLR.cs
- FormViewCommandEventArgs.cs
- PageSetupDialog.cs