Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / TransactionBridge / Microsoft / Transactions / Wsat / Messaging / SupportingTokenSecurityTokenResolver.cs / 1 / SupportingTokenSecurityTokenResolver.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
// Defines an implementation of SecurityTokenResolver that provides per-message resolution
// of SCTs for incoming supporting tokens
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Security.Tokens;
using System.ServiceModel.Transactions;
using System.Xml;
namespace Microsoft.Transactions.Wsat.Messaging
{
class SupportingTokenSecurityTokenResolver : SecurityTokenResolver, ISecurityContextSecurityTokenCache
{
// Note - this works because we understand our fixed binding set and we know we
// won't switch threads between the following two steps in receiving a message:
// - Our SupportingTokenXXXChannel element being called
// - The SecurityChannel calling ISecurityContextSecurityTokenCache.GetContext
[ThreadStatic]
static SecurityContextSecurityToken currentSct;
public bool FaultInSupportingToken(Message message)
{
DebugTrace.TraceEnter(this, "FaultInSupportingToken");
bool found = false;
WsatRegistrationHeader header = ReadRegistrationHeader(message);
if (header == null ||
header.TransactionId == Guid.Empty ||
string.IsNullOrEmpty(header.TokenId))
{
if (DebugTrace.Warning)
DebugTrace.Trace(TraceLevel.Warning,
"Invalid or absent RegisterInfo in register message");
}
else
{
currentSct = DeriveToken(header.TransactionId, header.TokenId);
found = true;
if (DebugTrace.Verbose)
DebugTrace.Trace(TraceLevel.Verbose,
"Created SCT with id {0} for transaction {1}",
header.TokenId,
header.TransactionId);
}
DebugTrace.TraceLeave(this, "FaultInSupportingToken");
return found;
}
WsatRegistrationHeader ReadRegistrationHeader(Message message)
{
WsatRegistrationHeader header = null;
try
{
header = WsatRegistrationHeader.ReadFrom(message);
}
catch (InvalidEnlistmentHeaderException e)
{
DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Error);
if (DebugTrace.Error)
DebugTrace.Trace(TraceLevel.Error,
"Invalid RegisterInfo header found in register message: {0}",
e.Message);
}
return header;
}
SecurityContextSecurityToken DeriveToken(Guid transactionId, string tokenId)
{
byte[] derivedKey = CoordinationServiceSecurity.DeriveIssuedTokenKey(transactionId, tokenId);
DateTime now = DateTime.UtcNow;
return new SecurityContextSecurityToken(new UniqueId(tokenId),
derivedKey,
now,
now + TimeSpan.FromMinutes(5));
}
//
// SecurityTokenResolver overrides
//
protected override bool TryResolveTokenCore(SecurityKeyIdentifier keyIdentifier,
out SecurityToken token)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
protected override bool TryResolveTokenCore(SecurityKeyIdentifierClause keyIdentifierClause,
out SecurityToken token)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
protected override bool TryResolveSecurityKeyCore(SecurityKeyIdentifierClause keyIdentifierClause,
out SecurityKey key)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
//
// ISecurityContextSecurityTokenCache implementation
public void AddContext(SecurityContextSecurityToken token)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
public void ClearContexts()
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
public Collection GetAllContexts(UniqueId contextId)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
public SecurityContextSecurityToken GetContext(UniqueId contextId, UniqueId generation)
{
DebugTrace.TraceEnter(this, "GetContext");
SecurityContextSecurityToken sct = null;
if (currentSct != null &&
currentSct.ContextId == contextId &&
currentSct.KeyGeneration == generation)
{
if (DebugTrace.Verbose)
DebugTrace.Trace(TraceLevel.Verbose,
"Found SCT with matching id {0}",
contextId);
sct = currentSct;
currentSct = null;
}
DebugTrace.TraceLeave(this, "GetContext");
return sct;
}
public void RemoveAllContexts(UniqueId contextId)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
public void RemoveContext(UniqueId contextId, UniqueId generation)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
public bool TryAddContext(SecurityContextSecurityToken token)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
public void UpdateContextCachingTime(SecurityContextSecurityToken context, DateTime expirationTime)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotImplementedException());
}
}
}
// 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
- AttributedMetaModel.cs
- CurrentChangedEventManager.cs
- Baml6ConstructorInfo.cs
- ClientScriptManager.cs
- KoreanCalendar.cs
- XmlReaderSettings.cs
- WindowHideOrCloseTracker.cs
- CompilationUtil.cs
- HtmlTableRowCollection.cs
- ConcatQueryOperator.cs
- XmlNodeReader.cs
- OdbcConnectionOpen.cs
- ObjectToIdCache.cs
- NativeMethods.cs
- DocumentGridPage.cs
- SoapObjectInfo.cs
- Trustee.cs
- CookieParameter.cs
- SingletonChannelAcceptor.cs
- DataRelationPropertyDescriptor.cs
- TraceSource.cs
- ReadOnlyAttribute.cs
- SettingsPropertyValueCollection.cs
- MemoryMappedFile.cs
- SecuritySessionSecurityTokenAuthenticator.cs
- WasAdminWrapper.cs
- _RegBlobWebProxyDataBuilder.cs
- CompiledIdentityConstraint.cs
- KerberosSecurityTokenAuthenticator.cs
- PostBackOptions.cs
- CodeNamespaceImportCollection.cs
- ScrollData.cs
- GuidTagList.cs
- _ShellExpression.cs
- CachedBitmap.cs
- DragDeltaEventArgs.cs
- Delegate.cs
- TextLine.cs
- TreeNodeBindingCollection.cs
- GlyphElement.cs
- HtmlMeta.cs
- QuaternionValueSerializer.cs
- Debug.cs
- InputProcessorProfilesLoader.cs
- StateDesignerConnector.cs
- TextDpi.cs
- XmlSchemaRedefine.cs
- EasingKeyFrames.cs
- XmlDictionaryReaderQuotas.cs
- DEREncoding.cs
- GridViewSortEventArgs.cs
- ColorTranslator.cs
- NetNamedPipeSecurity.cs
- EmptyCollection.cs
- Model3DGroup.cs
- codemethodreferenceexpression.cs
- Boolean.cs
- Cursor.cs
- TabPageDesigner.cs
- HtmlInputReset.cs
- WindowsIPAddress.cs
- ComNativeDescriptor.cs
- SchemaObjectWriter.cs
- QilValidationVisitor.cs
- FileInfo.cs
- ListViewInsertedEventArgs.cs
- Ipv6Element.cs
- ViewKeyConstraint.cs
- HtmlTernaryTree.cs
- CollectionBase.cs
- Utils.cs
- DebugInfo.cs
- SystemIcons.cs
- TextViewBase.cs
- EntityParameter.cs
- MergeLocalizationDirectives.cs
- WebConfigurationFileMap.cs
- ServicePointManager.cs
- RoutingService.cs
- ISFClipboardData.cs
- DatePickerTextBox.cs
- sitestring.cs
- SqlStatistics.cs
- ProviderManager.cs
- ConnectionInterfaceCollection.cs
- TransactionScope.cs
- ApplicationServiceHelper.cs
- InfoCardRequestException.cs
- PathFigureCollectionConverter.cs
- StorageMappingFragment.cs
- Screen.cs
- UICuesEvent.cs
- OleTxTransaction.cs
- Literal.cs
- StructuredProperty.cs
- CommandField.cs
- ResourceAssociationType.cs
- XmlLangPropertyAttribute.cs
- SortQuery.cs
- Queue.cs