< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Security.FederatedMessageSecurityOverHttp
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/FederatedMessageSecurityOverHttp.cs
Line coverage
78%
Covered lines: 52
Uncovered lines: 14
Coverable lines: 66
Total lines: 169
Line coverage: 78.7%
Branch coverage
46%
Covered branches: 13
Total branches: 28
Branch coverage: 46.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor()100%11100%
CreateSecurityBindingElement(...)50%242473.8%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/FederatedMessageSecurityOverHttp.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System;
 5using System.Collections.ObjectModel;
 6using System.Runtime.CompilerServices;
 7using System.Xml;
 8using CoreWCF.Channels;
 9using CoreWCF.IdentityModel.Tokens;
 10using CoreWCF.Security.Tokens;
 11
 12namespace CoreWCF.Security
 13{
 14    public sealed class FederatedMessageSecurityOverHttp
 15    {
 16        internal const bool DefaultNegotiateServiceCredential = true;
 17        internal const SecurityKeyType DefaultIssuedKeyType = SecurityKeyType.SymmetricKey;
 18        internal const bool DefaultEstablishSecurityContext = true;
 19        private SecurityAlgorithmSuite _algorithmSuite;
 20        private SecurityKeyType _issuedKeyType;
 21
 222        public FederatedMessageSecurityOverHttp()
 23        {
 224            NegotiateServiceCredential = DefaultNegotiateServiceCredential;
 225            _algorithmSuite = SecurityAlgorithmSuite.Default;
 226            _issuedKeyType = DefaultIssuedKeyType;
 227            ClaimTypeRequirements = new Collection<ClaimTypeRequirement>();
 228            TokenRequestParameters = new Collection<XmlElement>();
 229            EstablishSecurityContext = DefaultEstablishSecurityContext;
 230        }
 31
 232        public bool NegotiateServiceCredential { get; set; }
 33
 34        public SecurityAlgorithmSuite AlgorithmSuite
 35        {
 15036            get { return _algorithmSuite; }
 37            set
 38            {
 039                _algorithmSuite = value ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(value
 040            }
 41        }
 42
 10443        public bool EstablishSecurityContext { get; set; }
 44
 5045        public EndpointAddress IssuerAddress { get; set; }
 46
 5047        public EndpointAddress IssuerMetadataAddress { get; set; }
 48
 5049        public Binding IssuerBinding { get; set; }
 50
 5051        public string IssuedTokenType { get; set; }
 52
 53        public SecurityKeyType IssuedKeyType
 54        {
 15055            get { return _issuedKeyType; }
 56            set
 57            {
 258                if (!SecurityKeyTypeHelper.IsDefined(value))
 59                {
 060                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new System.ArgumentOutOfRangeException(nam
 61                }
 262                _issuedKeyType = value;
 263            }
 64        }
 65
 5066        public Collection<ClaimTypeRequirement> ClaimTypeRequirements { get; }
 67
 5068        public Collection<XmlElement> TokenRequestParameters { get; }
 69
 70        [MethodImpl(MethodImplOptions.NoInlining)]
 71        public SecurityBindingElement CreateSecurityBindingElement(bool isSecureTransportMode,
 72                                                                     bool isReliableSession,
 73                                                                     MessageSecurityVersion version)
 74        {
 5075            if ((IssuedKeyType == SecurityKeyType.BearerKey) &&
 5076               (version.TrustVersion == TrustVersion.WSTrustFeb2005))
 77            {
 078                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.Bea
 79            }
 80
 5081            if (isReliableSession && !EstablishSecurityContext)
 82            {
 083                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.Sec
 84            }
 85
 86            SecurityBindingElement result;
 5087            bool emitBspAttributes = true;
 5088            IssuedSecurityTokenParameters issuedParameters = new IssuedSecurityTokenParameters(IssuedTokenType, IssuerAd
 5089            issuedParameters.IssuerMetadataAddress = IssuerMetadataAddress;
 5090            issuedParameters.KeyType = IssuedKeyType;
 5091            if (IssuedKeyType == SecurityKeyType.SymmetricKey)
 92            {
 093                issuedParameters.KeySize = AlgorithmSuite.DefaultSymmetricKeyLength;
 94            }
 95            else
 96            {
 5097                issuedParameters.KeySize = 0;
 98            }
 10099            foreach (ClaimTypeRequirement c in ClaimTypeRequirements)
 100            {
 0101                issuedParameters.ClaimTypeRequirements.Add(c);
 102            }
 100103            foreach (XmlElement p in TokenRequestParameters)
 104            {
 0105                issuedParameters.AdditionalRequestParameters.Add(p);
 106            }
 50107            WSSecurityTokenSerializer versionSpecificSerializer = new WSSecurityTokenSerializer(version.SecurityVersion,
 50108                                                                                                version.TrustVersion,
 50109                                                                                                version.SecureConversati
 50110                                                                                                emitBspAttributes,
 50111                                                                                                null, null, null);
 50112            SecurityStandardsManager versionSpecificStandardsManager = new SecurityStandardsManager(version, versionSpec
 50113            issuedParameters.AddAlgorithmParameters(AlgorithmSuite, versionSpecificStandardsManager, _issuedKeyType);
 114
 115            SecurityBindingElement issuedTokenSecurity;
 50116            if (isSecureTransportMode)
 117            {
 50118                issuedTokenSecurity = SecurityBindingElement.CreateIssuedTokenOverTransportBindingElement(issuedParamete
 119            }
 120            else
 121            {
 0122                if (NegotiateServiceCredential)
 123                {
 124                    // We should have passed 'true' as RequireCancelation to be consistent with other standard bindings.
 125                    // However, to limit the change for Orcas, we scope down to just newer version of WSSecurityPolicy.
 0126                    issuedTokenSecurity = SecurityBindingElement.CreateIssuedTokenForSslBindingElement(issuedParameters,
 127                }
 128                else
 129                {
 0130                    issuedTokenSecurity = SecurityBindingElement.CreateIssuedTokenForCertificateBindingElement(issuedPar
 131                }
 132            }
 133
 50134            issuedTokenSecurity.MessageSecurityVersion = version;
 50135            issuedTokenSecurity.DefaultAlgorithmSuite = AlgorithmSuite;
 136
 50137            if (EstablishSecurityContext)
 138            {
 0139                result = SecurityBindingElement.CreateSecureConversationBindingElement(issuedTokenSecurity, true);
 140            }
 141            else
 142            {
 50143                result = issuedTokenSecurity;
 144            }
 145
 50146            result.MessageSecurityVersion = version;
 50147            result.DefaultAlgorithmSuite = AlgorithmSuite;
 50148            result.IncludeTimestamp = true;
 149
 50150            if (!isReliableSession)
 151            {
 50152                result.LocalServiceSettings.ReconnectTransportOnFailure = false;
 153            }
 154            else
 155            {
 0156                result.LocalServiceSettings.ReconnectTransportOnFailure = true;
 157            }
 158
 50159            if (EstablishSecurityContext)
 160            {
 161                // issue the transition SCT for a short duration only
 0162                issuedTokenSecurity.LocalServiceSettings.IssuedCookieLifetime = SpnegoTokenAuthenticator.s_defaultServer
 163            }
 164
 50165            return result;
 166        }
 167
 168    }
 169}