//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Security { using System; using System.ServiceModel; using System.Collections; using System.Collections.Generic; using System.IdentityModel.Claims; using System.IdentityModel.Policy; using System.ServiceModel.Security.Tokens; class NegotiationTokenAuthenticatorState : IDisposable { bool isNegotiationCompleted; SecurityContextSecurityToken serviceToken; Object thisLock; public NegotiationTokenAuthenticatorState() { thisLock = new Object(); } public Object ThisLock { get { return thisLock; } } public bool IsNegotiationCompleted { get { return this.isNegotiationCompleted; } } public SecurityContextSecurityToken ServiceToken { get { CheckCompleted(); return this.serviceToken; } } public virtual void Dispose() { } public void SetServiceToken(SecurityContextSecurityToken token) { if (token == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("token"); } this.serviceToken = token; this.isNegotiationCompleted = true; } public virtual string GetRemoteIdentityName() { if (this.isNegotiationCompleted) { return SecurityUtils.GetIdentityNamesFromPolicies(this.serviceToken.AuthorizationPolicies); } return String.Empty; } void CheckCompleted() { if (!this.isNegotiationCompleted) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.NegotiationIsNotCompleted))); } } } }