.net wcf security wif saml

.net - WIF 4.5 Token de seguridad BootstrapContext nulo



wcf security (3)

He resuelto el problema al eliminar la cookie del navegador, incluida la cookie Fedauth. Una vez que depuré de nuevo, pude obtener todos los valores necesarios

Estoy usando las nuevas 4.5 WIF para autenticar a los usuarios del sitio web y asegurar la comunicación entre mi sitio web MVC y los servicios de WCF.

Tengo el sitio web configurado para guardar el contexto de arranque para que pueda volver a usar el mismo token de seguridad para todas las solicitudes a la capa de servicio.

En condiciones normales, todo funciona bien con cada solicitud de sitio web autenticada y el SecurityToken está disponible a través del contexto para asegurar las llamadas WCF.

Sin embargo, si el dominio de la aplicación de sitios web se reinicia (por ejemplo, compilando la aplicación mientras se desarrolla), las solicitudes al sitio web seguirán autenticadas, pero SecurityToken ya no estará disponible en el contexto para transmitir las llamadas WCF.

Depurando el BootstrapContext tiene 4 propiedades útiles:

SecurityToken SecutiryTokenHandler Token TokenBytes

Reinicio del dominio previo a la aplicación SecurityToken y SecurityTokenHandler tienen valores, y el token de restauración posterior tiene un valor.

Observando el valor de Token después del reinicio, parece que este es el XML de SAML sin formato, así que presumiblemente puedo rehidratar un SecutiryToken completo, pero me parece un comportamiento extraño del que no puedo encontrar ninguna documentación.

¿Alguna idea de lo que podría hacer para asegurarme de que SecurityToken esté siempre disponible para ahorrarme problemas con el XML de tokens?

Actualizar

Usando dotPeek para ver qué está sucediendo en el código fuente del framework, pude ver la ruta de ejecución que caspea este comportamiento, pero no pude determinar ninguna razón por la cual tenía que ser así y cómo podría ser avioded.

Al final, dejé de intentar resolverlo y ahora uso el siguiente código para asegurarme de tener un token

if (context.SecurityToken != null) { token = context.SecurityToken; } else if (context.Token.IsNotEmpty()) { var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers; token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token))); }

Lo que ahora me preocupa es que me he perdido un razonamiento detrás de este comportamiento y mi solución anterior va a explotar en algún momento.


Me encontré con el mismo problema. Veo que el token tiene la representación xml del token y el SecurityToken es nulo. También noté que esto es realmente fácil de reproducir al matar w3wp.exe.


Tuve el mismo problema cuando implementé la muestra ClaimsAwareWebFarm de microsoft. El problema surge cuando agrega esta sección a web.config:

<caches> <sessionSecurityTokenCache type="CacheLibrary.SharedSessionSecurityTokenCache, CacheLibrary"> <!--cacheServiceAddress points to the centralized session security token cache service running in the web farm.--> <cacheServiceAddress url="http://localhost/SecurityTokenCacheService/SessionSecurityTokenCacheService.svc" /> </sessionSecurityTokenCache> </caches>

¡Gracias Matt por esta solución!