Cuál es la mejor manera de recuperar una WindowsIdentity de una ClaimsIdentity

Hasta ahora descubrí dos soluciones para obtener un objeto WindowsIdentity de ClaimsIdentity. Primero extraigo el nombre principal del usuario (upn).

ClaimsIdentity ci = (ClaimsIdentity) Thread.CurrentPrincipal.Identity;    
string upn = null;
foreach (Claim c in ci.Claims)
{
    if (c.ClaimType == ClaimTypes.Upn)
    {
        upn = c.Value;
        break;
    }
}

Solo llame al constructor de WindowsIdentity con el upn:

WindowsIdentity winId = nueva WindowsIdentity (upn);

Utilizar reclamaciones al servicio de token de Windows (c2WTS):

WindowsIdentity winId = S4UClient.UpnLogon (upn);

Solution 1 me parece la solución más simple y fácil, pero entonces no entiendo el propósito de c2WTS.

¿Alguna sugerencia

tnx!

Respuestas a la pregunta(1)

Su respuesta a la pregunta