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
- NameValuePair.cs
- WmlControlAdapter.cs
- SR.cs
- DataServiceRequestOfT.cs
- ResXBuildProvider.cs
- UriTemplateVariableQueryValue.cs
- ForeignConstraint.cs
- ConfigXmlCDataSection.cs
- VirtualDirectoryMappingCollection.cs
- EntityClientCacheEntry.cs
- SatelliteContractVersionAttribute.cs
- DtrList.cs
- ScrollBar.cs
- NonClientArea.cs
- ParameterElement.cs
- MailHeaderInfo.cs
- QuaternionAnimation.cs
- ArithmeticLiteral.cs
- ObjectDataProvider.cs
- EventLogPermissionEntry.cs
- DrawingAttributes.cs
- cache.cs
- ThicknessKeyFrameCollection.cs
- XmlCDATASection.cs
- OperatorExpressions.cs
- PaginationProgressEventArgs.cs
- HttpHostedTransportConfiguration.cs
- Parser.cs
- SearchForVirtualItemEventArgs.cs
- ToggleProviderWrapper.cs
- ListViewHitTestInfo.cs
- RawAppCommandInputReport.cs
- UrlPropertyAttribute.cs
- ElementProxy.cs
- TextDpi.cs
- SafeBitVector32.cs
- AdornedElementPlaceholder.cs
- TypeUnloadedException.cs
- PersonalizationProviderCollection.cs
- OpCopier.cs
- PkcsMisc.cs
- QuaternionRotation3D.cs
- ItemMap.cs
- HtmlShimManager.cs
- StorageModelBuildProvider.cs
- LinkButton.cs
- RepeatBehaviorConverter.cs
- EncryptedKeyIdentifierClause.cs
- DataBoundLiteralControl.cs
- EntityContainerEntitySet.cs
- TabItemWrapperAutomationPeer.cs
- HtmlInputRadioButton.cs
- EventItfInfo.cs
- CodePropertyReferenceExpression.cs
- DesignerActionUI.cs
- SQLDecimalStorage.cs
- ScaleTransform3D.cs
- SqlResolver.cs
- Block.cs
- AbstractDataSvcMapFileLoader.cs
- OLEDB_Util.cs
- QuotaThrottle.cs
- DbCommandTree.cs
- ReachDocumentReferenceSerializer.cs
- XmlHierarchicalDataSourceView.cs
- SHA1.cs
- RSAPKCS1SignatureFormatter.cs
- ClonableStack.cs
- SafeSecurityHelper.cs
- WebPartCatalogCloseVerb.cs
- UIElement3D.cs
- _Events.cs
- Quack.cs
- UnlockInstanceAsyncResult.cs
- SchemaImporterExtension.cs
- BevelBitmapEffect.cs
- CachedRequestParams.cs
- LinkClickEvent.cs
- X509UI.cs
- GrammarBuilderBase.cs
- _NetRes.cs
- GlobalAllocSafeHandle.cs
- SqlProfileProvider.cs
- AssemblyContextControlItem.cs
- SqlExpander.cs
- SynchronizedInputPattern.cs
- XmlSchemaSequence.cs
- SequenceQuery.cs
- TextTreeNode.cs
- InstanceKeyCompleteException.cs
- TypeBinaryExpression.cs
- NCryptNative.cs
- SoapFault.cs
- WebServiceTypeData.cs
- ProxyHelper.cs
- DocumentPageView.cs
- StreamAsIStream.cs
- DateRangeEvent.cs
- EventSetter.cs
- ProgressBar.cs