Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / RequestSecurityTokenForRemoteTokenFactory.cs / 1 / RequestSecurityTokenForRemoteTokenFactory.cs
namespace Microsoft.InfoCards
{
using System;
using System.Xml;
using System.Collections;
using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace;
//
// This derviced variant of RequestSecurityToken is used to generate an RST to the remote token factory.
//
internal class RequestSecurityTokenForRemoteTokenFactory : RequestSecurityToken
{
public RequestSecurityTokenForRemoteTokenFactory( RequestSecurityTokenParameters rstParams )
: base( rstParams )
{
}
protected override void WriteAppliesToElement()
{
switch( AppliesToBehaviorDecisionTable.GetAppliesToBehaviorDecisionForRst( Policy, m_rstParams.Card.RequireAppliesto ) )
{
case AppliesToBehaviorDecision.SendRPAppliesTo:
IDT.TraceDebug( "IPSTSCLIENT: Writing RP AppliesTo to RST" );
Serializer.WriteAppliesToElement( Policy.PolicyAppliesTo, m_rstParams.Version );
break;
case AppliesToBehaviorDecision.SendCustomAppliesTo:
IDT.TraceDebug( "IPSTSCLIENT: Writing Recipient Identity to RST to create a custom AppliesTo" );
Serializer.WriteAppliesToElement( Policy.ImmediateTokenRecipient.Address, m_rstParams.Version );
break;
default:
//
// Do not write AppliesTo
//
break;
}
}
protected override void WriteSecondaryParametersElement()
{
//
// Write out a copy of the policy XML to the SecondaryParameters element if we are using the
// oasis 2007 version of WS-Trust.
//
if( XmlNames.WSSpecificationVersion.WSTrustOasis2007 == ProtocolVersionProfile.WSTrust.Version )
{
//
// If the policy contains optional claims but the user has elected to not sent optional claims, then we
// cannot sent secondaryParameters (as we do not want accidental disclosure of information to a
// non-auditing STS).
//
bool writeSeconaryParameters = true;
if( Policy.OptionalClaims.Length > 0 )
{
//
// If the policy contains one or more optional claims, check to see if the user
// is willing to send optional claims.
//
writeSeconaryParameters = m_rstParams.DiscloseOptionalClaims &&
!( OptionalClaimsExceedCard( m_rstParams.Card, m_rstParams.Policy ) );
}
//
// Write the secondaryParameters element only when AppliesTo is present
//
switch( AppliesToBehaviorDecisionTable.GetAppliesToBehaviorDecisionForRst( Policy, m_rstParams.Card.RequireAppliesto ) )
{
case AppliesToBehaviorDecision.SendRPAppliesTo:
case AppliesToBehaviorDecision.SendCustomAppliesTo:
break;
default:
//
// Do not write SecondaryParameters as the appliesTo decision is either 'not send' or 'failed match'
//
writeSeconaryParameters = false;
break;
}
if( writeSeconaryParameters )
{
if( null != Policy.RelyingPartyPolicy )
{
Serializer.WriteSecondaryParametersElement( Policy.RelyingPartyPolicy.PolicyXml );
}
else
{
//
// If the incoming RST Template did not contain SecondaryParameters, we simply write the
// original request.
//
Serializer.WriteSecondaryParametersElement( Policy.ClientPolicy.PolicyXml );
}
}
}
}
protected override void CustomWriteBodyContents( XmlDictionaryWriter writer )
{
InitializeWriters( writer );
WriteRSTOpeningElement();
WriteRequestTypeElement();
WriteInfoCardReferenceElement();
WriteClaimsElement();
WriteKeyTypeElement();
WriteKeySupportingElements();
WriteAppliesToElement();
WritePPIDElement();
WriteEncryptionAlgorithmElement();
WritePassOnElements();
WriteDisplayTokenElement();
WriteUnprocessedPolicyElements();
WriteSecondaryParametersElement();
WriteEndElement();
}
//
// Summary
// Checks to see if the optional claims in the policy exceed the claims present in the card.
//
// Returns
// True if at least one optional claim in the policy is not present in the card. False otherwise.
//
private bool OptionalClaimsExceedCard( InfoCard card, InfoCardPolicy policy )
{
//
// Compare the set of requested optional claims in the policy against the card's claims.
//
InfoCardClaimCollection claims = card.GetClaims();
bool claimNotFoundInCard = false;
foreach( string claimUri in policy.OptionalClaims )
{
if( !claims.ContainsKey( claimUri ) )
{
claimNotFoundInCard = true;
}
}
return claimNotFoundInCard;
}
}
}
// 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
- TypeGeneratedEventArgs.cs
- SubclassTypeValidator.cs
- TextServicesDisplayAttribute.cs
- TimelineGroup.cs
- IndicCharClassifier.cs
- WindowsTokenRoleProvider.cs
- HotSpotCollection.cs
- DetailsViewPageEventArgs.cs
- DataControlFieldCollection.cs
- XmlNode.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- TargetException.cs
- SHA256Managed.cs
- TextRangeEditLists.cs
- HandlerBase.cs
- Compress.cs
- IntranetCredentialPolicy.cs
- ProcessHostFactoryHelper.cs
- ImageFormat.cs
- EqualityComparer.cs
- MimeMapping.cs
- MemberMaps.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- TagMapInfo.cs
- RelationshipNavigation.cs
- WindowsGraphics2.cs
- ZipIOBlockManager.cs
- TextServicesCompartmentEventSink.cs
- FileAuthorizationModule.cs
- TextElementEnumerator.cs
- ArgIterator.cs
- XPathAxisIterator.cs
- TableLayoutRowStyleCollection.cs
- ThemeableAttribute.cs
- ExtensionSimplifierMarkupObject.cs
- MouseEvent.cs
- ReliabilityContractAttribute.cs
- SafeMILHandle.cs
- SocketException.cs
- SchemaMerger.cs
- TableCell.cs
- FileDetails.cs
- AsyncCompletedEventArgs.cs
- HMACSHA512.cs
- CqlLexer.cs
- MetadataItemEmitter.cs
- PropertyToken.cs
- RelationshipDetailsRow.cs
- Listen.cs
- WebPartCancelEventArgs.cs
- ListItemConverter.cs
- HandledEventArgs.cs
- WebControlToolBoxItem.cs
- AnnotationService.cs
- XmlValidatingReaderImpl.cs
- InfoCardMasterKey.cs
- EntityDataSourceState.cs
- Add.cs
- SchemaImporterExtensionElementCollection.cs
- SqlAggregateChecker.cs
- CompModSwitches.cs
- TreeNodeSelectionProcessor.cs
- DataMemberConverter.cs
- PathStreamGeometryContext.cs
- DataGridViewBand.cs
- AutoGeneratedField.cs
- OrCondition.cs
- Formatter.cs
- WebResourceAttribute.cs
- SelectionItemPattern.cs
- FontStretchConverter.cs
- ContentType.cs
- BridgeDataRecord.cs
- DateTimePicker.cs
- SessionStateModule.cs
- TextBreakpoint.cs
- MessagePartDescription.cs
- SqlConnectionFactory.cs
- StrokeSerializer.cs
- DurableInstanceManager.cs
- NamespaceQuery.cs
- ObjectContext.cs
- Process.cs
- Literal.cs
- FigureHelper.cs
- DLinqAssociationProvider.cs
- CodeThrowExceptionStatement.cs
- PersonalizableTypeEntry.cs
- SelectionWordBreaker.cs
- ItemCollection.cs
- ErrorBehavior.cs
- XmlIncludeAttribute.cs
- SubpageParagraph.cs
- CustomErrorsSection.cs
- diagnosticsswitches.cs
- RequestTimeoutManager.cs
- ScriptReferenceBase.cs
- _KerberosClient.cs
- Span.cs
- DynamicILGenerator.cs