Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / IdentityModel / System / IdentityModel / Selectors / SecurityTokenResolver.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinkUtilities.cs
- ToolBarButton.cs
- GeometryCollection.cs
- NetPipeSectionData.cs
- JsonFormatWriterGenerator.cs
- TextServicesCompartmentEventSink.cs
- XmlEncoding.cs
- IgnoreFlushAndCloseStream.cs
- EventLogEntryCollection.cs
- AutoGeneratedField.cs
- ModifierKeysValueSerializer.cs
- ResourceType.cs
- activationcontext.cs
- DesignerDataSourceView.cs
- GroupLabel.cs
- WebPartConnectionsCloseVerb.cs
- WebSysDefaultValueAttribute.cs
- WpfMemberInvoker.cs
- WindowsListViewGroupSubsetLink.cs
- XmlSchemaCollection.cs
- VectorValueSerializer.cs
- HttpPostProtocolReflector.cs
- ListControlConvertEventArgs.cs
- SortDescriptionCollection.cs
- AttributeSetAction.cs
- MonikerProxyAttribute.cs
- ToolStripContentPanel.cs
- CompositeControlDesigner.cs
- ObjectReferenceStack.cs
- DocComment.cs
- SrgsElementFactoryCompiler.cs
- IPHostEntry.cs
- ListBoxItem.cs
- FederatedMessageSecurityOverHttpElement.cs
- FocusChangedEventArgs.cs
- XmlAttribute.cs
- BamlBinaryReader.cs
- TableProviderWrapper.cs
- SymmetricKey.cs
- Compilation.cs
- WebPartUtil.cs
- MasterPageCodeDomTreeGenerator.cs
- XPathException.cs
- ErrorWrapper.cs
- Message.cs
- BlurEffect.cs
- UrlMappingCollection.cs
- xamlnodes.cs
- PermissionSet.cs
- AbsoluteQuery.cs
- ScrollBar.cs
- BuildProviderAppliesToAttribute.cs
- XamlVector3DCollectionSerializer.cs
- webbrowsersite.cs
- PointAnimationClockResource.cs
- SafeCoTaskMem.cs
- BooleanFacetDescriptionElement.cs
- XmlTextReaderImplHelpers.cs
- PriorityChain.cs
- AsymmetricSecurityProtocolFactory.cs
- Registry.cs
- Stroke.cs
- HtmlMeta.cs
- SafeNativeMethodsCLR.cs
- CodeAttachEventStatement.cs
- FillBehavior.cs
- ConnectionInterfaceCollection.cs
- DialogWindow.cs
- Int32EqualityComparer.cs
- ProjectionCamera.cs
- DateTimeConverter2.cs
- InputGestureCollection.cs
- EmbeddedMailObject.cs
- TextMarkerSource.cs
- XmlSchemaInfo.cs
- SemaphoreSecurity.cs
- XPathNavigatorKeyComparer.cs
- FormsAuthenticationEventArgs.cs
- TreeSet.cs
- Vector3DValueSerializer.cs
- TrustVersion.cs
- DelegateTypeInfo.cs
- BitmapEffectInput.cs
- ExpressionLink.cs
- DynamicUpdateCommand.cs
- NavigationFailedEventArgs.cs
- ControlPropertyNameConverter.cs
- CDSsyncETWBCLProvider.cs
- Vector3DCollectionConverter.cs
- TextInfo.cs
- SpecialFolderEnumConverter.cs
- DecoderReplacementFallback.cs
- Utils.cs
- PeerSecurityHelpers.cs
- TemplateBindingExpressionConverter.cs
- PrintPreviewDialog.cs
- Authorization.cs
- DynamicDiscoveryDocument.cs
- PersistNameAttribute.cs
- PropertyInfoSet.cs