You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			113 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //-----------------------------------------------------------------------
 | |
| // <copyright file="Saml2AssertionKeyIdentifierClause.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>
 | |
| //-----------------------------------------------------------------------
 | |
| 
 | |
| namespace System.IdentityModel.Tokens
 | |
| {
 | |
|     using System;
 | |
|     using System.Collections.Generic;
 | |
|     
 | |
|     /// <summary>
 | |
|     /// A SecurityKeyIdentifierClause for referencing SAML2-based security tokens.
 | |
|     /// </summary>
 | |
|     public class Saml2AssertionKeyIdentifierClause : SecurityKeyIdentifierClause
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Creates a Saml2AssertionKeyIdentifierClause for a given id.
 | |
|         /// </summary>
 | |
|         /// <param name="id">The id defining the clause to create.</param>
 | |
|         public Saml2AssertionKeyIdentifierClause(string id)
 | |
|             : this(id, null, 0)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Creates a Saml2AssertionKeyIdentifierClause for a given id.
 | |
|         /// </summary>
 | |
|         /// <param name="id">The id defining the clause to create.</param>
 | |
|         /// <param name="derivationNonce">
 | |
|         /// An array of System.Byte that contains the nonce that was used to create a
 | |
|         /// derived key. Sets the value that is returned by the System.IdentityModel.Tokens.SecurityKeyIdentifierClause.GetDerivationNonce()
 | |
|         /// method.
 | |
|         /// </param>
 | |
|         /// <param name="derivationLength">The size of the derived key. Sets the value of the System.IdentityModel.Tokens.SecurityKeyIdentifierClause.DerivationLength
 | |
|         /// property.
 | |
|         /// </param>
 | |
|         public Saml2AssertionKeyIdentifierClause(string id, byte[] derivationNonce, int derivationLength)
 | |
|             : base(null, derivationNonce, derivationLength)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(id))
 | |
|             {
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("id");
 | |
|             }
 | |
| 
 | |
|             this.Id = id;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether the <see cref="SecurityKeyIdentifierClause"/> for an assertion matches the specified <see cref="SecurityKeyIdentifierClause"/>.
 | |
|         /// </summary>
 | |
|         /// <param name="assertionId">Id of the assertion</param>
 | |
|         /// <param name="keyIdentifierClause">A <see cref="SecurityKeyIdentifierClause"/> to match.</param>
 | |
|         /// <returns>'True' if the keyIdentifier matches this. 'False' otherwise.</returns>
 | |
|         public static bool Matches(string assertionId, SecurityKeyIdentifierClause keyIdentifierClause)
 | |
|         {
 | |
|             if (string.IsNullOrEmpty(assertionId))
 | |
|             {
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("assertionId");
 | |
|             }
 | |
| 
 | |
|             if (null == keyIdentifierClause)
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
| 
 | |
|             // Prefer our own type
 | |
|             Saml2AssertionKeyIdentifierClause saml2Clause = keyIdentifierClause as Saml2AssertionKeyIdentifierClause;
 | |
|             if (null != saml2Clause && StringComparer.Ordinal.Equals(assertionId, saml2Clause.Id))
 | |
|             {
 | |
|                 return true;
 | |
|             }
 | |
| 
 | |
|             // For compatibility, match against the old WCF type.
 | |
|             // WCF will read SAML2-based key identifier clauses if our 
 | |
|             // SecurityTokenSerializer doesn't get the chance. Unfortunately,
 | |
|             // the TokenTypeUri and ValueType properties are internal, so
 | |
|             // we can't check if they're for SAML2 or not. We're just going
 | |
|             // to go with the fact that SAML Assertion IDs, in both versions,
 | |
|             // are supposed to be sufficiently random as to not intersect. 
 | |
|             // So, if the AssertionID matches our Id, we'll say that's good 
 | |
|             // enough.
 | |
|             SamlAssertionKeyIdentifierClause wcfClause = keyIdentifierClause as SamlAssertionKeyIdentifierClause;
 | |
|             if (null != wcfClause && StringComparer.Ordinal.Equals(assertionId, wcfClause.AssertionId))
 | |
|             {
 | |
|                 return true;
 | |
|             }
 | |
| 
 | |
|             // Out of options.
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Indicates whether the <see cref="SecurityKeyIdentifierClause"/> for this instance is matches the specified <see cref="SecurityKeyIdentifierClause"/>.
 | |
|         /// </summary>
 | |
|         /// <param name="keyIdentifierClause">A <see cref="SecurityKeyIdentifierClause"/> to match.</param>
 | |
|         /// <returns>True if the keyIdentifier matches this. False otherwise.</returns>
 | |
|         public override bool Matches(SecurityKeyIdentifierClause keyIdentifierClause)
 | |
|         {
 | |
|             return ReferenceEquals(this, keyIdentifierClause) || Matches(Id, keyIdentifierClause);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns a <see cref="String"/> that represents the current <see cref="Object"/>.
 | |
|         /// </summary>
 | |
|         /// <returns>The Id of this instance as a string.</returns>
 | |
|         public override string ToString()
 | |
|         {
 | |
|             return "Saml2AssertionKeyIdentifierClause( Id = '" + Id + "' )";
 | |
|         }
 | |
|     }
 | |
| }
 |