| File: System\IdentityModel\Selectors\KerberosSecurityTokenProvider.cs | Web Access |
| Project: src\src\System.ServiceModel.Primitives\src\System.ServiceModel.Primitives.csproj (System.ServiceModel.Primitives) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.IdentityModel.Tokens; using System.Net; using System.Security.Authentication.ExtendedProtection; using System.Security.Principal; using System.ServiceModel; using System.Threading.Tasks; namespace System.IdentityModel.Selectors { public class KerberosSecurityTokenProvider : SecurityTokenProvider { private readonly NetworkCredential _networkCredential; public KerberosSecurityTokenProvider(string servicePrincipalName) : this(servicePrincipalName, TokenImpersonationLevel.Identification) { } public KerberosSecurityTokenProvider(string servicePrincipalName, TokenImpersonationLevel tokenImpersonationLevel) : this(servicePrincipalName, tokenImpersonationLevel, null) { } public KerberosSecurityTokenProvider(string servicePrincipalName, TokenImpersonationLevel tokenImpersonationLevel, NetworkCredential networkCredential) { if (tokenImpersonationLevel != TokenImpersonationLevel.Identification && tokenImpersonationLevel != TokenImpersonationLevel.Impersonation) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(tokenImpersonationLevel), SRP.Format(SRP.ImpersonationLevelNotSupported, tokenImpersonationLevel))); } ServicePrincipalName = servicePrincipalName ?? throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(servicePrincipalName)); TokenImpersonationLevel = tokenImpersonationLevel; _networkCredential = networkCredential; } public string ServicePrincipalName { get; } public TokenImpersonationLevel TokenImpersonationLevel { get; } public NetworkCredential NetworkCredential { get { return _networkCredential; } } internal SecurityToken GetToken(TimeSpan timeout, ChannelBinding channelbinding) { return new KerberosRequestorSecurityToken(ServicePrincipalName, TokenImpersonationLevel, NetworkCredential, SecurityUniqueId.Create().Value); } protected override SecurityToken GetTokenCore(TimeSpan timeout) { return GetToken(timeout, null); } internal override Task<SecurityToken> GetTokenCoreInternalAsync(TimeSpan timeout) { return Task.FromResult(GetToken(timeout, null)); } } }