e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
202 lines
6.3 KiB
C#
202 lines
6.3 KiB
C#
//-----------------------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace System.IdentityModel.Tokens
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.IdentityModel.Claims;
|
|
using System.Runtime.Serialization;
|
|
using System.Text;
|
|
|
|
[DataContract]
|
|
public class SamlAuthenticationClaimResource
|
|
{
|
|
[DataMember]
|
|
DateTime authenticationInstant;
|
|
[DataMember]
|
|
string authenticationMethod;
|
|
|
|
ReadOnlyCollection<SamlAuthorityBinding> authorityBindings;
|
|
|
|
[DataMember]
|
|
string dnsAddress;
|
|
|
|
[DataMember]
|
|
string ipAddress;
|
|
|
|
[OnDeserialized]
|
|
void OnDeserialized(StreamingContext ctx)
|
|
{
|
|
if (string.IsNullOrEmpty(authenticationMethod))
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("authenticationMethod");
|
|
if (authorityBindings == null)
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("authorityBindings");
|
|
}
|
|
|
|
public SamlAuthenticationClaimResource(
|
|
DateTime authenticationInstant,
|
|
string authenticationMethod,
|
|
string dnsAddress,
|
|
string ipAddress
|
|
)
|
|
{
|
|
if (string.IsNullOrEmpty(authenticationMethod))
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("authenticationMethod");
|
|
|
|
this.authenticationInstant = authenticationInstant;
|
|
this.authenticationMethod = authenticationMethod;
|
|
this.dnsAddress = dnsAddress;
|
|
this.ipAddress = ipAddress;
|
|
this.authorityBindings = (new List<SamlAuthorityBinding>()).AsReadOnly();
|
|
}
|
|
|
|
public SamlAuthenticationClaimResource(
|
|
DateTime authenticationInstant,
|
|
string authenticationMethod,
|
|
string dnsAddress,
|
|
string ipAddress,
|
|
IEnumerable<SamlAuthorityBinding> authorityBindings
|
|
)
|
|
: this(authenticationInstant, authenticationMethod, dnsAddress, ipAddress)
|
|
{
|
|
if (authorityBindings == null)
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("authorityBindings"));
|
|
|
|
List<SamlAuthorityBinding> tempList = new List<SamlAuthorityBinding>();
|
|
foreach (SamlAuthorityBinding authorityBinding in authorityBindings)
|
|
{
|
|
if (authorityBinding != null)
|
|
tempList.Add(authorityBinding);
|
|
}
|
|
this.authorityBindings = tempList.AsReadOnly();
|
|
|
|
}
|
|
|
|
public SamlAuthenticationClaimResource(
|
|
DateTime authenticationInstant,
|
|
string authenticationMethod,
|
|
string dnsAddress,
|
|
string ipAddress,
|
|
ReadOnlyCollection<SamlAuthorityBinding> authorityBindings
|
|
)
|
|
: this(authenticationInstant, authenticationMethod, dnsAddress, ipAddress)
|
|
{
|
|
if (authorityBindings == null)
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("authorityBindings"));
|
|
|
|
this.authorityBindings = authorityBindings;
|
|
|
|
}
|
|
|
|
public DateTime AuthenticationInstant
|
|
{
|
|
get
|
|
{
|
|
return this.authenticationInstant;
|
|
}
|
|
}
|
|
|
|
public string AuthenticationMethod
|
|
{
|
|
get
|
|
{
|
|
return this.authenticationMethod;
|
|
}
|
|
}
|
|
|
|
public ReadOnlyCollection<SamlAuthorityBinding> AuthorityBindings
|
|
{
|
|
get
|
|
{
|
|
return this.authorityBindings;
|
|
}
|
|
}
|
|
|
|
// this private member is for serialization only.
|
|
[DataMember]
|
|
List<SamlAuthorityBinding> SamlAuthorityBindings
|
|
{
|
|
get
|
|
{
|
|
List<SamlAuthorityBinding> sab = new List<SamlAuthorityBinding>();
|
|
for (int i = 0; i < this.authorityBindings.Count; ++i)
|
|
{
|
|
sab.Add(this.authorityBindings[i]);
|
|
}
|
|
return sab;
|
|
}
|
|
set
|
|
{
|
|
if (value != null)
|
|
this.authorityBindings = value.AsReadOnly();
|
|
}
|
|
}
|
|
|
|
public string IPAddress
|
|
{
|
|
get
|
|
{
|
|
return this.ipAddress;
|
|
}
|
|
}
|
|
|
|
public string DnsAddress
|
|
{
|
|
get
|
|
{
|
|
return this.dnsAddress;
|
|
}
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (obj == null)
|
|
return false;
|
|
|
|
if (ReferenceEquals(this, obj))
|
|
return true;
|
|
|
|
SamlAuthenticationClaimResource rhs = obj as SamlAuthenticationClaimResource;
|
|
if (rhs == null)
|
|
return false;
|
|
|
|
if ((this.AuthenticationInstant != rhs.AuthenticationInstant) ||
|
|
(this.AuthenticationMethod != rhs.AuthenticationMethod) ||
|
|
(this.AuthorityBindings.Count != rhs.AuthorityBindings.Count) ||
|
|
(this.IPAddress != rhs.IPAddress) ||
|
|
(this.DnsAddress != rhs.DnsAddress))
|
|
return false;
|
|
|
|
int i = 0;
|
|
for (i = 0; i < this.AuthorityBindings.Count; ++i)
|
|
{
|
|
bool matched = false;
|
|
for (int j = 0; j < rhs.AuthorityBindings.Count; ++j)
|
|
{
|
|
if ((this.AuthorityBindings[i].AuthorityKind == rhs.AuthorityBindings[j].AuthorityKind) &&
|
|
(this.AuthorityBindings[i].Binding == rhs.AuthorityBindings[j].Binding) &&
|
|
(this.AuthorityBindings[i].Location == rhs.AuthorityBindings[j].Location))
|
|
{
|
|
matched = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!matched)
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return (this.authenticationInstant.GetHashCode() ^ this.authenticationMethod.GetHashCode());
|
|
}
|
|
}
|
|
|
|
}
|