- client such as IE has "Integrated window Authentication" unchecked (even if server IIS have NTAuthenticationProvider paramenter set to "Negotiate, NTLM": NTLM failback);
- or server IIS have NTAuthenticationProvider paramenter set to "NTLM" (even if IE has "integrated window Authentication" enabled)
- or SPN is not found from KDC
If both client and server support Kerberos (ie, server IIS has "Negotiate,NTLM" and IE support "Integrated window Authentication")
One of common cases that client could get wrong tickets is, the request uses Netbios name such as http://servername/, http/servername is not registered, but Host/servername always exists. The result is client keep sending ticket for HOST/servername while server expect HTTP/servername ticket.
Now it comes why we need delegation? You need delegation when you want to forward logon user's credential to another system.
First, how to get logon user's credential?
- System.Net.CredentialCache.DefaultCredentials when impersonate=true
User.Identity.Name when it is not anonymous
- trust the server account (whatever it is, i.e, application pool, ssp service accout or mySite account etc) for delegation;
- grant authenticated user (rather than service accounts) an access to target server/data.
Need to turst Computer Account for delegation? No, but only when your service is running under network service, local service or local system. When configuring computer account for delegation, 1) registering specific service (option 3) rather than all service (option 2), see here for insturction; 2)reboot server to make it effective.
Remember delegation has both timing and location constrains.