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
- InvokePatternIdentifiers.cs
- EUCJPEncoding.cs
- SelectionUIService.cs
- XmlWriter.cs
- FamilyMapCollection.cs
- AssemblyCache.cs
- XmlEncodedRawTextWriter.cs
- ObjectFullSpanRewriter.cs
- XmlSiteMapProvider.cs
- AttributeSetAction.cs
- UIElementPropertyUndoUnit.cs
- WriteLineDesigner.xaml.cs
- AtomParser.cs
- PathGradientBrush.cs
- RegisteredDisposeScript.cs
- Menu.cs
- LocatorPart.cs
- StyleModeStack.cs
- AttributeParameterInfo.cs
- RegexMatchCollection.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- DataTransferEventArgs.cs
- ConnectionStringSettings.cs
- TypedDatasetGenerator.cs
- ArraySegment.cs
- BasePropertyDescriptor.cs
- HatchBrush.cs
- OleDbTransaction.cs
- ObjRef.cs
- DetailsViewCommandEventArgs.cs
- UnsafeNativeMethodsCLR.cs
- Convert.cs
- ScrollBar.cs
- altserialization.cs
- basevalidator.cs
- ConsoleKeyInfo.cs
- SelectingProviderEventArgs.cs
- ExpressionBuilder.cs
- TypeToken.cs
- TextTreeUndo.cs
- StyleSelector.cs
- DefaultDialogButtons.cs
- MarginCollapsingState.cs
- CookieProtection.cs
- StylusCaptureWithinProperty.cs
- RelatedPropertyManager.cs
- JpegBitmapEncoder.cs
- COM2Properties.cs
- Oci.cs
- basemetadatamappingvisitor.cs
- JsonStringDataContract.cs
- CornerRadiusConverter.cs
- VectorAnimationBase.cs
- QuestionEventArgs.cs
- ResourceExpression.cs
- ProxySimple.cs
- SchemaElementDecl.cs
- SafeRsaProviderHandle.cs
- FrameworkElementFactory.cs
- DataGridViewBindingCompleteEventArgs.cs
- XamlWriter.cs
- PlainXmlWriter.cs
- AsymmetricKeyExchangeDeformatter.cs
- DefaultProxySection.cs
- XmlReader.cs
- WebServicesSection.cs
- InkCanvasSelection.cs
- ScalarConstant.cs
- MenuItemBindingCollection.cs
- RowsCopiedEventArgs.cs
- PolicyStatement.cs
- HScrollBar.cs
- WindowsTokenRoleProvider.cs
- StatusBar.cs
- TagElement.cs
- ComponentGuaranteesAttribute.cs
- WebPartCancelEventArgs.cs
- Filter.cs
- XPathBinder.cs
- SrgsRulesCollection.cs
- SqlColumnizer.cs
- SqlCaseSimplifier.cs
- MonthCalendar.cs
- WebBaseEventKeyComparer.cs
- CodeDesigner.cs
- WindowsHyperlink.cs
- TdsParserSessionPool.cs
- RowCache.cs
- MarkerProperties.cs
- SafeViewOfFileHandle.cs
- CheckableControlBaseAdapter.cs
- ObjectQueryExecutionPlan.cs
- AttributeUsageAttribute.cs
- SqlCacheDependencySection.cs
- RegexRunner.cs
- MembershipUser.cs
- WebRequestModuleElement.cs
- XamlBrushSerializer.cs
- NotFiniteNumberException.cs
- IPHostEntry.cs