< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.IdentityModel.Selectors.X509SecurityTokenAuthenticator
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/IdentityModel/Selectors/X509SecurityTokenAuthenticator.cs
Line coverage
44%
Covered lines: 15
Uncovered lines: 19
Coverable lines: 34
Total lines: 97
Line coverage: 44.1%
Branch coverage
33%
Covered branches: 2
Total branches: 6
Branch coverage: 33.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor()100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%11100%
.ctor(...)50%22100%
CanValidateTokenCore(...)100%11100%
ValidateTokenCoreAsync(...)25%4427.77%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/IdentityModel/Selectors/X509SecurityTokenAuthenticator.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.Generic;
 6using System.Collections.ObjectModel;
 7using System.Threading.Tasks;
 8using CoreWCF.IdentityModel.Claims;
 9using CoreWCF.IdentityModel.Policy;
 10using CoreWCF.IdentityModel.Tokens;
 11using CoreWCF.Security;
 12
 13namespace CoreWCF.IdentityModel.Selectors
 14{
 15    public class X509SecurityTokenAuthenticator : SecurityTokenAuthenticator
 16    {
 17        private readonly X509CertificateValidator _validator;
 18        private readonly bool _includeWindowsGroups;
 19        private readonly bool _cloneHandle;
 20
 21        public X509SecurityTokenAuthenticator()
 022            : this(X509CertificateValidator.ChainTrust)
 23        {
 024        }
 25
 26        public X509SecurityTokenAuthenticator(X509CertificateValidator validator)
 027            : this(validator, false)
 28        {
 029        }
 30
 31        public X509SecurityTokenAuthenticator(X509CertificateValidator validator, bool mapToWindows)
 032            : this(validator, mapToWindows, WindowsClaimSet.DefaultIncludeWindowsGroups)
 33        {
 034        }
 35
 36        public X509SecurityTokenAuthenticator(X509CertificateValidator validator, bool mapToWindows, bool includeWindows
 1637            : this(validator, mapToWindows, includeWindowsGroups, true)
 38        {
 1639        }
 40
 1641        internal X509SecurityTokenAuthenticator(X509CertificateValidator validator, bool mapToWindows, bool includeWindo
 42        {
 1643            _validator = validator ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(validator)
 1644            MapCertificateToWindowsAccount = mapToWindows;
 1645            _includeWindowsGroups = includeWindowsGroups;
 1646            _cloneHandle = cloneHandle;
 1647        }
 48
 549        public bool MapCertificateToWindowsAccount { get; }
 50
 51        protected override bool CanValidateTokenCore(SecurityToken token)
 52        {
 853            return token is X509SecurityToken;
 54        }
 55
 56        protected override ValueTask<ReadOnlyCollection<IAuthorizationPolicy>> ValidateTokenCoreAsync(SecurityToken toke
 57        {
 558            X509SecurityToken x509Token = (X509SecurityToken)token;
 559            _validator.Validate(x509Token.Certificate);
 60
 561            X509CertificateClaimSet x509ClaimSet = new X509CertificateClaimSet(x509Token.Certificate, _cloneHandle);
 562            if (!MapCertificateToWindowsAccount)
 63            {
 564                return new ValueTask<ReadOnlyCollection<IAuthorizationPolicy>>(SecurityUtils.CreateAuthorizationPolicies
 65            }
 66
 67            WindowsClaimSet windowsClaimSet;
 068            if (token is X509WindowsSecurityToken x509token)
 69            {
 070                windowsClaimSet = new WindowsClaimSet(x509token.WindowsIdentity, SecurityUtils.AuthTypeCertMap, _include
 71            }
 72            else
 73            {
 074                throw new PlatformNotSupportedException();
 75                // Ensure NT_AUTH chain policy for certificate account mapping
 76                //X509CertificateValidator.NTAuthChainTrust.Validate(x509Token.Certificate);
 77
 78                //WindowsIdentity windowsIdentity = null;
 79                //windowsIdentity = KerberosCertificateLogon(x509Token.Certificate);
 80
 81
 82                //windowsClaimSet = new WindowsClaimSet(windowsIdentity, SecurityUtils.AuthTypeCertMap, this.includeWind
 83            }
 084            List<ClaimSet> claimSets = new List<ClaimSet>(2)
 085            {
 086                windowsClaimSet,
 087                x509ClaimSet
 088            };
 89
 090            List<IAuthorizationPolicy> policies = new List<IAuthorizationPolicy>(1)
 091            {
 092                new UnconditionalPolicy(claimSets.AsReadOnly(), x509Token.ValidTo)
 093            };
 094            return new ValueTask<ReadOnlyCollection<IAuthorizationPolicy>>(policies.AsReadOnly());
 95        }
 96    }
 97}