<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Vivek Malviya's (MSFT) Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/vivek/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/vivek/feed.xml</link>
    <description>This blog deals with Tips &amp;amp; Tricks, Information, Setup and troubleshooting MICROSOFT SharePoint, FAST search and SharePoint related technologies</description>
    <lastBuildDate>Tue, 16 Apr 2019 06:21:07 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Part3: Troubleshooting Kerberos authentication and things to check when it fails</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/part3-troubleshooting-kerberos-authentication-and-things-to-check-when-it-fails</link>
      <pubDate>Fri, 02 Feb 2018 04:54:56 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=3665</guid>
      <description><![CDATA[This is a continuation post of part1 and part2 of my "Integrated Windows Authentication blog series"...]]></description>
      <content:encoded><![CDATA[<p>This is a <strong>continuation post of <a href="https://blogs.technet.microsoft.com/vivek/2018/01/23/part1-explaining-integrated-windows-authentication-in-sharepoint-and-how-ntlm-fails-but-kerberos-works-in-double-hop-authentication/" /></strong><span style="color:blue;text-decoration:underline">part1</span> and <a href="https://blogs.technet.microsoft.com/vivek/2018/01/26/part2-step-by-step-guide-for-configuring-kerberos-authentication-in-sharepoint-20132016/"><span style="color:blue;text-decoration:underline">part2</span></a> of my "Integrated Windows Authentication blog series" and <strong>last</strong> one in this series where we are going to discuss about what we can do when Kerberos Authentication fails, how to detect it and correct it!
</p><p>
 </p><p>
 </p><p>Let me start by mentioning this --&gt; <strong>C:\Windows\System32\Wininet.dll file calls the InitializeSecurityContext function to build the Kerberos ticket.</strong>
	</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl1.png" alt="" />
	</p><p>
 </p><p>The <strong>InitializeSecurityContext (Kerberos)</strong> function initiates the client side, outbound <a href="https://msdn.microsoft.com/en-us/library/ms721625(v=vs.85).aspx"><span style="color:blue;text-decoration:underline"><em>security context</em></span></a> from a credential handle. The function is used to build a security context between the client application and a remote peer. <strong>InitializeSecurityContext (Kerberos)</strong> returns a token that the client must pass to the remote peer, which the peer in turn submits to the local security implementation through the <a href="https://msdn.microsoft.com/en-us/library/aa374704(v=vs.85).aspx"><span style="color:blue;text-decoration:underline"><strong>AcceptSecurityContext (Kerberos)</strong></span></a> call. The token generated should be considered opaque by all callers.
</p><p>Typically, the <strong>InitializeSecurityContext (Kerberos)</strong> function is called in a loop until a sufficient security context is established.
</p><p><span style="color:#595959"><em>From &lt;<a href="https://msdn.microsoft.com/en-us/library/aa375507(VS.85).aspx"><span style="color:blue;text-decoration:underline">https://msdn.microsoft.com/en-us/library/aa375507(VS.85).aspx</span></a>&gt; </em></span>
	</p><p>
 </p><p>
 </p><p>I have explained in my <a href="https://blogs.technet.microsoft.com/vivek/2018/05/08/part1-explaining-integrated-windows-authentication-in-sharepoint-and-how-ntlm-fails-but-kerberos-works-in-double-hop-authentication/"><span style="color:blue;text-decoration:underline">Part1</span></a> post about how the kerberos authentication works, I strongly recommend reading that first before troubleshooting so we know what we are doing.
</p><p>
 </p><p>So, <span style="font-size:16pt;text-decoration:underline"><strong><span style="background-color:yellow">when the Kerberos AUTHETICATION FAILS or maybe not yet, This is how you verify/check/resolve</span>:</strong></span>
	</p><p>
 </p><p>
 </p><div><table style="border-collapse:collapse" border="0"><colgroup><col style="width:752px" /></colgroup><tbody valign="top"><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><span style="color:#288ac6;font-size:16pt"><strong>Firewall Configuration:</strong></span></p></td></tr><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p>Open firewall ports to allow HTTP traffic in on default and non-default ports. Ensure clients can connect to Kerberos Ports on the Active Directory.
</p><p>
 </p><p>Before testing authentication, ensure clients can access the SharePoint Server web applications on the configured HTTP ports. In addition, ensure clients can authenticate with Active Directory and request Kerberos tickets from the KDC over the standard Kerberos ports.
</p><p>
 </p><p><strong>Open firewall ports to allow HTTP traffic in on default and non-default ports:</strong>
						</p><p>Typically you have to configure the firewall on each front-end Web to allow incoming requests over ports TCP 80 and TCP 443. Open Windows Firewall with Advanced Security and browse to the following Inbound Rules:
</p><ul><li>World Wide Web Services (HTTP Traffic-In)<span style="font-family:Times New Roman;font-size:12pt">
								</span></li><li>World Wide Web Services (HTTPS Traffic-In)<span style="font-family:Times New Roman;font-size:12pt">
								</span></li></ul><p>Make sure the appropriate ports are open in your environment. In our example, we access SharePoint Server over HTTP (port 80), so this rule was enabled. 
</p><p>In addition, we have to open the non-default port used in our example (TCP 5555). If you have web sites running on non-default ports, you also have to configure custom rules to allow HTTP traffic on those ports. 
</p><p>
 </p><p><strong>Ensure that clients can connect to Kerberos ports on the Active Directory role</strong>
						</p><p>To use Kerberos authentication, clients will have to request ticket granting tickets (TGT) and service tickets (ST) from the Key Distribution Center (KDC) over UDP or <span style="background-color:yellow">TCP port 88</span>. By default, when you install the Active Directory Role in Windows Server 2008 and later, the role will configure the following incoming rules to allow this communication by default: 
</p><ul><li>Kerberos Key Distribution Center – PCR (TCP-In)<span style="font-family:Times New Roman;font-size:12pt">
								</span></li><li>Kerberos Key Distribution Center – PCR (UDP-In)<span style="font-family:Times New Roman;font-size:12pt">
								</span></li><li>Kerberos Key Distribution Center (TCP-In)<span style="font-family:Times New Roman;font-size:12pt">
								</span></li><li>Kerberos Key Distribution Center (UDP-In)<span style="font-family:Times New Roman;font-size:12pt">
								</span></li></ul><p>In your environment ensure these rules are enabled and that clients can connect to the KDC (domain controller) over <span style="background-color:yellow">port 88</span>. 
</p><p><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx"><span style="color:blue;text-decoration:underline">https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx</span></a>&gt; </em></span></p></td></tr></tbody></table></div><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>Test browser authentication:</strong>
		</span></p><p>
 </p><p>After configuring Active Directory, DNS and SharePoint Server you can now test whether Kerberos authentication is configured correctly by browsing to your web applications. When testing in the browser, ensure the following conditions are met:
</p><ol><li>The test user is logged into a Windows 7 or higher computer joined to the domain that SharePoint Server is installed in, or is logged into a domain trusted by the SharePoint Server domain.
</li><li>Integrated Windows authentication is enabled in the browser. Under <strong>Internet Options</strong> in the <strong>Advanced</strong> tab, make sure <strong>Enable Integrated Windows Authentication*</strong> is enabled in the Security section:
</li></ol><p>
 </p><p style="margin-left: 27pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl2.png" alt="" />
	</p><p> 
 </p><p>
 </p><ol><li>Local intranet is configured to automatically logon clients. Under Internet explorer option, in the <strong>Security</strong> tab, select <strong>Local Intranet</strong> and click the <strong>Custom level</strong> button. Scroll down and make sure that <strong>Automatic logon only in Intranet zone</strong> is selected.
</li><li>Ensure that <strong>Automatically detect intranet network</strong> is selected in <strong>Internet options</strong>-&gt;<strong>Security</strong>-&gt;<strong>Intranet Zone</strong>-&gt;<strong>Sites</strong>.
</li><li>If you are using fully qualified domain names to access the SharePoint Server web applications, ensure that the FQDNs are included in the intranet zone, either explicitly or by wildcard inclusion (for example, "*.vmlab.local").
</li></ol><p>The easiest way to determine if Kerberos authentication is being used is by logging into a test workstation and navigating to the web site in question. If the user isn't prompted for credentials and the site is rendered correctly, you can assume Integrated Windows authentication is working.
</p><p><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx"><span style="color:blue;text-decoration:underline">https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx</span></a>&gt; </em></span>
	</p><p>
 </p><p><span style="color:#222a35"><strong>If any of the above is not set properly, then <span style="font-size:10pt">Delegation fails even when Kerberos authentication works:</span></strong>
		</span></p><ul><li><div><span style="color:#222a35"><span style="font-size:10pt">Check Internet Explorer Zone used for the URL. </span>
				</span></div><p><span style="color:#222a35"><span style="font-size:10pt">Kerberos delegation is only allowed for the « Intranet » and « Trusted Sites » zones (in other words, IE sets the </span><span style="font-size:9pt">ISC_REQ_DELEGATE</span><span style="font-size:10pt"> flag when it calls <a href="https://msdn.microsoft.com/en-us/library/aa375507(VS.85).aspx" /></span><span style="color:blue"><span style="font-size:9pt;text-decoration:underline">InitializeSecurityContext</span><span style="color:#222a35"><span style="font-size:10pt"> only if the zone computed is « Intranet » or « Trusted Sites » ) </span>
						</span></span></span></p></li><li><span style="color:#222a35"><span style="font-size:10pt">The account used for the application pool identity must have the « Trusted for delegation » flag set <br />If delegation still fails, you may consider using <a href="https://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/delegconfig-delegation-configuration-reporting-tool.aspx"><span style="color:blue;text-decoration:underline">DELEGCONFIG</span></a><span style="color:#1f497d">. <span style="color:#222a35">This tool allows to diagnose - and resolve - dozens of issues preventing Kerberos authentication from working correctly. Check the following link for more details<span style="color:#1f497d">: <a href="https://blogs.iis.net/bretb/archive/2008/03/27/How-to-Use-DelegConfig.aspx"><span style="color:blue;text-decoration:underline">https://blogs.iis.net/bretb/archive/2008/03/27/How-to-Use-DelegConfig.aspx</span></a></span></span></span></span>
			</span></li></ul><p>
 </p><p>
 </p><p>
 </p><p><span style="color:#222a35"><em>The next step is to determine if the negotiate protocol was used to negotiate Kerberos authentication as the authentication provider for the request. This can be done in the following ways: </em>
		</span></p><p>
 </p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>SharePoint server Front-end Windows security logs</strong>
		</span></p><p>
 </p><p>If Kerberos authentication is working correctly you will see Logon events in the security event logs on the front-end webs with <span style="background-color:yellow">event ID = 4624</span>. In the general information for these events you should see the security ID being logged onto the computer and the Logon Process used, which should be <strong>Kerberos</strong>.
</p><p>
 </p><p>
 </p><p><strong>Event is here below:</strong>
	</p><p>
 </p><p>Log Name:      Security
</p><p>Source:        Microsoft-Windows-Security-Auditing
</p><p>Date:          5/6/2018 10:27:48 PM
</p><p>Event ID:      4624
</p><p>Task Category: Logon
</p><p>Level:         Information
</p><p>Keywords:      Audit Success
</p><p>User:          N/A
</p><p>Computer:      SP.contoso.com
</p><p>Description:
</p><p>An account was successfully logged on.
</p><p>
 </p><p>Subject:
</p><p style="margin-left: 27pt">Security ID:                NULL SID
</p><p style="margin-left: 27pt">Account Name:                -
</p><p style="margin-left: 27pt">Account Domain:                -
</p><p style="margin-left: 27pt">Logon ID:                0x0
</p><p>
 </p><p>Logon Type:                        3
</p><p>
 </p><p>Impersonation Level:                Impersonation
</p><p>
 </p><p>New Logon:
</p><p style="margin-left: 27pt"><span style="background-color:yellow">Security ID:                contoso\spfarm</span>
	</p><p style="margin-left: 27pt"><span style="background-color:yellow">Account Name:                spfarm</span>
	</p><p style="margin-left: 27pt"><span style="background-color:yellow">Account Domain:                contoso</span>
	</p><p style="margin-left: 27pt">Logon ID:                0x15636
</p><p style="margin-left: 27pt">Logon GUID:                {02398194-25d2-4852-4d60-026f36f6632a}
</p><p>
 </p><p>Process Information:
</p><p style="margin-left: 27pt">Process ID:                0x0
</p><p style="margin-left: 27pt">Process Name:                -
</p><p>
 </p><p>Network Information:
</p><p style="margin-left: 27pt">Workstation Name:
</p><p style="margin-left: 27pt">Source Network Address:        -
</p><p style="margin-left: 27pt">Source Port:                -
</p><p>
 </p><p>Detailed Authentication Information:
</p><p style="margin-left: 27pt"><span style="background-color:yellow">Logon Process:                Kerberos</span>
	</p><p style="margin-left: 27pt"><span style="background-color:yellow">Authentication Package:        Kerberos</span>
	</p><p style="margin-left: 27pt">Transited Services:        -
</p><p style="margin-left: 27pt">Package Name (NTLM only):        -
</p><p style="margin-left: 27pt">Key Length:                0
</p><p>
 </p><p>Event Xml:
</p><p>&lt;Event xmlns="https://schemas.microsoft.com/win/2004/08/events/event"&gt;
</p><p>  &lt;System&gt;
</p><p>    &lt;Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" /&gt;
</p><p>    &lt;EventID&gt;4624&lt;/EventID&gt;
</p><p>    &lt;Version&gt;1&lt;/Version&gt;
</p><p>    &lt;Level&gt;0&lt;/Level&gt;
</p><p>    &lt;Task&gt;12544&lt;/Task&gt;
</p><p>    &lt;Opcode&gt;0&lt;/Opcode&gt;
</p><p>    &lt;Keywords&gt;0x8020000000000000&lt;/Keywords&gt;
</p><p>    &lt;TimeCreated SystemTime="2018-05-07T02:27:48.081988200Z" /&gt;
</p><p>    &lt;EventRecordID&gt;1044763&lt;/EventRecordID&gt;
</p><p>    &lt;Correlation /&gt;
</p><p>    &lt;Execution ProcessID="620" ThreadID="3800" /&gt;
</p><p>    &lt;Channel&gt;Security&lt;/Channel&gt;
</p><p>
		<span style="background-color:yellow">&lt;Computer&gt;SP.contoso.com&lt;/Computer&gt;</span>
	</p><p>    &lt;Security /&gt;
</p><p>  &lt;/System&gt;
</p><p>  &lt;EventData&gt;
</p><p>    &lt;Data Name="SubjectUserSid"&gt;S-1-0-0&lt;/Data&gt;
</p><p>    &lt;Data Name="SubjectUserName"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="SubjectDomainName"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="SubjectLogonId"&gt;0x0&lt;/Data&gt;
</p><p>    &lt;Data Name="TargetUserSid"&gt;S-1-5-21-2477750165-3421169653-395798871-1106&lt;/Data&gt;
</p><p>    &lt;Data Name="TargetUserName"&gt;spfarm&lt;/Data&gt;
</p><p>   &lt;Data Name="TargetDomainName"&gt;contoso&lt;/Data&gt;
</p><p>    &lt;Data Name="TargetLogonId"&gt;0x15636&lt;/Data&gt;
</p><p>    &lt;Data Name="LogonType"&gt;3&lt;/Data&gt;
</p><p>
		<span style="background-color:yellow">&lt;Data Name="LogonProcessName"&gt;Kerberos&lt;/Data&gt;</span>
	</p><p>    &lt;Data Name="AuthenticationPackageName"&gt;Kerberos&lt;/Data&gt;
</p><p>    &lt;Data Name="WorkstationName"&gt;
</p><p>    &lt;/Data&gt;
</p><p>    &lt;Data Name="LogonGuid"&gt;{02398194-25D2-4852-4D60-026F36F6632A}&lt;/Data&gt;
</p><p>    &lt;Data Name="TransmittedServices"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="LmPackageName"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="KeyLength"&gt;0&lt;/Data&gt;
</p><p>    &lt;Data Name="ProcessId"&gt;0x0&lt;/Data&gt;
</p><p>    &lt;Data Name="ProcessName"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="IpAddress"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="IpPort"&gt;-&lt;/Data&gt;
</p><p>    &lt;Data Name="ImpersonationLevel"&gt;%%1833&lt;/Data&gt;
</p><p>  &lt;/EventData&gt;
</p><p>&lt;/Event&gt;
</p><p>
 </p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl3.png" alt="" />
	</p><p>
 </p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl4.png" alt="" />
	</p><p>
 </p><p>
 </p><p>
 </p><p>We should see same event on KDC (Domain controller) too:
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl5.png" alt="" />
	</p><p>
 </p><p>
 </p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>Check if the IIS server is actually configured to send the WWW-Authenticate: Negotiate header:</strong>
		</span></p><p>
 </p><p><span style="color:#222a35;font-size:10pt">If IIS doesn't send this header, you'll need to use ADSUTIL to set the Negotiate header though the <strong>NTAuthenticationProviders</strong> metabase property (see <a href="https://support.microsoft.com/kb/215383"><span style="color:blue;text-decoration:underline">https://support.microsoft.com/kb/215383</span></a><span style="color:#1f497d">)<br /><span style="color:#222a35">Note: by default, the NTAuthenticationProviders property is not set which causes IIS to send both Negotiate and NTLM headers: </span>
			</span></span></p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl6.png" alt="" />
	</p><p>
 </p><p><span style="color:#222a35"><span style="font-size:10pt">To check or set the property: </span><span style="font-size:11pt">Locate the directory that contains the <strong>Adsutil.vbs file</strong>. By default, this directory is C:\Inetpub\Adminscripts.</span>
		</span></p><p><span style="color:#222a35;font-size:11pt">Use the following command to retrieve the current values for the NTAuthenticationProviders metabase property: <br />cscript adsutil.vbs get w3svc/WebSite/root/NTAuthenticationProviders<br />In this command, WebSite is a placeholder for the Web site ID number. The Web site ID number of the default Web site is 1.
</span></p><p><span style="color:#222a35;font-size:10pt"><strong>For Example:</strong>
		</span></p><p>
 </p><p><span style="color:#222a35">PS C:\Users\Administrator.contoso&gt; cscript "C:\inetpub\AdminScripts\adsutil.vbs" get w3svc/<span style="background-color:yellow">1834077867</span>/root/NTAuthenticat
</span></p><p><span style="color:#222a35">ionProviders
</span></p><p><span style="color:#222a35">Microsoft (R) Windows Script Host Version 5.8
</span></p><p><span style="color:#222a35">Copyright (C) Microsoft Corporation. All rights reserved.
</span></p><p>
 </p><p><span style="color:#222a35">NTAuthenticationProviders       : (STRING) "Negotiate,NTLM"
</span></p><p>
 </p><p><span style="color:#222a35;font-size:11pt">If the command above does not return the string "Negotiate,NTLM," use the following command to enable the Negotiate process: <br />cscript adsutil.vbs set w3svc/WebSite/root/NTAuthenticationProviders "Negotiate,NTLM"
</span></p><p><span style="color:#222a35"><span style="font-size:11pt">Example: cscript adsutil.vbs set w3svc/</span><span style="background-color:yellow">1834077867</span><span style="font-size:11pt">/root/NTAuthenticationProviders "Negotiate,NTLM"</span>
		</span></p><p><span style="color:#222a35;font-size:11pt">Warning: If you edit the metabase incorrectly, you can cause serious problems that may require that you reinstall any product that uses the metabase. Microsoft cannot guarantee that problems that result if you incorrectly edit the metabase can be solved. Edit the metabase at your own risk.
</span></p><p><span style="color:#222a35;font-size:11pt">Note: <strong>Always back up the metabase before you edit it.</strong>
		</span></p><p><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://support.microsoft.com/en-us/help/215383/how-to-configure-iis-to-support-both-the-kerberos-protocol-and-the-ntl"><span style="color:blue;text-decoration:underline">https://support.microsoft.com/en-us/help/215383/how-to-configure-iis-to-support-both-the-kerberos-protocol-and-the-ntl</span></a>&gt; </em></span>
	</p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>Check if the client and server are on the same machine:</strong>
		</span></p><p>
 </p><p><span style="color:#222a35;font-size:10pt">Kerberos is not enabled in this configuration and a hard coded loopback check will always force usage of NTLM in this scenario. Note that NTLM may also not work in this configuration (see <a href="https://support.microsoft.com/kb/896861"><span style="color:blue;text-decoration:underline">https://support.microsoft.com/kb/896861</span></a><span style="color:#1f497d"> <span style="color:#222a35">for more details).</span>
			</span></span></p><p>
 </p><p><strong>Workarounds</strong>:
</p><p>Set DisableStrictNameChecking to 1 And 
</p><p>Either 
</p><p>[Preferred method if NTLM is needed]Create "Multi-String Value" BackConnectionHostNames = "HostName of the site" at location: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
</p><p>OR
</p><p>Create Dword "DisableLoopbackCheck" = 1 at location HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
</p><p>
 </p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>Duplicate or Wrong Service principal name set for Application Pool identity:</strong>
		</span></p><p>
 </p><p>If a wrong SPN is set for the APP Pool identity or if there are Duplicate SPNs set, kerberos AUTHENTICATION fails because it cannot determine which account to use to Decrypt the Ticket.
</p><p>
 </p><p>We can use these <span style="font-size:14pt"><strong>SETSPN.EXE</strong></span> commands to check any SPN related issues:
</p><p>
 </p><p>SETSPN -L [Application Pool account] --&gt; Will list all SPNs registered for that account.
</p><p>SETSPN -X --&gt; Will show any Duplicate SPNs
</p><p>SETSPN -Q --&gt; Can be used to Query for Specific or all SPNs.
</p><p>
 </p><p>
 </p><p><span style="font-size:14pt"><strong>SETSPN.EXE </strong></span><span style="background-color:yellow">Usage: C:\Windows\system32\setspn.exe [modifiers switch] [accountname]</span>
	</p><p>  Where "accountname" can be the name or domain\name
</p><p>  of the target computer or user account
</p><p>
 </p><p>  Edit Mode Switches:
</p><p>   -R = reset HOST ServicePrincipalName
</p><p>Usage:   setspn -R accountname
</p><p>   -S = add arbitrary SPN after verifying no duplicates exist
</p><p>    Usage:   setspn -S SPN accountname
</p><p>   -D = delete arbitrary SPN
</p><p>    Usage:   setspn -D SPN accountname
</p><p>   -L = list SPNs registered to target account
</p><p>    Usage:   setspn [-L] accountname
</p><p>
 </p><p>  Query Mode Switches:
</p><p>   -Q = query for existence of SPN
</p><p>    Usage:   setspn -Q SPN
</p><p>   -X = search for duplicate SPNs
</p><p>    Usage:   setspn -X
</p><p>
 </p><p>
 </p><p><strong>Some Example commands with outputs are as below:</strong>
	</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; <span style="background-color:yellow">SetSPN -S HTTP/Kerberos.contoso.com:9090 Contoso\SPAppPool</span>
	</p><p>Checking domain DC=contoso,DC=com
</p><p>
 </p><p><span style="background-color:yellow">Registering ServicePrincipalNames for CN=SPAppPool,CN=Users,DC=contoso,DC=com</span>
	</p><p><span style="background-color:yellow">        HTTP/Kerberos.contoso.com:9090</span>
	</p><p>Updated object
</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt;<span style="background-color:yellow"> setspn -l contoso\SPAppPool</span>
	</p><p>Registered ServicePrincipalNames for CN=SPAppPool,CN=Users,DC=contoso,DC=com:
</p><p>        HTTP/Kerberos.contoso.com:9090
</p><p>        HTTP/Kerberos:9090
</p><p>        HTTP/Kerberos.contoso.com
</p><p>        HTTP/Kerberos
</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; SetSPN -S HTTP/Kerberos Contoso\SPAppPool
</p><p>Checking domain DC=contoso,DC=com
</p><p>CN=SPAppPool,CN=Users,DC=contoso,DC=com
</p><p>        HTTP/Kerberos.contoso.com:9090
</p><p>        HTTP/Kerberos:9090
</p><p>        HTTP/Kerberos.contoso.com
</p><p>        HTTP/Kerberos
</p><p>
 </p><p><span style="background-color:yellow">Duplicate SPN found, aborting operation!</span>
	</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; setspn -Q http/sp
</p><p>Checking domain DC=contoso,DC=com
</p><p><span style="background-color:yellow">No such SPN found.</span>
	</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; <span style="background-color:yellow">setspn -Q */SQL</span>
	</p><p>Checking domain DC=contoso,DC=com
</p><p>CN=SQL,CN=Computers,DC=contoso,DC=com
</p><p>
		<span style="background-color:yellow">MSSQLSvc</span>/SQL.contoso.com:1433
</p><p>        MSSQLSvc/SQL.contoso.com
</p><p>        TERMSRV/SQL
</p><p>        TERMSRV/SQL.contoso.com
</p><p>        WSMAN/SQL
</p><p>        WSMAN/SQL.contoso.com
</p><p>        RestrictedKrbHost/SQL
</p><p>        HOST/SQL
</p><p>        RestrictedKrbHost/SQL.contoso.com
</p><p>        HOST/SQL.contoso.com
</p><p>
 </p><p><span style="background-color:yellow">Existing SPN found!</span>
	</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt;<span style="background-color:yellow"> setspn -Q */sp</span>
	</p><p>Checking domain DC=contoso,DC=com
</p><p>CN=SP,CN=Computers,DC=contoso,DC=com
</p><p>        TERMSRV/SP
</p><p>        TERMSRV/SP.contoso.com
</p><p>        WSMAN/SP
</p><p>        WSMAN/SP.contoso.com
</p><p>        RestrictedKrbHost/SP
</p><p>        HOST/SP
</p><p>        RestrictedKrbHost/SP.contoso.com
</p><p>        HOST/SP.contoso.com
</p><p>
 </p><p><span style="background-color:yellow">Existing SPN found!</span>
	</p><p>
 </p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; <span style="background-color:yellow">setspn -X</span>
	</p><p>Checking domain DC=contoso,DC=com
</p><p>Processing entry 0
</p><p><span style="background-color:yellow">found 0 group of duplicate SPNs.</span>
	</p><p>
 </p><p>So, for same Service there should not be 2 different Service accounts for which SPNs are registered otherwise IIS will not know which account to decrypt from.
</p><p>
 </p><p>
 </p><p style="margin-left: 297pt"><span style="color:#288ac6;font-size:20pt"><span style="text-decoration:underline"><strong>Tools:</strong></span>
		</span></p><p>
 </p><ol><li><span style="color:#222a35;font-size:14pt">Klist
</span></li><li><span style="color:#222a35;font-size:14pt">Kerberos Authentication tester
</span></li><li><span style="color:#222a35;font-size:14pt">Fiddler
</span></li><li><span style="color:#222a35;font-size:14pt">Microsoft network monitor
</span></li></ol><p>
 </p><p>
 </p><p style="margin-left: 27pt"><span style="font-size:18pt"><strong>Klist.EXE:
</strong></span></p><p>
 </p><p><span style="color:black">this command-line tool helps you list and purge tickets on your client machine. You can list tickets to verify the validity of tickets. You can also check for other details, such as the permissible flags, SPN type, the client, and server details.
</span></p><p>
 </p><p><strong>KLIST output (in this example, for a Site URL: <a href="https://kerberos:9090"><span style="color:blue;text-decoration:underline">https://kerberos:9090</span></a>):</strong>
	</p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; <span style="background-color:yellow">klist</span>
	</p><p>
 </p><p>Current LogonId is 0:0x16958c
</p><p>
 </p><p>Cached Tickets: (2)
</p><p>
 </p><p>#0&gt;     Client: Administrator @ CONTOSO.COM
</p><p>        Server: <span style="background-color:yellow">krbtgt/CONTOSO.COM @ CONTOSO.COM</span>
	</p><p>
		<span style="background-color:yellow">KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96</span>
	</p><p>        Ticket Flags 0x40e10000 -&gt; forwardable renewable initial pre_authent name_canonicalize
</p><p>        Start Time: 5/6/2018 21:43:29 (local)
</p><p>        End Time:   5/7/2018 7:43:29 (local)
</p><p>        Renew Time: 5/13/2018 21:43:29 (local)
</p><p>
		<span style="background-color:yellow"> Session Key Type: AES-256-CTS-HMAC-SHA1-96</span>
	</p><p>        Cache Flags: 0x1 -&gt; PRIMARY
</p><p>
		<span style="background-color:yellow">Kdc Called: DC.contoso.com</span>
	</p><p>
 </p><p>#1&gt;     Client: Administrator @ CONTOSO.COM
</p><p>        Server: <span style="background-color:yellow">HTTP/kerberos @ CONTOSO.COM</span>
	</p><p>
		<span style="background-color:yellow">KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)</span>
	</p><p>        Ticket Flags 0x40a10000 -&gt; forwardable renewable pre_authent name_canonicalize
</p><p>        Start Time: 5/6/2018 21:43:29 (local)
</p><p>        End Time:   5/7/2018 7:43:29 (local)
</p><p>        Renew Time: 5/13/2018 21:43:29 (local)
</p><p>
		<span style="background-color:yellow">Session Key Type: RSADSI RC4-HMAC(NT)</span>
	</p><p>        Cache Flags: 0
</p><p>
		<span style="background-color:yellow">Kdc Called: DC.contoso.com</span>
	</p><p>
 </p><p>
 </p><p>So, if server does not have same Decryption mechanism (Say RC4) so it can't decrypt tickets. In that case, make sure you enable AES encryption for Service account properties.
</p><p>Run these two commands below if you want to Purge user and System level Kerberos Tickets.
</p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; <span style="background-color:yellow">klist purge</span>
	</p><p>
 </p><p>Current LogonId is 0:0x16958c
</p><p>        Deleting all tickets:
</p><p>        Ticket(s) purged!
</p><p>
 </p><p>PS C:\Users\Administrator.contoso&gt; <span style="background-color:yellow">klist -li 0x3e7 purge</span>
	</p><p>
 </p><p>Current LogonId is 0:0x16958c
</p><p>Targeted LogonId is 0:0x3e7
</p><p>        Deleting all tickets:
</p><p>        Ticket(s) purged!
</p><p>
 </p><p>
 </p><p style="margin-left: 27pt"><span style="font-size:18pt"><strong>Kerberos Authentication Tester </strong></span>(It can be found here: <a href="https://blog.michelbarneveld.nl/michel/archive/2009/12/05/kerberos-authentication-tester.aspx"><span style="color:blue;text-decoration:underline"><strong>https://blog.michelbarneveld.nl/michel/archive/2009/12/05/kerberos-authentication-tester.aspx</strong></span></a>)<span style="font-size:18pt"><strong>
			</strong></span></p><p>
 </p><p>Kerberos Authentication Tester Features:
</p><p>
 </p><ul><li>It shows what authentication method is used in a web request: None, Basic, NTLM or Kerberos 
</li><li><span style="background-color:yellow">It shows the SPN used in case of Kerberos </span>
		</li><li>It shows the HTTP status 
</li><li>It shows the HTTP Headers of the request. 
</li><li>It shows the version of NTLM used (v1 or v2) 
</li><li>It has a detailed view with a complete breakdown of the Authorization header. (Yep, went through all the RFCs to dissect the Kerberos and NTLM packages) 
</li><li><span style="background-color:yellow">It shows your current Kerberos tickets and allows you to remove them (like klist.exe) </span>
		</li></ul><p>
 </p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl7.png" alt="" />
	</p><p>
 </p><p>The blue details link at the top right shows a new screen with the details of the request, including a breakdown of the Authorization HTTP Header. You can also save this XML.
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl8.png" alt="" />
	</p><p>
 </p><p>
 </p><p>It shows all kerb Tickets.
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl9.png" alt="" />
	</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl10.png" alt="" />
	</p><p>
 </p><p>
 </p><p>
 </p><p style="margin-left: 27pt"><span style="font-size:18pt"><strong>Network Monitor/WireShark: </strong></span>network trace capture and review tools. You can review trace to identify Kerberos errors.<span style="font-size:18pt"><strong>
			</strong></span></p><p>
 </p><p>
 </p><p style="margin-left: 27pt"><span style="text-decoration:underline">Best way to get the network capture is:</span>
	</p><p style="margin-left: 27pt">
 </p><p style="margin-left: 27pt">1. To reduce the possibility of caching data, do one of the following:
</p><p style="margin-left: 27pt">•Close/Reopen client application
</p><p style="margin-left: 27pt">•Logoff/Logon client workstation
</p><p style="margin-left: 27pt">•Reboot client workstation
</p><p style="margin-left: 27pt">2. Start the network capture
</p><p style="margin-left: 27pt">3. Clear DNS cache using:
</p><p style="margin-left: 27pt">ipconfig /flushdns
</p><p style="margin-left: 27pt">4. Clear NetBIOS cache using:
</p><p style="margin-left: 27pt">nbtstat –RR
</p><p style="margin-left: 27pt">5. Clear user Kerberos tickets using:
</p><p style="margin-left: 27pt">klist purge
</p><p style="margin-left: 27pt">6. Clear system / computer Kerberos tickets using (Vista or higher only):
</p><p style="margin-left: 27pt">Klist –li 0x3e7 purge
</p><p style="margin-left: 27pt">7. Reproduce the authentication failure with the application in question
</p><p style="margin-left: 27pt">8. Stop the network capture
</p><p>
 </p><p>
 </p><p><strong><em>Now that you have the capture, you can filter the traffic using the string '<span style="background-color:yellow">Kerberosv5</span>' if you are using Network Monitor. If you are using Wireshark, you can filter using the string 'Kerberos'.</em></strong>
	</p><p><strong><em>To be more thorough, load the <span style="background-color:yellow">Authentication Traffic filter</span> that shows packets containing Kerberos tickets as well. You can do this by clicking the Load Filter button, choose Standard Filters, and then click <span style="background-color:yellow">Authentication Traffic</span>.</em></strong>
	</p><p>
 </p><p>OR add this <span style="background-color:yellow">Filter</span>:
</p><p>
 </p><p>KerberosV5 
</p><p>OR KerberosV5.KrbError.Sname 
</p><p>OR KerberosV5.AsReq
</p><p>OR KerberosV5.AsRep
</p><p>OR KerberosV5.TgsReq
</p><p>OR KerberosV5.TgsRep
</p><p>
 </p><p>Click 'Apply' to begin filtering… 
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl11.png" alt="" />
	</p><p>
 </p><p>
 </p><p>
 </p><p>In my Network trace examples below:
</p><p>I am using SQL as my Client machine
</p><p>192.168.2.50 is DC (KDC)
</p><p>SP is SharePoint server
</p><p>
 </p><p><strong>Analysing Network trace……………………….</strong>
	</p><p>
 </p><p><strong>First</strong>, we see AS (Authentication Server) request and response.
</p><p>DC given AS response Ticket (TGT) to client.
</p><p>
 </p><p><span style="background-color:yellow">(Service name) Sname requested and sent is krbtgt:</span>
	</p><p><span style="background-color:yellow">Sname: krbtgt/CONTOSO.COM</span>
	</p><p>
 </p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl12.png" alt="" />
	</p><p>
 </p><p>
 </p><p>Then Client uses AS response Ticket to make TGS request (Service ticket) to KDC.
</p><p>TGS Response ticket (Service Ticket) is sent to client by KDC.
</p><p>(Service name) Sname requested and sent is HTTP:
</p><p><span style="background-color:yellow"><strong>Sname: HTTP/WebApp name</strong></span>
	</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl13.png" alt="" />
	</p><p>
 </p><p>
 </p><p>                                                                            
 </p><p><span style="font-size:18pt"><strong>                                                                           FIDDLER:
</strong></span></p><p>
 </p><p>1st request will be <span style="background-color:yellow">anonymous</span> if user is not authenticated.
</p><p><span style="background-color:yellow"><strong>401</strong></span> is what we see first ……………..
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl14.png" alt="" />
	</p><p>
 </p><p>Then we see <strong>302</strong> client Presenting kerberos Ticket to Server (SP) where server responds with a Kerberos Reply after decrypting the ticket with App Pool Identity.
</p><p>If the Ticket presented by Client is valid then server moves request (302) to the page Client should be going to.. 
</p><p>It could be home page of the Site, as in this example is: 
</p><p>Location: <a href="https://teams/_layouts/15/start.aspx"><span style="color:blue;text-decoration:underline">https://teams/_layouts/15/start.aspx#/SitePages/Home.aspx</span></a>
	</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl15.png" alt="" />
	</p><p>
 </p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl16.png" alt="" />
	</p><p>
 </p><p>
 </p><p>In Next step, Client uses it's Original Kerberos ticket to obtain data.
</p><p>SO, we see <strong>200</strong> …………….. And we get the page..
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl17.png" alt="" />
	</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0025_Part3Troubl18.png" alt="" />
	</p><p>
 </p><p>Then further, client uses same ticket to access the Site resources (pages, links, files etc.).
</p><p>------------------------------------------------------------------------------------------------------------------------------------
</p><p>
 </p><p>And that's all you might need for almost all of your Kerberos related issues - Of Course, wrt SharePoint :)
</p><p>
 </p><p>Happy <span style="color:#288ac6;font-size:16pt"><strong>SharePointing </strong></span>!!
</p><p>
 </p><p><span style="background-color:yellow"><strong>Check other Part links in this series too:</strong></span>
	</p><p><a href="https://blogs.technet.microsoft.com/vivek/2018/01/23/part1-explaining-integrated-windows-authentication-in-sharepoint-and-how-ntlm-fails-but-kerberos-works-in-double-hop-authentication/">Part1: Explaining Integrated Windows Authentication in SharePoint and How NTLM fails but Kerberos works in Double-Hop authentication
</a></p><p><a href="https://blogs.technet.microsoft.com/vivek/2018/01/26/part2-step-by-step-guide-for-configuring-kerberos-authentication-in-sharepoint-20132016/">Part2: Step by step Guide for Configuring Kerberos Authentication in SharePoint 2013/2016</a><span style="color:blue;text-decoration:underline">
		</span></p><p>
 </p><p>
 </p><p><span style="text-decoration:underline">Additional References:</span>
	</p><p>
 </p><p><a href="https://msdn.microsoft.com/en-us/library/aa480475.aspx"><span style="color:blue;text-decoration:underline">Explained: Windows Authentication in ASP.NET 2.0</span></a>
	</p><p><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WSV320-R"><span style="color:blue;text-decoration:underline">Windows Authentication Deep Dive What Every Administrator Should Know</span></a>
	</p><p><a href="https://social.technet.microsoft.com/wiki/contents/articles/4209.kerberos-survival-guide.aspx"><span style="color:blue;text-decoration:underline">Kerberos Survival Guide</span></a>
	</p><p><a href="https://www.youtube.com/watch?v=7-LjpO2nTJo"><span style="color:blue;text-decoration:underline">Kerberos Authentication Demo</span></a>
	</p><p><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb742516(v=technet.10)"><span style="color:blue;text-decoration:underline">Kerberos Explained</span></a>
	</p><p><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)"><span style="color:blue;text-decoration:underline">How the Kerberos Version 5 Authentication Protocol Works</span></a>
	</p><p><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc961966(v=technet.10)"><span style="color:blue;text-decoration:underline">Kerberos messages and tickets</span></a>
	</p><p><a href="https://blogs.msdn.microsoft.com/besidethepoint/2010/05/08/double-hop-authentication-why-ntlm-fails-and-kerberos-works/"><span style="color:blue;text-decoration:underline">Double-hop authentication: Why NTLM fails and Kerberos works</span></a>
	</p><p><a href="https://technet.microsoft.com/en-us/library/gg502606(v=office.14).aspx"><span style="color:blue;text-decoration:underline">Kerberos configuration known issues (SharePoint Server 2010)</span></a>
	</p><p><a href="https://blogs.msdn.microsoft.com/friis/2009/12/31/things-to-check-when-kerberos-authentication-fails-using-iisie"><span style="color:blue;text-decoration:underline">Things to check when Kerberos authentication fails using IIS/IE…</span></a>
	</p><p><a href="https://technet.microsoft.com/en-us/library/bb463166.aspx"><span style="color:blue;text-decoration:underline">Kerberos and LDAP Error Messages</span></a>
	</p><p><a href="https://blogs.technet.microsoft.com/askds/2012/07/27/kerberos-errors-in-network-captures"><span style="color:blue;text-decoration:underline">Kerberos errors in network captures</span></a>
	</p><p><a href="https://blogs.msdn.microsoft.com/webtopics/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-07-5/"><span style="color:blue;text-decoration:underline">Service Principal Name (SPN) checklist for Kerberos authentication with IIS 7.0/7.5</span></a>
	</p><p><strong>Kerberos RFC:</strong>
	</p><p><a href="https://www.ietf.org/rfc/rfc1510.txt"><span style="color:blue;text-decoration:underline">https://www.ietf.org/rfc/rfc1510.txt</span></a>
	</p><p><a href="https://www.ietf.org/rfc/rfc4120.txt"><span style="color:blue;text-decoration:underline">https://www.ietf.org/rfc/rfc4120.txt</span></a>
	</p><p>
 </p>]]></content:encoded>
    </item>
    <item>
      <title>Part2: Step by step Guide for Configuring Kerberos Authentication in SharePoint 2013/2016</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/part2-step-by-step-guide-for-configuring-kerberos-authentication-in-sharepoint-20132016</link>
      <pubDate>Fri, 26 Jan 2018 04:23:02 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=2835</guid>
      <description><![CDATA[This is a continuation of part1 of my Integrated Windows Authentication blog series.
In this post,...]]></description>
      <content:encoded><![CDATA[<p style="margin-left: 17pt">This is a <strong>continuation of <a href="https://blogs.technet.microsoft.com/vivek/2018/01/23/part1-explaining-integrated-windows-authentication-in-sharepoint-and-how-ntlm-fails-but-kerberos-works-in-double-hop-authentication/" /></strong>part1 of my Integrated Windows Authentication blog series.
</p><p style="margin-left: 17pt">In this post, we will see <strong>how to configure Kerberos for SharePoint web application</strong> (2013/2016 won't matter as steps are same so I am going to be working on SharePoint 2013 farm for this setup)..
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="font-size:14pt"><span style="background-color:yellow;text-decoration:underline"><strong>Let me outline 5 Simple steps to configure Kerberos Authentication in SharePoint:</strong></span>
		</span></p><p style="margin-left: 17pt">
 </p><ul style="margin-left: 44pt"><li><div>Create SharePoint Web app with Negotiate(Kerberos) AUTH enabled from central administration Site.<strong>
				</strong></div><p><span style="color:#212121">Post web app creation, Confirm Authentication providers: Verify that Claims Authentication Type check box for "Enable Windows Authentication and Integrated Windows Authentication" is selected and dropdown is selected as Negotiate (Kerberos).
</span></p></li><li>Add a DNA HOST (A) Record for the Host Header of the web application if you have chosen to make it a host header web application.<strong>
			</strong></li><li>SETSPN: Set Service principal name (SPN) for the Service account running Application Pool of the Web application.<strong>
			</strong></li><li><span style="color:#212121">Allow Trust for delegation from DC ADUC - <span style="color:black">Delegate the Service account to "Trust the use for delegation to Kerberos".<span style="color:#212121"><strong>
						</strong></span></span></span></li><li>Configure Kerberos in IIS: Set Kerberos as 'Top' Authentication 'provider' over NTLM and uncheck  "Enable Kernel-mode" authentication.<strong>
			</strong></li></ul><p>
 </p><p>
 </p><p style="margin-left: 17pt"><strong>Let's go through steps in detail………..</strong>
	</p><p style="margin-left: 17pt">I assume you folks know about 1st and 2nd step as those are pretty basic ones really - if not, then there are tons of articles that will help you to create a new SharePoint web application and Set a DNA 'A' record for the host header of the web application.
</p><p style="margin-left: 17pt">I am pasting couple of them which will help create:
</p><p style="margin-left: 17pt">SharePoint web application: <a href="https://docs.microsoft.com/en-us/sharepoint/administration/create-a-web-application">https://docs.microsoft.com/en-us/sharepoint/administration/create-a-web-application</a>
	</p><p style="margin-left: 17pt">DNS HOST (A) record: <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/add-a-host--a--resource-record-to-corporate-dns-for-a-federation-server">https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/deployment/add-a-host--a--resource-record-to-corporate-dns-for-a-federation-server</a>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">By now, you should have a SharePoint web application with a host header (host header is not mandatory to have)
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">So, let's go into <span style="background-color:lime"><strong>step 3</strong></span>…..
</p><p style="margin-left: 17pt"><span style="font-size:14pt"><strong>Set Service principal name (SPN) for the Service account running Application Pool of the Web application:</strong>
		</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Now if you try to go to option 4 of setting Delegation without doing step 3, below is what will happen.
</p><p style="margin-left: 17pt">Delegation tab in Active directory users and computers (ADUC) for the account will not be available until a SPN is set.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby1.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">This command will give you a black result:
</p><p style="margin-left: 17pt">PS C:\Users\Administrator&gt; <span style="background-color:yellow">setspn -L Contoso\Spsvc</span>
	</p><p style="margin-left: 17pt"><strong>Registered ServicePrincipalNames for CN=SharePoint Service,CN=Users,DC=contoso,DC=com:</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">'Attribute Editor' tab also shows you <strong>servicePrincipalName </strong>value that has been set, in our case - It is not Set yet.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby2.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Delegation tab is only displayed when there is at least one value set in the servicePrincipalName attribute.
</p><p style="margin-left: 17pt">Let me quickly show you an account which has SPN set already (just as an example account beforehand on which I had set SPN - I will show you how to do so in this post later)
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby3.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">This command will show the SPN that is set.
</p><p style="margin-left: 17pt">PS C:\Users\Administrator&gt; setspn -L Contoso\Spfarm
</p><p style="margin-left: 17pt"><strong>Registered ServicePrincipalNames for CN=SharePoint Farm,CN=Users,DC=contoso,DC=com:</strong>
	</p><p style="margin-left: 44pt"><strong>host/adfs.contoso.com</strong>
	</p><p>
 </p><p>
 </p><p style="margin-left: 17pt">And Even 'Attribute Editor' tab also shows <strong>servicePrincipalName </strong>value that has been set.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby4.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">NOW, let's move to actually setting SPN.
</p><p style="margin-left: 17pt"><strong>Setting a ServicePrincipalName (SPN) can be performed in a number of ways; ADSIEdit, Attribute Editor in ADCU and SETSPN.EXE. </strong>
	</p><p style="margin-left: 17pt">You need to <span style="background-color:yellow">first set the SPNs and then enable Delegation on the service accounts (Reason I've already explained above)</span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">We are going to be using <strong>SETSPN.EXE</strong> Utility to Set  ServicePrincipalName (SPN) of the service account.
</p><p style="margin-left: 17pt">In Active Directory, the <strong>servicePrincipalName</strong> (SPN) attribute is a multivalued, nonlinked attribute that is built from the DNS host name. <strong>The SPN is used in the process of mutual authentication between the client and the server hosting a particular service. The client finds a computer account based on the SPN of the service to which it is trying to connect. </strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Setspn.exe:</strong>
	</p><p style="margin-left: 17pt">This command-line tool allows you to read, modify, and delete the Service Principal Names (SPN) directory property for an Active Directory service account. SPNs are used to locate a target principal name for running a service. You can use Setspn to view the current SPNs, reset the account's default SPNs, and add or delete supplemental SPNs.
</p><p>
 </p><p style="margin-left: 17pt"><strong>SPN Format</strong>
	</p><p style="margin-left: 17pt">When you manipulate SPNs with the Setspn tool, the SPN must be entered in the correct format. <strong>The format of an SPN is <em>serviceclass</em>/host:<em>port</em>/<em>servicename</em></strong>, in which each item represents a name or value. Unless the service name and port are not standard, you do not have to enter them when you use Setspn. For example, if you have a service with the following characteristics:
</p><ul style="margin-left: 44pt"><li>Name: MyService 
</li><li>Running on a computer named DCA 
</li><li>Uses the TCP or UDP port 8088
</li><li>Service name: MyS 
</li><li>Location: in the directory under an organizational unit (OU) named CS, in a domain named cpandl.com
</li></ul><p>the SPN looks like the following: 
</p><p style="margin-left: 17pt">MyService/DCA.cpandl.com:8088/CN=MyS,OU=CS,DC=cpandl,DC=com 
</p><p style="margin-left: 17pt"><span style="color:#595959"><em>From &lt;<a href="https://technet.microsoft.com/pt-pt/library/cc773257(v=ws.10).aspx">https://technet.microsoft.com/pt-pt/library/cc773257(v=ws.10).aspx</a>&gt; </em></span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#454545"><strong>The HOST SPN (host/server.domain.com) works for multiple services like HTTP &amp; RPCSS.</strong> If you would like to see the default Host to SPN mappings use LDP or ADSI Edit and navigate to: cn=Directory Services,CN=Windows NT,CN=Services,CN=Configuration,DC=[Your Domain Component]. Then look at the <strong>sPNMappings attribute</strong>.
</span></p><p style="margin-left: 17pt"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/58/02/metablogapi/3652.image_677CAE15.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby5.png" alt="" border="0" /></a>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>In our case, we are going to be using SETSPN command with these Switches below:</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">General Steps are like these below………
</p><p style="margin-left: 17pt"><span style="color:#212121">Run <em>setspn</em> command with your web application's Application Pool Service Account – e.g. DomainName/App pool service account. To do so, the Application Pool Service account must have membership in Domain Administrator or Enterprise Administrator.
</span></p><p style="margin-left: 17pt">
 </p><ul style="margin-left: 44pt"><li><span style="color:#212121">Open command prompt "Run as" Administrator.
</span></li><li><span style="color:#212121">(Optional step) Check if any SPN is registered for Application Pool Service Account. <br /><br /><span style="background-color:yellow"><em>setspn -L App pool service account </em></span>
			</span></li><li><span style="color:#212121">(Important command) Register SPN for Host Name on Application Pool Service Account.<br /><br /><em><span style="background-color:yellow">setspn -S</span> HTTP/spn host name &lt;space&gt;App pool service account<br /><br /></em><strong><span style="text-decoration:underline">Note</span> - </strong>The HTTP service above is case insensitive. Do not configure service principal names with "https" even if the web application uses SSL. If your web application has port number (e.g. port number - 1234), then it should be after Host name; else SPN will get registered but service ticket won't get generated. 
</span></li><li><span style="color:#212121">(Important command) Now, register SPN for the Full Qualified Domain Name (FQDN) also.<br /><br /><em>setspn -S HTTP/Full qualified domain name &lt;space&gt;App pool service account <br /><br /></em><strong><span style="text-decoration:underline">Note</span> - </strong>If your web application has port number, then it should be after FQDN name; else SPN will get registered but service ticket won't be generated. 
</span></li><li><span style="color:#212121">(Optional step) You can check numbers of service(s) registered for Application Pool Service Account.<br /><br /><span style="background-color:yellow">"-L" option will list all the service(s).<br /><em>setspn -L&lt;space&gt;App pool service account</em></span><em><br /><br /></em>If the command ran successfully, you can see the list of services associated with the Service Account - App Pool Service Account.
</span></li><li><span style="color:#212121">(Important command) For DB Server, instead of HTTP service, register <strong>MSSQLSvc service</strong> to register the SPN.
</span></li></ul><p>
 </p><p>
 </p><p style="margin-left: 17pt"><span style="font-size:14pt"><span style="background-color:yellow;text-decoration:underline"><strong>Setting SPNs:</strong></span>
		</span></p><p style="margin-left: 17pt">
 </p><div style="margin-left: 17pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:195px" /><col style="width:186px" /><col style="width:272px" /></colgroup><tbody valign="top"><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><strong>DNS Host </strong></p></td><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><strong>IIS App Pool Identity </strong></p></td><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><strong>Service Principal Names </strong></p></td></tr><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p>Kerberos.contoso.com</p></td><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p>Contoso\SPAppPool</p></td><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p>HTTP/Kerberos
</p><p>HTTP/Kerberos.contoso.com
</p><p>HTTP/Kerberos:9090
</p><p>HTTP/Kerberos.contoso.com:9090</p></td></tr></tbody></table></div><p style="margin-left: 17pt">To create the service principal names the following commands were executed:
</p><p style="margin-left: 17pt">SetSPN -S HTTP/Kerberos Contoso\SPAppPool 
</p><p style="margin-left: 17pt">SetSPN -S HTTP/Kerberos.contoso.com Contoso\SPAppPool 
</p><p style="margin-left: 17pt">SetSPN -S HTTP/Kerberos:9090 Contoso\SPAppPool 
</p><p style="margin-left: 17pt">SetSPN -S HTTP/Kerberos.contoso.com:9090 Contoso\SPAppPool 
</p><p style="margin-left: 17pt">
 </p><div style="margin-left: 17pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:698px" /></colgroup><tbody valign="top"><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><strong>Important </strong></p></td></tr><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><span style="background-color:yellow">Do not configure service principal names with HTTPS even if the web application uses SSL.</span></p></td></tr></tbody></table></div><p style="margin-left: 17pt">In our example we used a new command line switch, -S, introduced in Windows Server 2008 that checks for the existence of the SPN before creating the SPN on the account. If the SPN already exists, the new SPN is not created and you see an error message.
</p><p style="margin-left: 17pt">If duplicate SPNs are found, you have to resolve the issue by either using a different DNS name for the web application, thereby changing the SPN, or by removing the existing SPN from the account it was discovered on. 
</p><div style="margin-left: 17pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:723px" /></colgroup><tbody valign="top"><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p><strong>Important </strong></p></td></tr><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p>Before deleting an existing SPN, be sure it is no longer needed, otherwise you may break Kerberos authentication for another application in your environment. </p></td></tr></tbody></table></div><p style="margin-left: 17pt"><strong>Service Principal Names and SSL</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">It is common to confuse Kerberos Service Principal Names with URLs for http web applications because the SPN and URI formats are very similar in syntax, but it's important to understand that they are two very separate and unique things. <span style="background-color:yellow">Kerberos service principal names are used to identify a service, and when that service is an http application, the service scheme is "HTTP" regardless if the service is access with SSL or not</span>. This means that even if you access the web application using "<a href="https://someapp">https://someapp</a>" you do not, and should not, configure a service principal name with HTTPS, for example "HTTPS/someapp
</p><p style="margin-left: 17pt"><span style="color:#595959"><em>From &lt;<a href="https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx">https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx</a>&gt; </em></span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Now………..
</p><p style="margin-left: 17pt">After configuration, if I go to Attribute editor of the Service account, I see SPNs:
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby6.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>SPNs can be added or removed from "Attribute editor" tab also from user's properties but recommended way to do is through SetSPN Utility.</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby7.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Having Set SPN in step 3, let's move to <span style="background-color:lime"><strong>STEP 4</strong></span>……………..
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong><span style="color:#212121">Allow Trust for delegation from DC ADUC - </span>Delegate the Service account to "Trust the use for delegation to Kerberos".</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Go to ADUC, locate your service account and go to it's properties by right clicking on it.
</p><p style="margin-left: 17pt">Click on <strong>Delegation</strong> Tab!
</p><p style="margin-left: 17pt">Delegation can be set by any of these 3 options:
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby8.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby9.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby10.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Significance of all those 3 options are given below …………..</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:black">To configure a service's account for delegation if the service runs under its own domain user account
</span></p><p style="margin-left: 17pt">
 </p><ul><li><span style="color:black">Right-click the user object in Active Directory Users and Computers.
</span></li><li><span style="color:black">Click Properties.
</span></li><li><span style="color:black">Click the Delegation tab.
</span></li><li><span style="color:black">If Do not trust this computer for delegation is selected, select the appropriate option:
</span></li><li><span style="color:black">If the <strong>Trust this computer for delegation to any service (Kerberos only)</strong> option is selected, then the account is using unconstrained delegation, which is not recommended.
</span></li><li><span style="color:black">If the <strong>Trust this computer for delegation to specified services only</strong> option is selected, then the account is using constrained delegation.
</span></li><li><span style="color:black">If the <strong>Use Kerberos Only</strong> option is selected, then the account is using constrained delegation without protocol transition.
</span></li><li><div><span style="color:black">If the <strong>Use any authentication protocol</strong><span style="background-color:yellow"> option is selected, then the account is using constrained delegation with protocol transition.</span>
				</span></div><p>
 </p><p><span style="color:#595959"><em>From &lt;<a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)">https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)</a>&gt; </em></span>
			</p><p>
 </p><p>
 </p><p><strong>Moving on to Adding Delegation…………………..</strong>
			</p><p>Go to account properties&gt; Delegation tab&gt; <strong>Trust this computer for delegation to specified services only&gt; Use any authentication protocol&gt; Click on Add&gt; Users and computers&gt; Type Service account&gt; check names.</strong>
			</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby11.png" alt="" />
			</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby12.png" alt="" />
			</p><p>
 </p><p>Click ok.
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby13.png" alt="" />
			</p><p>
 </p><p>Click 'Select All' to select all services for delegation and click ok.
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby14.png" alt="" />
			</p><p>
 </p><p>
 </p><p>With that, Moving to <span style="background-color:lime">Step 5</span>……………..
</p><p><strong>Configure Kerberos in IIS: Set Kerberos as 'Top' Authentication 'provider' over NTLM and uncheck  "Enable Kernel-mode" authentication.</strong>
			</p><p>
 </p></li><li>Go to IIS manager&gt; Sites Tab&gt; Select the web application - and in the middle pane, double click on Authentication under IIS section.
</li><li>In the Authentication dialog, select Windows Authentication.
</li><li>Click on Providers in the right actions pane.
</li><li>Verify that Negotiate and NTLM are listed. Note that Negotiate option should be on the top.
</li><li>Click Cancel and then again in the right actions pane, click on Advanced Settings. 
</li><li>Verify in the Advanced Settings dialog that Extended Protection is Off and that "Enable Kernel-mode" authentication is unchecked.
</li><li>Click Cancel.
</li><li>Ignore below warnings.
</li><li><div>Update Site Bindings with Host Name and default Port number 80. If the web application's port number is not default port (i.e. port 80), then we need to convert it to port 80; else run SPN commands with non default port number
</div><p>
 </p><p>
 </p><p>After this, our setup is done but We need to <strong>Verify that Kerberos authentication is enabled……………</strong>
			</p><p>
 </p><p>
 </p><p><strong>To verify that Kerberos authentication is enabled on the web site </strong>
			</p><ul><li>Open IIS manager.
</li><li>Select the IIS web site to verify.
</li><li>In Features View, under IIS, double click <strong>Authentication</strong>.
</li><li>Select <strong>Windows Authentication</strong> which should be enabled.
</li><li>On the right hand side under <strong>Actions</strong>, select <strong>Providers</strong>. Verify <strong>Negotiate</strong> is at the top of the list.
</li></ul></li></ul><p>
 </p><p>
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby15.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Also, Verify that Kernel mode authentication is disabled……………..</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Kernel mode authentication is not supported in SharePoint Server 2010.</strong> By default, all SharePoint Server Web Applications should have Kernel Mode Authentication disabled by default on their corresponding IIS web sites. Even in situations where the web application was configured on an existing IIS web site, SharePoint Server disables kernel mode authentication as it provisions a new web application on the existing IIS site. 
</p><p style="margin-left: 17pt"><strong>To verify that kernel mode authentication is disabled </strong>
	</p><ul style="margin-left: 44pt"><li>Open IIS manager.
</li><li>Select the IIS web site to verify.
</li><li>In Features View, under IIS, double click <strong>Authentication</strong>.
</li><li>Select <strong>Windows Authentication</strong>, which should be enabled.
</li><li>Click <strong>Advanced Settings</strong>.
</li><li>Verify both EAP and Kernel Mode Authentication are disabled.
</li></ul><p>
 </p><p style="margin-left: 17pt"><span style="color:#595959"><em>From &lt;<a href="https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx">https://technet.microsoft.com/en-us/library/gg502602(v=office.14).aspx</a>&gt; </em></span>
	</p><p>
 </p><p>
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0021_Part2Stepby16.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p>
 </p><p>
 </p><p style="margin-left: 17pt">If everything is good, then by now, you have <span style="background-color:lime">successfully configured Kerberos AUTHENTICATION</span> for SharePoint Web application.
</p><p>
 </p><p style="margin-left: 17pt">----------------------------------------------------------------------------------------------------------------------------
</p><p style="margin-left: 17pt"><strong>Next step is to verify that kerberos AUTH is actually working or not!</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="background-color:yellow">Steps to verify and best practices are mentioned in my Part3 post here … … .. .. …. .. …. ….</span>   --&gt; See you there!
</p><p>
 </p><p>
 </p><p style="margin-left: 17pt"><span style="background-color:yellow"><strong>Check other Part links in this series too:</strong></span>
	</p><p>
 </p><p style="margin-left: 17pt"><a href="https://blogs.technet.microsoft.com/vivek/2018/01/23/part1-explaining-integrated-windows-authentication-in-sharepoint-and-how-ntlm-fails-but-kerberos-works-in-double-hop-authentication/">Part1: Explaining Integrated Windows Authentication in SharePoint and How NTLM fails but Kerberos works in Double-Hop authentication
</a></p><p style="margin-left: 17pt"><a href="https://blogs.technet.microsoft.com/vivek/2018/02/02/part3-troubleshooting-kerberos-authentication-and-things-to-check-when-it-fails/">Part3: Troubleshooting Kerberos authentication and things to check when it fails</a>
	</p><p>
 </p><p>
 </p><p style="margin-left: 17pt"><span style="text-decoration:underline">Additional References:</span>
	</p><p>
 </p><p style="margin-left: 17pt"><a href="https://msdn.microsoft.com/en-us/library/aa480475.aspx">Explained: Windows Authentication in ASP.NET 2.0</a>
	</p><p style="margin-left: 17pt"><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WSV320-R">Windows Authentication Deep Dive What Every Administrator Should Know</a>
	</p><p style="margin-left: 17pt"><a href="https://social.technet.microsoft.com/wiki/contents/articles/4209.kerberos-survival-guide.aspx">Kerberos Survival Guide</a>
	</p><p style="margin-left: 17pt"><a href="https://www.youtube.com/watch?v=7-LjpO2nTJo">Kerberos Authentication Demo</a>
	</p><p style="margin-left: 17pt"><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb742516(v=technet.10)">Kerberos Explained</a>
	</p><p style="margin-left: 17pt"><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)">How the Kerberos Version 5 Authentication Protocol Works</a>
	</p><p style="margin-left: 17pt"><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc961966(v=technet.10)">Kerberos messages and tickets</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.msdn.microsoft.com/besidethepoint/2010/05/08/double-hop-authentication-why-ntlm-fails-and-kerberos-works/">Double-hop authentication: Why NTLM fails and Kerberos works</a>
	</p><p style="margin-left: 17pt"><a href="https://technet.microsoft.com/en-us/library/gg502606(v=office.14).aspx">Kerberos configuration known issues (SharePoint Server 2010)</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.msdn.microsoft.com/friis/2009/12/31/things-to-check-when-kerberos-authentication-fails-using-iisie">Things to check when Kerberos authentication fails using IIS/IE…</a>
	</p><p style="margin-left: 17pt"><a href="https://technet.microsoft.com/en-us/library/bb463166.aspx">Kerberos and LDAP Error Messages</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.technet.microsoft.com/askds/2012/07/27/kerberos-errors-in-network-captures">Kerberos errors in network captures</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.msdn.microsoft.com/webtopics/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-07-5/">Service Principal Name (SPN) checklist for Kerberos authentication with IIS 7.0/7.5</a>
	</p><p style="margin-left: 17pt"><strong>Kerberos RFC:</strong>
	</p><p style="margin-left: 17pt"><a href="https://www.ietf.org/rfc/rfc1510.txt">https://www.ietf.org/rfc/rfc1510.txt</a>
	</p><p style="margin-left: 17pt"><a href="https://www.ietf.org/rfc/rfc4120.txt">https://www.ietf.org/rfc/rfc4120.txt</a>
	</p><p>
 </p><p>
 </p>]]></content:encoded>
    </item>
    <item>
      <title>Part1: Explaining Integrated Windows Authentication in SharePoint and How NTLM fails but Kerberos works in Double-Hop authentication</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/part1-explaining-integrated-windows-authentication-in-sharepoint-and-how-ntlm-fails-but-kerberos-works-in-double-hop-authentication</link>
      <pubDate>Tue, 23 Jan 2018 05:05:26 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=4055</guid>
      <description><![CDATA[This is Part 1 in my Integrated Windows Authentication (Negotiate, NTLM, Kerberos) Blog Series (What...]]></description>
      <content:encoded><![CDATA[<p style="margin-left: 17pt">This is <strong>Part 1 in my Integrated Windows Authentication (Negotiate, NTLM, Kerberos) Blog Series</strong> (What is it, how it works, how to setup and how to troubleshoot)..
</p><p style="margin-left: 17pt"><em>Kerberos Setup, Troubleshooting and Best Practices are covered in my Part2 and Part3 of this blog series</em>.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">I know there are lots of articles talking about it but I've tried to present information in a more practical way using Fiddler and network monitor trace examples… 
</p><p style="margin-left: 17pt">Alright then, let's get started !!!!
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">SharePoint Server supports a variety of authentication methods and authentication providers for the following authentication types:
</p><p style="margin-left: 17pt"><strong>Windows authentication</strong>, Forms-based authentication and SAML token-based authentication
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">In this Post I will be talking about Windows authentication in SharePoint, but before we get there, In simple diagram, this is how Sharepoint Authentication takes place:
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai1.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Authentication is handled in Windows by a process called <strong>LSASS.EXE</strong> which accepts user's credentials.
</p><p style="margin-left: 17pt"><span style="color:black">Let's talk about <span style="color:#288ac6"><span style="font-size:16pt"><strong>Windows authentication</strong></span><span style="color:black"> in detail……</span>
			</span></span></p><p style="margin-left: 17pt"><span style="color:black">The Windows authentication type takes advantage of your existing Windows authentication provider (AD DS) and the authentication protocols that a Windows domain environment uses to validate the credentials of connecting clients. Windows authentication method, which is used by both claims-based authentication include the following:
</span></p><ul style="margin-left: 44pt"><li><span style="color:black">NTLM
</span></li><li><span style="color:black">Kerberos
</span></li><li><span style="color:black">Digest
</span></li><li><span style="color:black">Basic
</span></li></ul><p>
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">When ASP.NET is configured for Windows authentication, it relies on IIS to authenticate its clients using the configured authentication mode. IIS determines the authentication mode for a particular application by examining its metabase settings. <strong>After successfully authenticating a user, IIS passes the Windows token representing the authenticated user to the ASP.NET worker process (w3wp.exe) in which the ASP.NET application is hosted</strong>. If your application uses a virtual directory that is configured in IIS to support anonymous access, the token represents the anonymous Internet user account; otherwise, the token represents the authenticated user.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">IIS supports the following modes of authentication: 
</p><ul style="margin-left: 44pt"><li><div><strong>Anonymous</strong>. Although not a Windows authentication type, SharePoint Server also supports anonymous authentication. Users can access SharePoint content without validating their credentials. Anonymous authentication is disabled by default. Internet Information Services (IIS) websites that are created by SharePoint for serving web applications always have the Anonymous Authentication and Forms Authentication methods enabled, even when the SharePoint setting for Anonymous and Forms Authentication are disabled. This is intentional and disabling Anonymous or Forms Authentication directly in the IIS settings will result in errors in the SharePoint site. 
</div><p>If you do not need to authenticate your clients (or you use a custom authentication mechanism, such as forms authentication), you can configure IIS to allow anonymous access. In this event, IIS creates a Windows token to represent all anonymous users with the same anonymous (or guest) account. <strong>The default anonymous account is IUSR_MACHINENAME</strong>, where MACHINENAME is the NetBIOS name of the computer that was specified during installation.
</p><p>
 </p></li><li><div><strong>Digest and Basic. </strong>With the Digest authentication method, the user account credentials are sent as an MD5 message digest to the Internet Information Services (IIS) service on the web server that hosts the web application or zone. With the Basic authentication method, the user account credentials are sent as plaintext in an unencrypted Base64-encoded format. Therefore, you should not use the Basic authentication method unless you are also using SSL to encrypt the website traffic.
</div><p>You might have to use these older authentication methods if your environment uses web browsers or services that only support Digest or Basic authentication to websites.
</p><p>To help protect the credentials, you should only use basic authentication with Secure Sockets Layer (SSL). Because the Web server obtains the user's credentials unencrypted, ASP.NET applications can impersonate the caller and use their credentials to access network resources.
</p><p>Unlike the NTLM, Kerberos, and Anonymous authentication methods, you configure Digest and Basic authentication methods from the properties of the web site that corresponds to the web application or zone in the Internet Information Services (IIS) snap-in.
</p><p>
 </p></li><li><div><strong>Integrated Windows</strong>. Integrated Windows authentication (formerly called NTLM, and also known as Windows NT Challenge/Response authentication) uses either Kerberos v5 authentication or NTLM authentication, depending upon the client and server configuration. The server negotiates with the client to determine the protocol to use. Kerberos authentication is used if the following conditions are met: 
</div><ul><li>Your ASP.NET Web application is running under the NetworkService account or a custom domain account. If your application runs under a local account, such as the ASPNET account on Windows 2000 Server, then NTLM authentication will be used.
</li><li>A service principal name (SPN) exists in Active Directory for the domain account used to run the service with which the client is authenticating.
</li><li>Client and server computers are running at least Windows 2000 Server and are in the same, or trusting, Windows domain.
</li></ul></li></ul><p>
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#288ac6"><strong>
				<span style="font-size:16pt">Understand the Security Support Provider Interface (SSPI) Infrastructure in the Windows Operating System:</span></strong>
		</span></p><p style="margin-left: 44pt">The Microsoft Security Support Provider Interface (SSPI) is the foundation for Windows authentication. Applications and infrastructure services that require authentication use SSPI to provide it. SSPI is the implementation of the Generic Security Service API (GSSAPI) in Windows Server operating systems. 
</p><p style="margin-left: 44pt">The default Security Support Providers (SSPs) that invoke specific authentication protocols in Windows are incorporated into the SSPI as DLLs. These default SSPs are described below. Additional SSPs can be incorporated if they can operate with the SSPI.
</p><p style="margin-left: 44pt">The SSPI in Windows provides a mechanism that carries authentication tokens over the existing communication channel between the client computer and server. When two computers or devices need to be authenticated so that they can communicate securely, the requests for authentication are routed to the SSPI, which completes the authentication process, regardless of the network protocol currently in use. The SSPI returns transparent binary large objects—these are passed between the applications, at which point they can be passed to the SSPI layer on that side. Thus, the SSPI enables an application to use various security models available on a computer or network without changing the interface to the security system.
</p><p style="margin-left: 44pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai2.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 44pt"><span style="color:#288ac6;font-size:16pt"><strong>Why is 'NEGOTIATE' Authentication protocol better than Kerberos and NTLM alone individually? - See below:</strong>
		</span></p><p style="margin-left: 44pt">
 </p><p style="margin-left: 71pt">Integrated Windows authentication includes the Negotiate, Kerberos, and NTLM authentication methods. Negotiate (also known as SPNEGO), a wrapper for Kerberos v5 and NTLM, allows the client application to select the most appropriate security support provider for the situation. Kerberos v5 and NTLM have the following restrictions:
</p><ul style="margin-left: 44pt"><li>NTLM can get past a firewall but is generally stopped by proxies because NTLM is connection-based, and proxies do not necessarily keep connections established.
</li><li>Kerberos v5 requires that the client have a direct connection to Active Directory, which is generally not the case in Internet scenarios.
</li><li>Kerberos v5 requires that both the client and the server have a trusted connection to a Key Distribution Center (KDC) and be Active Directory–compatible.
</li><li><div>Kerberos v5 requires SPNs for multiple worker processes. If your Web site uses multiple worker processes, you can use Kerberos authentication, but you must manually register service names. For more information about Kerberos and service registration, see Kerberos and service registration later in this topic.
</div><p style="margin-left: 27pt">Integrated Windows authentication has the following limitations:
</p></li><li><div>Integrated Windows authentication does not work over HTTP proxy connections.
</div><p><strong>Therefore, Integrated Windows authentication is best suited for an intranet environment, where both user and Web server computers are in the same domain. </strong>
			</p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>NTLM Authentication Mechanism</strong>
				</span></p><p>Figure 1 shows the NTLM protocol.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai3.gif" alt="" />
			</p><p><strong>Figure 1. The NTLM challenge/response mechanism</strong>
			</p><p>The challenge/response mechanism is outlined below: 
</p><p>
 </p><p>
 </p></li><li><div>(Interactive authentication only) A user accesses a client computer and provides a domain name, user name, and password. The client computes a cryptographic <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms721586(v=vs.85).aspx"><em>hash</em></a> of the password and discards the actual password. 
</div><p>The client sends the user name to the server (in <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms721603(v=vs.85).aspx"><em>plaintext</em></a>). 
</p></li><li>The server generates a 16-byte random number, called a <em>challenge</em> or <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms721596(v=vs.85).aspx"><em>nonce</em></a>, and sends it to the client. 
</li><li>The client encrypts this challenge with the hash of the user's password and returns the result to the server. This is called the <em>response</em>. 
</li><li><div>The server sends the following three items to the domain controller:
</div><ul style="margin-left: 54pt"><li>User name 
</li><li>Challenge sent to the client 
</li><li>Response received from the client 
</li></ul></li><li>The domain controller uses the user name to retrieve the hash of the user's password from the Security Account Manager database. It uses this password hash to encrypt the challenge. 
</li><li>The domain controller compares the encrypted challenge it computed (in step 6) to the response computed by the client (in step 4). If they are identical, authentication is successful.
</li></ul><p>
 </p><p style="margin-left: 17pt"><strong>[NTLM authentication]This is how it works in form of HTTP status Codes (c and s stand for client and Server):</strong>
	</p><p style="margin-left: 17pt">C  --&gt; S   GET ...
</p><ul style="margin-left: 44pt"><li>C &lt;--  S   401 Unauthorized    WWW-Authenticate: NTLM
</li><li>C  --&gt; S   GET ...    Authorization: NTLM &lt;base64-encoded type-1-message&gt;
</li><li>C &lt;--  S   401 Unauthorized    WWW-Authenticate: NTLM &lt;base64-encoded type-2-message&gt;
</li><li>C  --&gt; S   GET ...    Authorization: NTLM &lt;base64-encoded type-3-message&gt;
</li><li>C &lt;--  S   200        Ok
</li></ul><p>Type- 1 -message = Domain name and user name
</p><p style="margin-left: 17pt">Type- 2 -message = Challenge
</p><p style="margin-left: 17pt">Type- 3 -message = Response (Challenge + Hash)
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#288ac6;font-size:16pt"><strong>Fiddler request for NTLM Authentication will show these frames (I am including screenshots):</strong>
		</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">1st <span style="background-color:yellow">401</span> …….. <span style="background-color:yellow">Anonymous</span> request, Server responds saying I understand <span style="background-color:yellow">NTLM only</span>..  Please authenticate using NTLM protocol.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai4.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">2nd <span style="background-color:yellow">401</span>..  Client passing credentials (<strong>NTLM Type 1: negotiation, provider: <span style="background-color:yellow">NTLMSSP</span></strong>)..  Server sends a random number '<span style="background-color:yellow"><strong>Challenge</strong></span>' (<strong>NTLM Type 2: Challenge, provider: <span style="background-color:yellow">NTLMSSP</span></strong>)  to client.. 
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai5.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Then <span style="background-color:yellow"><strong>NTLM Type3: Authentication, provider: NTLMSSP</strong></span> happens.
</p><p style="margin-left: 17pt"><span style="background-color:yellow">Hence <strong>302</strong>… redirect</span> to page URL (Home.aspx) as Authentication was successful.. 
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai6.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Then <span style="background-color:yellow"><strong>HTTP 200 OK</strong></span>…..  Request is made to get the page which server responds with page.. 
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai7.png" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">This is how NTLM works essentially.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Now, let's move on and see how Kerberos Authentication works…</strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#288ac6;font-size:16pt"><strong>Kerberos Authentication</strong>
		</span></p><p style="margin-left: 17pt">Kerberos authentication offers the following advantages over NTLM authentication: 
</p><p style="margin-left: 17pt">
 </p><ul style="margin-left: 44pt"><li><strong>Delegated authentication:</strong> The Kerberos V5 protocol includes a proxy mechanism that enables a service to impersonate its client when connecting to other services. There is no equivalent available with NTLM. Servers that use Kerberos authentication to authenticate clients can impersonate those clients and use the client's security context to access network resources.
</li><li><strong>Interoperability: </strong>Microsoft's implementation of the Kerberos protocol is based on standards-track specifications recommended to the Internet Engineering Task Force (IETF). As a result, the implementation of the protocol in Windows 2000 lays a foundation for interoperability with other networks where Kerberos version 5 is used for authentication.
</li><li><strong>More efficient authentication to servers:</strong> With NTLM authentication, an application server must connect to a domain controller in order to authenticate each client. With the Kerberos authentication protocol, on the other hand, the server is not required to go to a domain controller. Hence it offers improved performance over NTLM authentication.
</li><li><strong>Simplified trust management</strong>. Networks with multiple domains no longer require a complex set of explicit, point-to-point trust relationships.
</li><li><div><strong>Mutual authentication:</strong> NTLM authentication was designed for a network environment in which servers were assumed to be genuine. The Kerberos protocol makes no such assumption. When a client uses the Kerberos v5 protocol for authentication with a particular service on a particular server, Kerberos provides the client with an assurance that the service is not being impersonated by malicious code on the network.
</div><p>
 </p></li></ul><p><span style="color:#288ac6;font-size:16pt"><strong>Kerberos Authentication Mechanism:</strong>
		</span></p><p style="margin-left: 17pt">A simplified view of the Kerberos authentication protocol is shown in figure below:
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai8.gif" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Here is an example complimenting the above diagram:
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai9.gif" alt="" />
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#288ac6;font-size:16pt"><strong>How Kerberos Works:</strong>
		</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 44pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai10.png" alt="" />
	</p><p style="margin-left: 44pt">
 </p><p>
 </p><ul><li><strong>Kerberos authentication service request (KRB_AS_REQ):</strong> The client contacts the Key Distribution Center's authentication service for a short-lived ticket (a message containing the client's identity and SIDs) called a TGT. 
</li><li><strong>Kerberos authentication service response (KRB_AS_REP):</strong> The authentication service (AS) constructs the TGT and creates a session key the client can use to encrypt communication with the ticket-granting service (TGS). The TGT has a limited lifetime. At the point that the client has received the TGT, the client has not been granted access to any resources, even to resources on the local computer.
</li><li><strong>Kerberos ticket-granting service request (KRB_TGS_REQ):</strong> The client wants access to local and network resources. To gain access, the client sends a request to the TGS for a ticket for the local computer or some network server or service. This ticket is referred to as the service ticket or session ticket. To get the ticket, the client presents the TGT, an authenticator, and the name of the target server (the Server Principal Name or SPN).
</li><li><strong>Kerberos ticket-granting service response (KRB_TGS_REP):</strong> The TGS examines the TGT and the authenticator. If these are acceptable, the TGS creates a service ticket. The client's identity is taken from the TGT and copied to the service ticket. Then the ticket is sent to the client.
</li><li><strong>Kerberos application server request (KRB_AP_REQ):</strong> After the client has the service ticket, the client sends the ticket and a new authenticator to the target server, requesting access. The server will decrypt the ticket, validate the authenticator, and for Windows services, create an access token for the user based on the SIDs in the ticket.
</li><li><div><strong>Kerberos application server response (optional) (KRB_AP_REP):</strong> Optionally, the client might request that the target server verify its own identity. This is called mutual authentication. If mutual authentication is requested, the target server will take the client computer's timestamp from the authenticator, encrypt it with the session key the TGS provided for client-target server messages, and send it to the client.
</div><p>
 </p><p>Microsoft Network monitor (NetMon) and Fiddler are our friends here, to locate the AUTH flow…………………………….
</p><p>
 </p><p>Let's see a <span style="color:#288ac6;font-size:16pt"><strong>Netmon</strong></span> screenshot below showing the flow explained above:
</p><p>I have loaded an Authentication filter here in netmon.
</p><p><strong>Filter</strong>:
</p><p>
 </p><p>KerberosV5
</p><p>OR KerberosV5_Struct
</p><p>OR NLMP
</p><p>OR NLMP_Struct
</p><p>OR GssAPI
</p><p>OR SpnegoNegotiationToken
</p><p>OR GssapiKrb5
</p><p>
 </p><p>It all <strong>starts with</strong>
				<strong>KRB_AS_REG</strong>…  I am focusing on<span style="background-color:yellow"> Service ticket</span> in screenshot below.. 
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai11.png" alt="" />
			</p><p>
 </p><p>
 </p><p>Let's Look at a<strong><span style="color:#288ac6;font-size:16pt"> sample Fiddler trace of Kerberos AUTH flow</span>
				</strong>…. …………………………
</p><p>
 </p><p>
 </p><p>1st <span style="background-color:yellow"><strong>401</strong></span>… <span style="background-color:yellow">Anonymous</span> request as expected..  Server responds back saying AUTHENTICATE using 'NEGOTIATE' protocol, if not then fall back to NTLM…
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai12.png" alt="" />
			</p><p>
 </p><p>
 </p><p>Then, <strong>Client obtains a valid Kerberos ticket from KDC and presents to server making a Get Request for the Site.. </strong>
			</p><p>GET / HTTP/1.1
</p><p><strong>Server Decrypts the ticket using APP pool identity</strong>, if SPN is valid then decryption is successful and server redirects request to the page..
</p><p>Hence <span style="background-color:yellow">302.. Redirect to the Page URL</span> in response… 
</p><p>HTTP/1.1 302 Redirect
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai13.png" alt="" />
			</p><p>
 </p><p>
 </p><p>Same frame from AUTH Tab:
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai14.png" alt="" />
			</p><p>
 </p><p>
 </p><p>Then client uses the ticket to make a request to the page <span style="background-color:yellow">GET /_layouts/15/start.aspx HTTP/1.1</span> ……………
</p><p>which is responded by server with HTTP 200 OK.
</p><p><span style="background-color:yellow">HTTP/1.1 200 OK</span>
			</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai15.png" alt="" />
			</p><p>
 </p><p>
 </p><p>Same frame from AUTH and RAW tabs:
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai16.png" alt="" />
			</p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>For Every Successful logon of Kerberos AUTH</strong></span>, you will see <strong><span style="color:#288ac6;font-size:16pt">event ID 4624 on SharePoint Web front end server</span> too in Event Windows Security logs</strong> as shown in below Screenshot:
</p><p>
 </p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai17.png" alt="" />
			</p><p>
 </p><p>
 </p><p>We should see same event on KDC (Domain controller) too:
</p><p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai18.png" alt="" />
			</p><p>
 </p><p>
 </p><p>In case of kerberosV5 AUTH failure, Authentication falls back to NTLM so fiddler will show you NTLM Type 1,2,3 HandShake happening and NetMon will show you kerberos Errors.
</p><p>Kerberos related Errors can be found here:
</p><p><a href="https://technet.microsoft.com/en-us/library/bb463166.aspx"><em>https://technet.microsoft.com/en-us/library/bb463166.aspx</em></a>
			</p><p><a href="https://blogs.technet.microsoft.com/askds/2012/07/27/kerberos-errors-in-network-captures/">https://blogs.technet.microsoft.com/askds/2012/07/27/kerberos-errors-in-network-captures/</a>
			</p><p>
 </p><p>
 </p><p><span style="color:#288ac6;font-size:16pt"><strong>Let's Understand Kerberos Authentication steps from browser (IE) to server communication Scenario……….</strong>
				</span></p><p>
 </p><p><span style="color:#1f497d">When a Kerberos ticket is sent from Internet Explorer to an IIS server, the ticket is encrypted using a private key. The private key is a hash of the password used for the user account associated to the SPN. Therefore, only an application running under this account will be able to decode the ticket. <br />Here is a summary of the Kerberos authentication algorithm's steps:
</span></p><p>
 </p><ul><li><span style="color:#1f497d">Internet Explorer will use the URL typed in the address bar to compute a SPN 
</span></li><li><span style="color:#1f497d">The SPN is passed thought a SSPI API (<a href="https://msdn.microsoft.com/en-us/library/aa375507(VS.85).aspx">InitializeSecurityContext</a>) to the system component in charge of Windows security (LSASS process). At this stage, we can note that Internet Explorer code doesn't implement any code to construct the Kerberos ticket : IE just calls SSPI APIs 
</span></li><li><span style="color:#1f497d">Using the SPN that is passed in, LSASS requests a Kerberos ticket to a domain controller (DC). If the DC can serve the request (known SPN), it will create a Kerberos ticket, encrypt it using a key constructed from the hash of the user account's password for the account associated with the SPN. It will then proceed to send it to the client. As far as Internet Explorer is concerned, the ticket is an opaque blob. 
</span></li><li><span style="color:#1f497d">Internet Explorer encapsulates the Kerberos ticket provided by LSASS in the "Authorization : Negotiate" header and sends it to the IIS server 
</span></li><li><span style="color:#1f497d">IIS handles the request and routes it to the right application pool (using the host header specified) 
</span></li><li><div><span style="color:#1f497d">The application pool tries to decrypt the ticket using SSPI/LSASS APIs : 
</span></div><ul style="margin-left: 54pt"><li><span style="color:#1f497d">If the ticket can be decrypted, Kerberos authentication succeeds and all services associated to the ticket are available (impersonation, delegation if ticket allows it…etc) 
</span></li><li><span style="color:#1f497d">If the ticket can't be decrypted, a Kerberos error (KRB_AP_ERR_MODIFIED) is returned. This error is a generic error indicating that the ticket has been altered in some way during its transport and could therefore not be decrypted. This error is also logged in the Windows Event Logs <br />If you do not explicitly declare SPN, Kerberos authentication will work only if the application pool identity is « Network Service ». In this case, the Kerberos ticket is built using a default SPN that is created in Active Directory when a computer (in this case the server that IIS is running on) is added in the domain. This « default SPN» is associated to the computer account which, under IIS, maps to « Network Service ». <br />If your application pool needs to use an identity other than « Network Service », you'll need to declare a SPN (using <a href="https://technet.microsoft.com/en-us/library/cc773257(WS.10).aspx">SETSPN</a>) and associate it with the account used for your application pool identity. A common mistake is to create similar SPNs with different accounts.
</span></li></ul></li></ul></li></ul><p>
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>And, That is how Kerberos Authentication works…. </strong>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Now, We all know that <span style="color:#288ac6;font-size:16pt"><strong>NTLM fails but Kerberos works in Double-Hop authentication</strong></span> and that's why Kerberos is so popular.. 
</p><p style="margin-left: 17pt">Simply because it is able to delegate the Authentication request using the kerberos ticket which NTLM can't do.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>What is Delegation?</strong>
	</p><p style="margin-left: 17pt">Impersonation gives access to local resources only. <strong>Delegation is an extended impersonation capability that enables you to use an impersonation token to access network resources.</strong>
	</p><p style="margin-left: 17pt">If your application uses Kerberos v5 authentication to authenticate its users, you can use Kerberos delegation to pass the user's identity through the layers of your application and to access network resources. <strong>If your application does not use Kerberos v5 authentication, you can use protocol transition to switch to Kerberos, and then use delegation to pass on the identity.</strong>
	</p><p style="margin-left: 17pt">Constrained delegation in Windows Server 2003 requires Kerberos authentication. If your application cannot use Kerberos authentication to authenticate its callers, you can use protocol transition to switch from an alternate, non-Windows authentication mode (such as forms or certificate authentication) to Kerberos authentication. You can then use Kerberos with constrained delegation to access downstream network resources.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#288ac6;font-size:16pt"><strong>Why NTLM fails and Kerberos succeeds?</strong>
		</span></p><p style="margin-left: 17pt">Because that way NTLM works is : Server requires access to the client's real password (Hash) but for security purposes the domain controller doesn't hand out this password, which means the service server has to pass along the client's authentication hash to the DC for verification.
</p><p style="margin-left: 17pt">So, there is a need for a round trip to the DC for authentication when using NTLM, something Kerberos doesn't require.
</p><p style="margin-left: 17pt">The fact that NTLM depends directly on the base password of the client for each authentication, we can't just pass that around to servers for their own use. This is why NTLM can't be used to give a process the power of delegation of user identity and it can't do double HOP.
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Whereas <strong>Kerberos doesn't depend on the original user password for authentication</strong>. The only time the original password is necessary is when the user first logs on to the Kerberos realm (AD domain) and authenticates to the Authentication Server (a role played by the Domain Controller). After that point,<strong> authentication to other services is based on the user possessing session-specific keys</strong> which it would only know if it originally authenticated properly to the Authentication Server.
</p><p style="margin-left: 17pt">So, when a client authenticates to a front-end server using Kerberos, the server doesn't need to contact a DC for verification. The fact that the client knows the session-specific key for this service proves that it must already have proven its identity with the DC, and that's all the server needs to know.(<strong>No DC round trip necessary</strong>)
</p><p style="margin-left: 17pt">Hence, for the server process to authenticate to the next-hop server process, it no longer needs access to the client's real password! <strong>All it needs is the session-specific key for the session with the next server</strong>, something we can feel a little more comfortable passing along. The original client forwards this key, along with a ticket for the back-end service, to the front-end server, which can then use it for the <strong>next-hop authentication</strong>, the service now presenting itself to the next-hop service as the original client.
</p><p style="margin-left: 17pt">For <strong>more info</strong>, Visit <a href="https://blogs.msdn.microsoft.com/besidethepoint/2010/05/08/double-hop-authentication-why-ntlm-fails-and-kerberos-works/">https://blogs.msdn.microsoft.com/besidethepoint/2010/05/08/double-hop-authentication-why-ntlm-fails-and-kerberos-works/</a>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#288ac6;font-size:16pt"><strong>Here are a few Things to know conceptually before setting up Kerberos…….. </strong>
		</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:black;font-size:10pt;background-color:yellow">How To: Use Protocol Transition and Constrained Delegation in ASP.NET 2.0</span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:black;font-size:10pt">Overview
</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">When an ASP.NET application impersonates the original caller, it accesses resources by using the security context of the authenticated user. However, the application can only access local resources. To access network resources while impersonating a remote user, your application must use delegation. If your application uses Kerberos authentication to authenticate its users, you can use delegation to pass the caller's identity through the layers of your application, and use it to access network resources. If your application does not use Kerberos authentication, you can use protocol transition to switch from a non-Kerberos authentication mechanism to Kerberos, and then use delegation to pass the identity on.
</span></p><p style="margin-left: 17pt"><span style="color:black;font-size:10pt">Protocol Transition
</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">In many situationsfor example, if your users access a Web site over the Internetyou cannot use Kerberos authentication because firewalls prevent the client computer from directly communicating with the domain controller. Instead, your application must authenticate the client by using another approach, such as forms authentication, or in an extranet scenario, client certificate authentication.
</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">Windows Server 2003 has a protocol transition feature that permits applications to use a non-Windows authentication mechanism to authenticate users, but still use Kerberos authentication and delegation to access downstream network resources. This allows your application to access downstream servers that require Windows authentication and it allows you to use Windows auditing to track user access to backend resources.
</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">The use of protocol transition to access downstream resources relies on two extensions to the Kerberos protocol. Both extensions are implemented in Windows Server 2003. These extensions are:
</span></p><ul style="margin-left: 44pt"><li><span style="color:black"><span style="font-size:10pt"><strong>Service-for-User-to-Self (S4U2Self)</strong>, which allows you to obtain a Windows token for the client by supplying a user principal name (UPN) without a password.</span>
			</span></li><li><span style="color:black"><span style="font-size:10pt"><strong>Service-for-User-to-Proxy (S4U2Proxy)</strong>, which allows an administrator to control exactly which downstream services can be accessed with the S4U2Self token.</span>
			</span></li></ul><p>
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Constrained and Unconstrained Delegation</strong>
	</p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">Kerberos delegation on Windows Server 2000 is unconstrained and servers that are configured as trusted for delegation in Active Directory can access any network resources or any machine on the network while using the impersonated user's security context. This represents a potential security threat, particularly if the Web server is compromised.
</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">To address this issue, Windows Server 2003 introduces constrained delegation. This allows administrators to specify exactly which services on a downstream server or a domain account can access when using an impersonated user's security context.
</span></p><p style="margin-left: 44pt"><span style="color:black;font-size:10pt"><strong>Note</strong>   The list of services that can be accessed by delegation is maintained in an Active Directory list referred to as the A2D2 list.
</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">This How To shows how to use protocol transition and constrained delegation in Windows Server 2003 to solve the following common problems:
</span></p><ul style="margin-left: 44pt"><li><span style="color:black"><span style="font-size:10pt">Using a non-Windows authentication mechanism for external clients and then transitioning to Kerberos authentication to access network resources.</span>
			</span></li><li><span style="color:black"><span style="font-size:10pt">Impersonating Kerberos-authenticated clients and then using their Windows security context to pass their identities through multiple tiers to access network resources.</span>
			</span></li></ul><p><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://msdn.microsoft.com/en-us/library/ms998355.aspx">https://msdn.microsoft.com/en-us/library/ms998355.aspx</a>&gt; </em></span>
	</p><p>From&lt;<span style="font-size:9pt"><em>https://msdn.microsoft.com/en-us/library/aa480475.aspx</em></span>&gt;
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:black;font-size:10pt"><span style="background-color:yellow"><strong>Claims to Windows Token Service (c2WTS) Overview</strong></span>
		</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#5d5d5d;font-size:10pt"><strong>Windows Identity Foundation</strong>
		</span></p><p style="margin-left: 17pt"><span style="font-size:10pt"><span style="color:black">[Starting with the .NET Framework 4.5, Windows Identity Foundation (WIF) has been fully integrated into the .NET Framework. The version of WIF addressed by this topic, WIF 3.5, is deprecated and should only be used when developing against the .NET Framework 3.5 SP1 or the .NET Framework 4. For more information about WIF in the .NET Framework 4.5, also known as WIF 4.5, see the <a href="https://go.microsoft.com/fwlink/?LinkId=267563">Windows Identity Foundation documentation in the .NET Framework 4.5 Development Guide</a>.] </span>
		</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt"><strong><em>The Claims to Windows Token Service (c2WTS) is a feature of Windows® Identity Foundation (WIF) that extracts UPN claims from non-Windows security tokens, such as SAML and X.509 tokens, and generates impersonation-level Windows security tokens. This allows a relying party (RP) application to impersonate the user.</em></strong> This might be needed to access back-end resources, such as SQL Servers, that are external to the computer on which the RP application runs.
</span></p><p style="margin-left: 17pt"><span style="font-size:10pt"><span style="color:#2a2a2a">The c2WTS is a Windows service that is installed as part of WIF. For security reasons, however, the c2WTS works strictly on an opt-in basis. It must be started manually and it runs as the local system account. Furthermore, an administrator must manually configure the c2WTS with a list of allowed callers. By default, the list is empty. For more information, see <a href="https://msdn.microsoft.com/en-us/library/ee517258.aspx">How to: Request a Token from the c2WTS</a>. WIF invokes the c2WTS using IPC, and the c2WTS does not open any network ports.</span>
		</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">If your RP application runs as the local system account, it does not need to use the c2WTS. However, if your RP application runs as the network service account, or is an ASP.NET application, for example, it might need to use the c2WTS to access resources on another computer.
</span></p><p style="margin-left: 17pt"><span style="color:#2a2a2a;font-size:10pt">Suppose you have a Web farm that consists of a server that runs an ASP.NET application, which accesses a SQL database on a back-end server. You want to make this application claims-aware. However, the application cannot access the SQL database using the claim that it receives from an STS. Instead, it uses the c2WTS to convert the UPN claim to a Windows security token. This allows it to access the SQL database as before.
</span></p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="font-size:10pt"><span style="color:#2a2a2a">(Note that to allow an application to access resources on a different server, a domain admin must configure Active Directory to enable constrained delegation. For information on how to enable constrained delegation, see <a href="https://go.microsoft.com/fwlink/?LinkId=150825">How To: Use Protocol Transition and Constrained Delegation in ASP.NET 2.0</a>.)</span>
		</span></p><div style="margin-left: 17pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:721px" /></colgroup><tbody valign="top"><tr style="background: #ededed"><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  solid #a3a3a3 1.0pt;border-left:  solid #a3a3a3 1.0pt;border-bottom:  solid #a3a3a3 1.0pt;border-right:  solid #a3a3a3 1.0pt"><p><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai19.gif" alt="" />
						</p><p><span style="color:#636363"><strong>Note</strong></span></p></td></tr><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  solid #a3a3a3 1.0pt;border-bottom:  solid #a3a3a3 1.0pt;border-right:  solid #a3a3a3 1.0pt"><p><span style="color:#2a2a2a">If the c2WTS is enabled, and the binding is cookie-mode secure conversation, the c2WTS will be used to rehydrate the Windows identity from the UPN that is serialized out into the secure conversation cookie. This means it is possible for authentication to fail when switching between cookie mode and session mode secure conversation, if the c2WTS is enabled but not properly configured.</span></p></td></tr></tbody></table></div><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="color:black;font-size:10pt"><strong>How to Use the c2WTS to Obtain a Windows Security Token</strong>
		</span></p><p style="margin-left: 17pt"><span style="font-size:10pt"><span style="color:#2a2a2a">There are two ways to use the c2WTS: mapToWindows or on-demand calling to the <a href="https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.windowstokenservice.s4uclient.upnlogon.aspx">UpnLogon</a> method. If your application always requires impersonation-level Windows security tokens, then you may choose to enable the mapToWindows property on samlSecurityTokenRequirement on the &lt;securityTokenHandlers&gt; element. On the other hand, if your application requires impersonation-level Windows security tokens only for certain use cases, then you may choose to programmatically call the <a href="https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.windowstokenservice.s4uclient.upnlogon.aspx">UpnLogon</a> method when required. Note that the useWindowsTokenServiceproperty must be set to true and c2WTS configuration must be added with an appropriate callers list for successful invocation of this method.</span>
		</span></p><p style="margin-left: 17pt"><span style="font-size:10pt"><span style="color:#2a2a2a">WIF provides a method, <a href="https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.windowstokenservice.s4uclient.upnlogon.aspx">UpnLogon</a>, which an RP application can call, passing in the UPN claim that it has received from the STS. WIF then invokes the local c2WTS using IPC. <a href="https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.windowstokenservice.s4uclient.upnlogon.aspx">UpnLogon</a> returns a <a href="https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx">WindowsIdentity</a> that represents the user. The following illustration shows how this works:</span>
		</span></p><p style="margin-left: 17pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/07/071918_0029_Part1Explai20.gif" alt="" />
	</p><ul style="margin-left: 44pt"><li><span style="color:black"><span style="font-size:10pt">A client request arrives at the RP application. This request requires the RP application to access an external resource. To do this, the RP application must impersonate the user.</span><span style="font-size:9pt">
				</span></span></li><li><span style="color:black"><span style="font-size:10pt">The RP application redirects the client to the IP-STS for authentication.</span><span style="font-size:9pt">
				</span></span></li><li><span style="color:black"><span style="font-size:10pt">The IP-STS authenticates the user and issues a SAML token that contains a UPN claim (that is, a claim of type <a href="https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn">https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn</a>). Note that c2WTS requires a UPN string to perform its operations.</span><span style="font-size:9pt">
				</span></span></li><li><span style="color:black"><span style="font-size:10pt">The client submits the SAML token to the RP application.</span><span style="font-size:9pt">
				</span></span></li><li><span style="color:black"><span style="font-size:10pt">The RP application validates the SAML token and extracts the UPN claim.</span><span style="font-size:9pt">
				</span></span></li><li><span style="color:black"><span style="font-size:10pt">The RP application passes the UPN claim to the <a href="https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.windowstokenservice.s4uclient.upnlogon.aspx">UpnLogon</a> method as a parameter and gets back a Windows security token. This method call is automatically done by the Saml 1.1 and Saml 2 SecurityTokenHandlers when the mapToWindows property on the SamlSecurityTokenRequirement on these SecurityTokenHandlers is set to true and the value of useWindowsTokenService on the &lt;windowsClaimsIdentity&gt; element in the &lt;microsoft.IdentityModel&gt; is set to true.</span><span style="font-size:9pt">
				</span></span></li><li><span style="color:black"><span style="font-size:10pt">The RP application uses the Windows Identity to impersonate the user and accesses the resource.</span><span style="font-size:9pt">
				</span></span></li></ul><p>
 </p><p style="margin-left: 17pt"><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://msdn.microsoft.com/en-us/library/ee517278.aspx">https://msdn.microsoft.com/en-us/library/ee517278.aspx</a>&gt; </em></span>
	</p><p style="margin-left: 17pt"><span style="color:black;font-size:20pt"><span style="background-color:white"><strong>How to configure Claim to Windows Token Services in SharePoint 2010 with Kerberos Authentication</strong></span>
		</span></p><p style="margin-left: 17pt"><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://support.microsoft.com/en-in/help/2722087/how-to-configure-claim-to-windows-token-services-in-sharepoint-2010-wi">https://support.microsoft.com/en-in/help/2722087/how-to-configure-claim-to-windows-token-services-in-sharepoint-2010-wi</a>&gt; </em></span>
	</p><p style="margin-left: 17pt"><span style="color:#333333;font-size:20pt"><span style="background-color:white"><strong>SharePoint: Facts and Troubleshooting the Claims To Windows Token Service (C2WTS)</strong></span>
		</span></p><p style="margin-left: 17pt"><span style="color:#333333;font-size:10pt"><span style="background-color:white"><strong>The Claims to Windows Token Service (from here on denoted as "C2WTS") is only used when SharePoint needs to get data from an external system that does not understand claims.  Examples include</strong> (but are not limited to):</span>
		</span></p><ul style="margin-left: 44pt"><li><span style="color:#333333"><span style="font-size:10pt;background-color:white">SQL Server Reporting Services (SSRS)</span>
			</span></li><li><span style="color:#333333"><span style="font-size:10pt;background-color:white">Excel Web Services (EWS)</span>
			</span></li><li><span style="color:#333333"><span style="font-size:10pt;background-color:white">PowerPivot / Power View</span>
			</span></li><li><span style="color:#333333"><span style="font-size:10pt;background-color:white">Business Data Connectivity (BDC) / Business Connectivity Services (BCS) / External Content Types (ECT) / External Lists.</span>
			</span></li><li><span style="color:#333333"><span style="font-size:10pt;background-color:white">Other SharePoint "BI" stuff.</span>
			</span></li><li><span style="color:#333333"><span style="font-size:10pt;background-color:white">Custom Code that does user impersonation.</span>
			</span></li></ul><p><span style="color:#595959;font-size:9pt"><em>From &lt;<a href="https://blogs.technet.microsoft.com/spjr/2017/06/27/sharepoint-facts-and-troubleshooting-the-claims-to-windows-token-service-c2wts/">https://blogs.technet.microsoft.com/spjr/2017/06/27/sharepoint-facts-and-troubleshooting-the-claims-to-windows-token-service-c2wts/</a>&gt; </em></span>
	</p><p>
 </p><p>
 </p><p style="margin-left: 17pt"><strong>Service Principal Names</strong>
	</p><p style="margin-left: 17pt"><span style="color:#2a2a2a">A service principal name (SPN) is a unique identifier of a service instance. SPNs are used by <a href="https://msdn.microsoft.com/en-us/library/ms677600(v=vs.85).aspx">Kerberos authentication</a> to associate a service instance with a service logon account. This allows a client application to request that the service authenticate an account even if the client does not have the account name.</span>
	</p><p style="margin-left: 17pt"><span style="color:#2a2a2a">If you install multiple instances of a service on computers throughout a forest, each instance must have its own SPN. A given service instance can have multiple SPNs if there are multiple names that clients might use for authentication. For example, an SPN always includes the name of the host computer on which the service instance is running, so a service instance might register an SPN for each name or alias of its host. For more information about SPN format and composing a unique SPN, see <a href="https://msdn.microsoft.com/en-us/library/ms677601(v=vs.85).aspx">Name Formats for Unique SPNs</a>.</span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">The Kerberos v5 authentication protocol uses service principal names (SPNs) for the following reasons: 
</p><ul style="margin-left: 44pt"><li>To support mutual authentication.
</li><li>To enable a client to request tickets, which in turn, enables the client to communicate with a particular service.
</li></ul><p>For example, if a client needs to obtain a ticket and authenticate with a particular service (<strong>MyService</strong>), which is running on a computer (<strong>MyServer</strong>) that is listening on port 4766, then the client requests a ticket from the KDC by using a name constructed from that information, as shown here:
</p><p style="margin-left: 17pt">MyService/MyServer:4766
</p><p style="margin-left: 17pt">An SPN that is registered in Active Directory maintains a mapping between this name and the domain account under which the requested service is running. By using this mechanism, it becomes difficult for a malicious user to impersonate a service on the network
</p><p style="margin-left: 17pt">For <strong>more info</strong>, Visit <a href="https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx</a>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><strong>Kerberos authentication and Kernel Mode Authentication:</strong>
	</p><div style="margin-left: 17pt"><table style="border-collapse:collapse" border="0"><colgroup><col style="width:723px" /></colgroup><tbody valign="top"><tr><td style="padding-top: 3px;padding-left: 5px;padding-bottom: 3px;padding-right: 5px;border-top:  none;border-left:  none;border-bottom:  none;border-right:  none"><p>Note: Kernel Mode Authentication is not supported in SharePoint 2010 Products. This information is provided for informational purposes only. </p></td></tr></tbody></table></div><p style="margin-left: 17pt">Beginning in IIS version 7.0, there is a new authentication feature called Kernel Mode Authentication. <strong>When an IIS web site is configured to use Kernel Mode authentication, HTTP.sys will authenticate the client's requests instead of the application pool's worker process. Because HTTP.sys runs in kernel mode this yields better performance but also introduces a bit of complexity when configuring Kerberos</strong>. This is due to HTTP.sys running under the computer's identity and not under the identity of the worker process. When HTTP.sys receives a Kerberos ticket, by default it will attempt to decrypt the ticket using the server's encryption key (aka secret) and not the key for the identity the worker process is running under. 
</p><p style="margin-left: 17pt">If a single web server is configured to use Kernel Mode authentication, Kerberos will work without any additional configuration or additional SPNs because the server will automatically register a HOST SPN when it is added to the domain. If multiple web servers are load balanced, the default Kernel Mode Authentication configuration will not work, or at least will intermittently fail, because the client has no way of ensuring the service ticket they received in the TGS request will work with the server authenticating the request. 
</p><p style="margin-left: 17pt">To work around this issue you can do the following:
</p><ul style="margin-left: 44pt"><li><strong>Turn off Kernel Mode Authentication </strong>
		</li><li>Configure HTTP.sys to use the IIS application pool's identity when decrypting service tickets. See <a href="https://go.microsoft.com/fwlink/p/?LinkID=196657">Internet Information Services (IIS) 7.0 Kernel Mode Authentication Settings</a>.<br />You may also need a hotfix when configuring HTTP.sys to use the application pool's credentials: <a href="https://support.microsoft.com/kb/962943">FIX: You receive a Stop 0x0000007e error message on a blue screen when the AppPoolCredentials attribute is set to true and you use a domain account as the application pool identity in IIS 7.0</a>
		</li></ul><p>
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">----------------------------------------------------------------------------------------------------------------------------
</p><p style="margin-left: 17pt">And, That's all for introduction and understanding of Windows AUTHENTICATION.
</p><p style="margin-left: 17pt">This was Part 1 in my Integrated Windows Authentication (Negotiate, NTLM, Kerberos) Series. <strong>Kerberos Setup and Troubleshooting, Best Practices are covered in my Part2 and Part3 of this series</strong>. I highly recommend to check them out too for complete information around this Topic! Links below:
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt">Until then, Happy <span style="color:#288ac6;font-size:16pt"><strong>SharePointing </strong></span>!!
</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="background-color:yellow"><strong>Check other Part links in this series too:</strong></span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><a href="https://blogs.technet.microsoft.com/vivek/2018/01/26/part2-step-by-step-guide-for-configuring-kerberos-authentication-in-sharepoint-20132016/">Part2: Step by step Guide for Configuring Kerberos Authentication in SharePoint 2013/2016</a><span style="color:blue;text-decoration:underline">
		</span></p><p style="margin-left: 17pt"><a href="https://blogs.technet.microsoft.com/vivek/2018/02/02/part3-troubleshooting-kerberos-authentication-and-things-to-check-when-it-fails/">Part3: Troubleshooting Kerberos authentication and things to check when it fails</a>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><span style="text-decoration:underline">Additional References:</span>
	</p><p style="margin-left: 17pt">
 </p><p style="margin-left: 17pt"><a href="https://msdn.microsoft.com/en-us/library/aa480475.aspx">Explained: Windows Authentication in ASP.NET 2.0</a>
	</p><p style="margin-left: 17pt"><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/WSV320-R">Windows Authentication Deep Dive What Every Administrator Should Know</a>
	</p><p style="margin-left: 17pt"><a href="https://social.technet.microsoft.com/wiki/contents/articles/4209.kerberos-survival-guide.aspx">Kerberos Survival Guide</a>
	</p><p style="margin-left: 17pt"><a href="https://www.youtube.com/watch?v=7-LjpO2nTJo">Kerberos Authentication Demo</a>
	</p><p style="margin-left: 17pt"><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb742516(v=technet.10)">Kerberos Explained</a>
	</p><p style="margin-left: 17pt"><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772815(v=ws.10)">How the Kerberos Version 5 Authentication Protocol Works</a>
	</p><p style="margin-left: 17pt"><a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc961966(v=technet.10)">Kerberos messages and tickets</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.msdn.microsoft.com/besidethepoint/2010/05/08/double-hop-authentication-why-ntlm-fails-and-kerberos-works/">Double-hop authentication: Why NTLM fails and Kerberos works</a>
	</p><p style="margin-left: 17pt"><a href="https://technet.microsoft.com/en-us/library/gg502606(v=office.14).aspx">Kerberos configuration known issues (SharePoint Server 2010)</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.msdn.microsoft.com/friis/2009/12/31/things-to-check-when-kerberos-authentication-fails-using-iisie">Things to check when Kerberos authentication fails using IIS/IE…</a>
	</p><p style="margin-left: 17pt"><a href="https://technet.microsoft.com/en-us/library/bb463166.aspx">Kerberos and LDAP Error Messages</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.technet.microsoft.com/askds/2012/07/27/kerberos-errors-in-network-captures">Kerberos errors in network captures</a>
	</p><p style="margin-left: 17pt"><a href="https://blogs.msdn.microsoft.com/webtopics/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-07-5/">Service Principal Name (SPN) checklist for Kerberos authentication with IIS 7.0/7.5</a>
	</p><p style="margin-left: 17pt"><strong>Kerberos RFC:</strong>
	</p><p style="margin-left: 17pt"><a href="https://www.ietf.org/rfc/rfc1510.txt">https://www.ietf.org/rfc/rfc1510.txt</a>
	</p><p style="margin-left: 17pt"><a href="https://www.ietf.org/rfc/rfc4120.txt">https://www.ietf.org/rfc/rfc4120.txt</a>
	</p>]]></content:encoded>
    </item>
    <item>
      <title>Adding custom UPA Properties by Configuring profile synchronization using BCS connection and custom SQL database</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/adding-custom-upa-properties-by-configuring-profile-synchronization-using-bcs-connection-and-custom-sql-database</link>
      <pubDate>Mon, 06 Jun 2016 18:43:50 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=365</guid>
      <description><![CDATA[Consider a scenario where you have some property values of some users stored somewhere else, not in...]]></description>
      <content:encoded><![CDATA[<span style="color: #1e4e79">Consider a scenario where you have some property values of some users stored somewhere else, not in active directory or your directory source and you need to have those other additional property values populating/showing with your existing user profile properties in user profile store.
</span>

<span style="color: #1e4e79">For example, you need to have a new profile property named "LaptopBrand" with value "Lenovo" shown in SharePoint user profile store for some users but that specific property and value doesn't exist in your directory source say "Active directory".
</span>

<span style="color: #1e4e79">In that case, if you have that property and value stored in a SQL database, here are the complete steps with all screenshots on how to pull those properties and values from databases to SharePoint user profile store.
</span>

&nbsp;

<span style="color: #1e4e79"><span style="background-color: yellow">1. </span><strong>Create a custom DB&gt; create a Table&gt; Add columns and values</strong> (Create manually or import data from .csv file)
</span>

&nbsp;

<span style="color: #1e4e79">-Keep one column as <strong>sAMAccountName</strong> or something already present in user profile store with unique value for each user.
</span>

<span style="color: #1e4e79">-That will be used to pull data from BDC DB.
</span>

<span style="color: #1e4e79">-Other Columns names are same are custom user profile properties.
</span>

<span style="color: #1e4e79">-Create all columns with data type as <strong>nvarchar(50).</strong>
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto1.png" alt="" />

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto2.png" alt="" />

<span style="color: #1e4e79"><span style="background-color: yellow">2.</span> Create <strong>Secure store service application and make sure you can browse to it.
</strong></span>

&nbsp;

<span style="color: #1e4e79"><span style="background-color: yellow">3.</span> Create <strong>BCS service application and make sure you can browse to it.</strong>
</span>

&nbsp;

<span style="color: #1e4e79"><span style="background-color: yellow">4.</span> Open SharePoint site in SharePoint Designer(SPD)&gt; Go to External content types&gt; <strong>Create a new external content type.</strong>
</span>

<span style="color: #1e4e79">Provide Name, Display Name and then save it.
</span>

<span style="color: #1e4e79">After saving in SPD, you will see it in BCS service application page as an external content type:
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto3.png" alt="" />

&nbsp;

<span style="color: #1e4e79"><span style="background-color: yellow">5.</span>Come back to SharePoint Designer.
</span>

&nbsp;

<span style="color: #1e4e79">Click on <strong>"operations design view".</strong>
</span>

<span style="color: #1e4e79">Click on <strong>"Add connection".</strong>
</span>

<span style="color: #1e4e79">Specify Database server, Name details and connect with <strong>User's Identity</strong> and then click ok.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto4.png" alt="" />

<span style="color: #1f4e79">-If you choose to use "Impersonated Windows identity" or "Impersonated Custom identity" then you will have to provide "Secure store application ID".
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto5.png" alt="" />

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto6.png" alt="" />

&nbsp;

<span style="color: #1e4e79"><span style="background-color: yellow">6.</span>Then in the same External content type window, Right click on SQL table and click on <strong>"create all operations"</strong> -- Follow the options in the Wizard.
</span>

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto7.png" alt="" />

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto8.png" alt="" />

<span style="color: #1e4e79">-Click next.
</span>

<span style="color: #1e4e79">-Map <strong>sAMAccountName</strong> as identifier using <strong>"Map to identifier"</strong> option.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto9.png" alt="" />

&nbsp;

<span style="color: #1e4e79">-This is how it should look like in SPD after doing above:
</span>

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto10.png" alt="" />

&nbsp;

<span style="color: #1f4e79"><span style="background-color: yellow">7.</span>Use <strong>"BDC identity"</strong> for Connection to External System
</span>

&nbsp;

<span style="color: #1f4e79">- Click on link on database for "External system".
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto11.png" alt="" />

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto12.png" alt="" />

<span style="color: #1f4e79">If you get an error in this step while setting <strong>"BDC identity"</strong> for Connection to External System, refer to solution in step 8.
</span>

&nbsp;

<span style="color: #1f4e79"><span style="background-color: yellow">8.</span>Go to SharePoint site&gt; all site content&gt; <strong>Add an app&gt; External list.</strong>
</span>

<span style="color: #1f4e79">Provide a name and Select the "External content Type" we created.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto13.png" alt="" />

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto14.png" alt="" />

<span style="color: #1e4e79">-Click ok to create the external list.
</span>

<span style="color: #1e4e79">-URL should be something like this:
</span>

<a href="https://sp/Lists/BDCSQLData/Read%20List.aspx">https://sp/Lists/BDCSQLData/Read%20List.aspx</a>

<span style="color: #1e4e79">-When you browse to the URL, you should be able to see the SQL Table data with column and values as list column and values.</span>

<span style="color: #1e4e79"><span style="background-color: yellow"><strong>-If that works that means pulling that SQL data from Database using BDC external content type in SharePoint is working which is required to move forward to next steps.</strong></span>
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto15.png" alt="" /><span style="color: #1f4e79"> </span>

<span style="color: #1f4e79"><span style="background-color: yellow">Note:</span> If you use "Impersonated Custom identity<strong>"</strong> for Connection to External System in SP designer for External content type and if Secure store credentials were not set properly then, when you try to browse to External list, you might get an error like this:
</span>

<span style="color: red">Message from External System: 'Login failed for user 'Domain\UserName'.'.
</span>

<span style="color: #1f4e79">For example:
</span>

<span style="color: #1f4e79">Message from External System: 'Login failed for user 'Amat\apqs_install'.'.<span style="color: red">
</span></span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto16.png" alt="" /><span style="color: red">
</span>

<span style="color: #1f4e79">-Where 'Amat\apqs_install is the farm account and BDC identity.
</span>

<span style="color: #1f4e79">-It has DB owner access on our custom SQL database 'BDC-LDIFDB'.
</span>

&nbsp;

<span style="color: #1f4e79"><span style="background-color: yellow">-In this situation, you will have to use <strong>"BDC identity"</strong> for Connection to External System.</span>
</span>

<span style="color: #1f4e79">-But when you try to set <strong>"BDC identity"</strong> for Connection to External System in SP designer, while clicking ok, you might get an error like this:</span>

<em>"The metadata object that has Name '<strong>KoreaLangImportDB</strong>' has a Property with name 'AuthenticationMode and value 'RevertToSeIf'.
</em>

<em>This value indicates that the runtime should revert to the identity of the application pool, but reverting to the application pool must be explicitly enabled for the
</em>

<em>Service application by a farm administrator."
</em>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto17.png" alt="" />

&nbsp;

<span style="color: #1f4e79"><strong>-RevertToSelfAllowed BDC property is responsible for the above error.
</strong></span>

<span style="color: #1f4e79">-Here is description for the RevertToSelfAllowed BDC property from MSDN:
</span>

<span style="color: #5b9bd5">-----------
</span>

<span style="color: black">BdcServiceApplication.RevertToSelfAllowed property
</span>

<span style="color: #2a2a2a">Gets or set a value that indicates whether reverting to process identity is enabled as an authentication mode for BDC connectors.
</span>

<span style="color: black"><strong>true</strong> if reverting to process identity is enabled as an authentication mode for BDC connectors; otherwise, <strong>false</strong>.
</span>

<span style="color: #595959">From &lt;<a href="https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.businessdata.sharedservice.bdcserviceapplication.reverttoselfallowed.aspx">https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.businessdata.sharedservice.bdcserviceapplication.reverttoselfallowed.aspx</a>&gt;
</span>

<span style="color: #5b9bd5">-----------
</span>

<strong>To solve the issue, follow these steps below:
</strong>

&nbsp;

<span style="color: #1f4e79">-Run these PowerShell commands to check the current value of RevertToSelfAllowed property:
</span>

<span style="color: #5b9bd5">-----------
</span>

<span style="color: #1f4e79">#Run this to get BDC service application ID:
</span>

<span style="color: #1f4e79">Get-SPServiceApplication
</span>

<span style="color: #1f4e79">#Then use that ID in command below:
</span>

<span style="color: #1f4e79">$BDCApp = Get-SPServiceApplication -Identity &lt;BDC service application ID&gt;
</span>

<span style="color: #1f4e79">$BDCApp.RevertToSelfAllowed
</span>

<span style="color: #5b9bd5">-----------
</span>

<span style="color: #1f4e79">-If that returns value as false which is default value meaning it was reverting to identity of APP pool identity at Runtime and getting access denied.
</span>

<span style="color: #1f4e79">-Then you will have to set the property to True using these commands below:
</span>

&nbsp;

<span style="color: #1f4e79"><span style="background-color: yellow">$BDCApp.RevertToSelfAllowed = $true</span>
</span>

<span style="color: #1f4e79">$BDCApp.Update()
</span>

&nbsp;

<span style="color: #1f4e79">-Then try <span style="background-color: yellow">changing 'Authentication mode' to 'BDC identity'</span> again in SPD and this time it should work.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto18.png" alt="" /><span style="color: #1f4e79">
</span>

&nbsp;

<span style="color: #1f4e79">-Then External list also must show data without any errors so You should be able to pull Database information using BDC External content type to SharePoint external list.
</span>

&nbsp;

<span style="color: #1f4e79"><strong>So, what we learned in step 7 and step 8 is that:</strong>
</span>

<span style="color: #1f4e79">while setting <strong>"BDC identity"</strong> for Connection to External System in SP designer, if you get an error like this below:</span>

<em>"The metadata object that has Name '<strong>KoreaLangImportDB</strong>' has a Property with name 'AuthenticationMode and value 'RevertToSeIf'." --- and so on</em><span style="color: #1f4e79">
</span>

<span style="color: #1f4e79">AND/OR when you try to browse to External list, if you get an error like this:
</span>

<span style="color: red">Message from External System: 'Login failed for user 'Domain\UserName'.'.
</span>

&nbsp;

<span style="color: #1f4e79">Then you will have to set <strong>BdcServiceApplication.RevertToSelfAllowed </strong>property value to <strong>TRUE</strong> using PowerShell commands above.
</span>

<span style="color: black"><strong>Now, move to the next steps once you confirm that you can successfully browse to External list after this step to PULL data from custom database using BDC application.
</strong></span>

&nbsp;

<span style="color: #1f4e79"><span style="background-color: yellow">9.</span> Go to UPA service application&gt;<span style="color: #1e4e79"> "Configure Synchronization Connections" optio<span style="color: #1f4e79">n&gt; <strong>Create a new connection of type "Business data connectivity".</strong></span>
</span></span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto19.png" alt="" />

&nbsp;

<span style="color: #1f4e79">Select the BDC entity from "External content type picker".
</span>

<span style="color: #1f4e79">In connection settings&gt; Connect User profile store to BDC entity as 1:1 mapping&gt; Select <strong>'Username'</strong> in <strong>"Return items identified by this profile property"</strong> drop down option.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto20.png" alt="" />

<span style="color: #1f4e79">-Click ok to create the BDC connection.
</span>

<span style="color: #1f4e79">-It must now show in SYNC connections page along with your AD connection.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto21.png" alt="" />

<span style="color: #1f4e79"><span style="background-color: yellow">10.</span>Then We have to <strong>do profile property mapping.
</strong></span>

&nbsp;

<span style="color: #1f4e79">-Go to <strong>edit option</strong> of each custom user profile property we created.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto22.png" alt="" /><span style="color: #1f4e79"> </span>

<span style="color: #1f4e79">-Map the property to the similar 'attribute' from 'BDC' source data connection. It has to be an Import connection.<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto23.png" alt="" />
</span>

<span style="color: #1f4e79">-Map all the custom properties to their respective BDC property/attribute. For example:
</span>

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto24.png" alt="" />

<span style="color: #1f4e79">-After mapping, it should appear like this:
</span>

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto25.png" alt="" />

<span style="color: #1f4e79"><span style="background-color: yellow">11.<strong>We are ready to do SYNC now.</strong></span><strong>
</strong></span>

&nbsp;

<span style="color: #1f4e79">Note:
</span>

<span style="color: #1f4e79">Although you can do incremental UPA SYNC to pull these values, for better functionality/experience, <strong>we recommend you to run FULL UPA SYNC.</strong>
</span>

<span style="color: #1f4e79">Even if you do incremental UPA SYNC and property values are pulled accordingly, we recommend following that up with a FULL SYNC later but sooner.
</span>

&nbsp;

<span style="color: #1f4e79">-Then We have to run Incremental SYNC from UPA service application page.
</span>

<span style="color: #1f4e79">-That should kick off AD incremental SYNC and FULL SYNC for BDC connection as SYNC would be happening for the first time.
</span>

&nbsp;

<span style="color: #1f4e79">-You can see Adds to profiles in <strong>DS_FULLIMPORT FIM operation for BDC MA:</strong>
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto26.png" alt="" />

<span style="color: #1f4e79">-You can see New JOINS and Attribute flow in <strong>DS_FULLSYNC FIM operation for BDC MA:</strong>
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto27.png" alt="" />

<span style="color: #1f4e79">-Last <strong>FIM operation for MOSS-UserProfile(MOSS_EXPORT) MA will have updates to those existing profiles</strong> based on their userNames and those new Profile property changes will be pushed to SharePoint User profile store.
</span>

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto28.png" alt="" />

&nbsp;

<span style="color: #1f4e79"><span style="background-color: yellow">12.</span><strong>After the SYNC completes,</strong> you will see updated Profile property values in SharePoint User profile store from "Edit my profile" page.
</span>

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto29.png" alt="" />

&nbsp;

<img src="https://msdnshared.blob.core.windows.net/media/2016/06/060616_1421_Addingcusto30.png" alt="" />

&nbsp;

<span style="color: #5b9bd5">I hope that helps. Happy SHAREPOINTING !!</span>]]></content:encoded>
    </item>
    <item>
      <title>Cannot login to SharePoint site with ADFS AUTH- Error: Specified argument was out of the range of valid values.</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/cannot-login-to-sharepoint-site-with-adfs-auth-error-specified-argument-was-out-of-the-range-of-valid-values</link>
      <pubDate>Wed, 01 Jun 2016 00:28:58 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=65</guid>
      <description><![CDATA[I came across a scenario where ADFS site login was failing for SharePoint 2013 site, for one of my...]]></description>
      <content:encoded><![CDATA[I came across a scenario where ADFS site login was failing for SharePoint 2013 site, for one of my premier customers.

<span style="text-decoration: underline">Here are details of the issue and it’s resolution:</span>

&nbsp;

<strong>Symptom</strong>

You have ADFS 3.0 integrated to use with SharePoint server 2013 running on Windows server 2012 R2.
When you try to browse to the Site https://SharePointSiteURL and provide ADFS Credentials, It gives an error message and you can't login to site.

Resultant URL:
https://SharePointSiteURL/_trust/default.aspx

<span style="text-decoration: underline">Error on Page:</span>

<span style="color: #ff0000">Server Error in '/' Application.</span>

Specified argument was out of the range of valid values.
Parameter name: validFrom
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: validFrom

Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:
<span style="color: #ff0000">[ArgumentOutOfRangeException: Specified argument was out of the range of valid values.</span>
<span style="color: #ff0000">Parameter name: validFrom]</span>
Microsoft.IdentityModel.Tokens.SessionSecurityToken..ctor(IClaimsPrincipal claimsPrincipal, UniqueId contextId, String context, String endpointId, Nullable`1 validFrom, Nullable`1 validTo, SymmetricSecurityKey key) +994
Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.CreateSessionSecurityToken(IClaimsPrincipal principal, String context, String endpointId, DateTime validFrom, DateTime validTo) +463
Microsoft.IdentityModel.Web.SessionAuthenticationModule.CreateSessionSecurityToken(IClaimsPrincipal principal, String context, DateTime validFrom, DateTime validTo, Boolean isPersistent) +171
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request) +768
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +522
Microsoft.SharePoint.IdentityModel.SPFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) +204
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +176
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +169

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34009
<strong>Cause</strong>

<span style="color: #ff0000">Time mismatch on SharePoint and ADFS server.</span> In our case, SharePoint servers were 1 hour ahead of ADFS servers.

<strong>Resolution</strong>

We checked multiple settings on SharePoint and ADFS servers and later found that Time mismatch on SharePoint vs ADFS server was the problem.

From ULS logs:
----------------------------------------------------------------------------------------------------------------
w3wp.exe (UI1PAFE901X:0x357C)        0x1AA4        SharePoint Foundation        Claims Authentication        adlld        VerboseEx        SPAudienceValidator: Audience validation succeeded. AudienceUri: 'urn:produs-ibm-bhi-ecom:all_endpoints'.        8344289d-ceaf-40ff-79fe-c144124f1ecd
w3wp.exe (UI1PAFE901X:0x357C)        0x1AA4        SharePoint Foundation        Claims Authentication        af3yt        VerboseEx        SPSaml11SecurityTokenHandler: Audience validation succeeded for request 'https://SharePointSiteURL/_trust/default.aspx'.        8344289d-ceaf-40ff-79fe-c144124f1ecd

w3wp.exe (UI1PAFE901X:0x357C)        0x1AA4        SharePoint Foundation        Topology        aik7s        Verbose        The certificate with thumbprint 'F7F8F9438C53350802A0282C37E03E1BB97434D4' could not be validated against the machine store.  The certificate will be validated against the SharePoint trusted root authority list.        8344289d-ceaf-40ff-79fe-c144124f1ecd

w3wp.exe (UI1PAFE901X:0x357C)        0x1AA4        SharePoint Foundation        General        8nca        Medium        <span style="color: #ff0000">Application error when access /_trust/default.aspx, Error=Specified argument was out of the range of valid values.  Parameter name: validFrom   at Microsoft.IdentityModel.Tokens.SessionSecurityToken..ctor</span>(IClaimsPrincipal claimsPrincipal, UniqueId contextId, String context, String endpointId, Nullable`1 validFrom, Nullable`1 validTo, SymmetricSecurityKey key)     at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.CreateSessionSecurityToken(IClaimsPrincipal principal, String context, String endpointId, DateTime validFrom, DateTime validTo)     at Microsoft.IdentityModel.Web.SessionAuthenticationModule.CreateSessionSecurityToken(IClaimsPrincipal principal, String context, DateTime validFrom, DateTime validTo, Boolean isPersistent)     at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request)     at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args)     at Microsoft.SharePoint.IdentityModel.SPFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)     at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()     at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously)        8344289d-ceaf-40ff-79fe-c144124f1ecd
w3wp.exe (UI1PAFE901X:0x357C)        0x1AA4        SharePoint Foundation        Monitoring        b4ly        Medium        Leaving Monitored Scope (Request (POST:https://SharePointSiteURL/_trust/default.aspx)). Execution Time=11.5031379686524        8344289d-ceaf-40ff-79fe-c144124f1ecd
----------------------------------------------------------------------------------------------------------------

· Upon checking further, we found that:
On ADFS server: Time was 2:16 am.
On SharePoint server: Time was 3:16 am.

Clearly, <span style="color: #ff0000">There was Time Synchronization issue and SharePoint server was 1 hour ahead of ADFS server.</span>

· We changed the Server time on ADFS server and made it same as SharePoint.
· Then we were successfully able to login to the Site.]]></content:encoded>
    </item>
    <item>
      <title>Error opening Office documents in SharePoint 2013 website</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/error-opening-office-documents-in-sharepoint-2013-website</link>
      <pubDate>Tue, 31 May 2016 23:03:23 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=55</guid>
      <description><![CDATA[For one of my Premier customers, Office documents were giving an error while opening in SharePoint...]]></description>
      <content:encoded><![CDATA[For one of my Premier customers, Office documents were giving an error while opening in SharePoint 2013 website through office web apps.

<span style="text-decoration: underline">Here are details of the issue and it’s resolution:</span>

&nbsp;

<strong>Symptom</strong>

In SharePoint 2013 website, You might receive this error while opening Office documents in browser via office web apps:

Sorry, something went wrong
An error has occurred on the server.
Technical Details
Troubleshoot issues with Microsoft SharePoint Foundation.

<strong>Cause</strong>

3rd party softwares can cause this issue.
In our case "Dell change auditor agent" was the causing the issue so we had to stop the service of the 3rd party software(Dell).

<strong>Resolution</strong>

You might see these entries in ULS logs:
------------------------------
w3wp.exe (0x1CA0) 0x44B0 SharePoint Foundation <span style="color: #ff0000">Authentication Authorization aib35 Medium SPShareByLinkHandler.Initialize : Not a ShareByLink request - missing access token</span>
w3wp.exe (0x1CA0) 0x44B0 SharePoint Foundation Application Authentication agmxo Exception System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at net.pipe://localhost/SecurityTokenServiceApplication/appsts.svc that could accept the message. This is often caused by an incorrect address or SOAP action.

w3wp.exe (0x1CA0) 0x44B0 <span style="color: #ff0000">SharePoint Foundation WOPI ajc39 Unexpected WOPIFrame - Unhandled exception: System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at net.pipe://localhost/SecurityTokenServiceApplication/appsts.svc that could accept the message. This is often caused by an incorrect address or SOAP action.</span> See InnerException, if present, for more details. Server stack trace: at System.ServiceModel.Channels.ConnectionUpgradeHelper.DecodeFramingFault(ClientFramingDecoder decoder, IConnection connection, Uri via, String contentType, TimeoutHelper&amp; timeoutHelper) at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper&amp; timeoutHelper) at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper&amp; timeoutHelper) at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout) at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout) at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade) at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type) at Microsoft.SharePoint.IdentityServices.IApplicationSecurityTokenServiceContract.Issue(RequestApplicationSecurityToken request) at Microsoft.SharePoint.IdentityServices.SPApplicationSecurityTokenServiceClient.&lt;&gt;c__DisplayClass2.&lt;RequestSelfIssuedToken&gt;b__0() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.IdentityServices.SPApplicationSecurityTokenServiceClient.RequestSelfIssuedToken(RequestApplicationSecurityToken rst) at Microsoft.SharePoint.IdentityModel.OAuth2.SPOAuth2SecurityTokenManager.RequestRawLoopbackToken(OAuth2EndpointIdentity endpointIdentity, JsonWebSecurityToken onBehalfOf, String applicationContext) at Microsoft.SharePoint.IdentityModel.OAuth2.SPOAuth2SecurityTokenManager.IssueLoopbackTokenString(Uri endpointAddress, SPIdentityContext identityContext, String applicationContext, DateTime&amp; validTo) at Microsoft.SharePoint.IdentityModel.OAuth2.SPOAuth2SecurityTokenManager.IssueLoopbackTokenString(Uri endpointAddress, SPUser user, String applicationContext, DateTime&amp; validTo) at Microsoft.SharePoint.Utilities.SPWOPIHost.GetAccessToken(SPWeb web, Guid uniqueId, String proofKeyId, SPUrlZone zone, SPBasePermissions perms, Boolean hasEditLicense, Int64&amp; ttl) at Microsoft.SharePoint.Utilities.SPWOPIHost.GetAccessToken(SPFile file, String proofKeyId, SPUrlZone zone, Int64&amp; ttl) at Microsoft.SharePoint.Utilities.SPWOPIHost.GetWOPITargetInternal(HttpContext httpContext, SPWeb web, Object&amp; spPrimeObject, SPWOPIAction&amp; requestedAction, SPRegionalSettings spSettings, String&amp; wopiAppUrl, String&amp; wopiFavIconUrl, String&amp; wopiAccessToken, Int64&amp; wopiAccessTokenTtl, String&amp; errorMessageToDisplay, String&amp; redirectUrl) at Microsoft.SharePoint.ApplicationPages.WOPIFrameHelper.OnLoadHelper(WOPIFrame frame) at <span style="color: #ff0000">Microsoft.SharePoint.ApplicationPages.WOPIFrameHelper.OnLoad(WOPIFrame frame)</span>

w3wp.exe (0x1CA0) 0x44B0 SharePoint Foundation General aat87 Monitorable An error has occurred on the server.
------------------------------

when we browsed to this URL on OWA farm:
OfficeWebAppsServerFQDN/op/generate.aspx

We were getting this error:

Server Error
We're sorry. An error has occurred.
We've logged the error for the server administrator.

We checked that 'OpenFromUrlEnabled' property on OWA farm was set to false.
Ran this command to set property to true.
Set-OfficeWebAppsFarm -OpenFromUrlEnabled:$true
Now If we browse to this URL: OfficeWebAppsServerFQDN/op/generate.aspx, It results page correctly.

But documents were still giving error when opening in browser.
So, we are able to view Office documents using the Office Web Apps 2013 viewer Hence didn't seem to be an Office web apps issue.
After further investigation we found that : <span style="color: #ff0000">3rd party software: "Dell change auditor agent" was causing it to fail.</span>
After we stopped "Dell change auditor agent" service on SharePoint server and restarted IIS, Office Web Apps started to work.
Dell is already aware of this issue.
https://support.software.dell.com/change-auditor/kb/150602

Likewise, other 3rd Party softwares can cause this issue.

More Information
https://blogs.technet.com/b/office_web_apps_server_2013_support_blog/archive/2013/12/27/how-to-see-if-wac-server-is-working.aspx

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Fast Search 2010 - While running 'get-FASTSearchSettingGroup' command, Getting error: "Failed to communicate with the WCF service."</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/fast-search-2010-while-running-get-fastsearchsettinggroup-command-getting-error-failed-to-communicate-with-the-wcf-service</link>
      <pubDate>Thu, 26 May 2016 20:57:27 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=45</guid>
      <description><![CDATA[For one of my Premier 'FAST search for SharePoint 2010' customers, 'get-FASTSearchSettingGroup'...]]></description>
      <content:encoded><![CDATA[For one of my Premier 'FAST search for SharePoint 2010' customers, 'get-FASTSearchSettingGroup' command was throwing an error.

<span style="text-decoration: underline">Here are details of the issue and it’s resolution:</span>

&nbsp;

<strong>Symptom</strong>

When running PowerShell command : "Get-FASTSearchSettingGroup" in order to update a bestbets file, getting an error: "Failed to communicate with the WCF service."

<strong>Cause</strong>

FAST administration app pool account's password was changed so it had to be updated manually in the App pool identity.

<strong>Resolution</strong>

· We went to IIS manager and  found that the Fast Administration app pool was stopped.
· We manually started it.
· Then went to FAST PowerShell again and ran the command get-FASTSearchSettingGroup which returned the same error.
· Checked that the FAST administration site App pool got stopped again.
· We suspected that the app pool identity was not updated when the password might have been changed for the account.
· Went to app pool and updated App pool credentials with new password.
· Then ran the same PowerShell command and it worked this time.

&nbsp;

I Hope that helps! Happy searching !!]]></content:encoded>
    </item>
    <item>
      <title>"SharePoint Administration" service missing from windows services</title>
      <link>https://docs.microsoft.com/archive/blogs/vivek/sharepoint-administration-service-missing-from-windows-services</link>
      <pubDate>Wed, 25 May 2016 14:13:42 GMT</pubDate>
      <dc:creator><![CDATA[VivekMSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/vivek/?p=36</guid>
      <description><![CDATA[For one of my Premier customers, SharePoint administration Service went missing from Windows...]]></description>
      <content:encoded><![CDATA[For one of my Premier customers, SharePoint administration Service went missing from Windows services console (Services.msc)

<span style="text-decoration: underline">Here are details of the issue and it's resolution:</span>

&nbsp;

<strong>Symptoms:</strong>

We are not able to see the "SharePoint 2010 Administration" service in Windows services console (services.msc).

When running command: "PSConfig -cmd services -install", you might also get an error message similar to this:

An exception of type System.UnauthorizedAccessException was thrown. Additional exception information: Access to the path 'C:\ProgramData\Microsoft\SharePoint\Config\3fc29d1c-b70b-42c0-bdf0-fc5c48f76de1\891c821c-cffe-4d42-b959-049955122a33.xml' is denied.

<strong>Cause:</strong>

"SharePoint Administration" Service gets removed accidently from the farm either manually or via some 3rd party product.

<strong>Resolution:</strong>
<ul type="disc">
	<li>We navigated to command prompt &gt; C:\windows\Microsoft.Net\Framework\v2.0.50727</li>
	<li>Ran this command to install SPAdminV4 service:</li>
</ul>
Installutil -i "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN\wssadmin.exe"
<ul type="disc">
	<li>It completed successfully.</li>
	<li>Admin service started appearing in services console and we were able to start it successfully on the SharePoint server.</li>
</ul>
<strong>More Information:</strong>

SharePoint Administration service exists in all SharePoint versions and Builds so the article applies to all SharePoint products.

&nbsp;

I Hope that helps! Happy SharePointing !!]]></content:encoded>
    </item>
  </channel>
</rss>