//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ using System.Collections.Generic; using System.Collections.ObjectModel; using System.IdentityModel.Policy; using System.IdentityModel.Selectors; using System.IdentityModel.Tokens; using System.Security.Claims; namespace System.ServiceModel.Security { /// /// Wraps a UserNameSecurityTokenHandler. Delegates the token authentication call to /// this wrapped tokenAuthenticator. Wraps the returned ClaimsIdentities into /// an IAuthorizationPolicy. /// internal class WrappedUserNameSecurityTokenAuthenticator : UserNameSecurityTokenAuthenticator { UserNameSecurityTokenHandler _wrappedUserNameSecurityTokenHandler; ExceptionMapper _exceptionMapper; /// /// Initializes an instance of /// /// The UserNameSecurityTokenHandler to wrap. /// Converts token validation exceptions to SOAP faults. public WrappedUserNameSecurityTokenAuthenticator( UserNameSecurityTokenHandler wrappedUserNameSecurityTokenHandler, ExceptionMapper exceptionMapper ) : base() { if ( wrappedUserNameSecurityTokenHandler == null ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull( "wrappedUserNameSecurityTokenHandler" ); } if ( exceptionMapper == null ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull( "exceptionMapper" ); } _wrappedUserNameSecurityTokenHandler = wrappedUserNameSecurityTokenHandler; _exceptionMapper = exceptionMapper; } /// /// Validates the token using the wrapped token handler and generates IAuthorizationPolicy /// wrapping the returned ClaimsIdentities. /// /// Token to be validated. /// Read-only collection of IAuthorizationPolicy protected override ReadOnlyCollection ValidateTokenCore( SecurityToken token ) { ReadOnlyCollection identities = null; try { identities = _wrappedUserNameSecurityTokenHandler.ValidateToken( token ); } catch ( Exception ex ) { if ( !_exceptionMapper.HandleSecurityTokenProcessingException( ex ) ) { throw; } } List policies = new List(1); policies.Add(new AuthorizationPolicy(identities)); return policies.AsReadOnly(); } protected override ReadOnlyCollection ValidateUserNamePasswordCore( string userName, string password ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new NotImplementedException( SR.GetString( SR.ID4008, "WrappedUserNameSecurityTokenAuthenticator", "ValidateUserNamePasswordCore" ) ) ); } } }