In general, upn tries to authenticate a server for a client (for example, you indicate to your client which server is trusted and which is not, for example, the client checks hosts in ssl).
I think that if upn has the correct meaning, then the connection will use kerberos, and if it is wrong, then the connection will use ntlm (if available under certain conditions). Try disabling ntlm, and then only the correct value for upn will work:
<clientCredentials> <windows allowNtlm="false" /> </clientCredentials>
There is also a way to check if kerberos or ntlm was used by setting a breakpoint / log on the server and checking ServiceSecurityContext.Current. You should get a different value depending on the upn value.
source share