Autenticación al usar el servicio de token de seguridad

5

Creé un Security Token Service (STS), un servicio con una referencia al STS y una aplicación de escritorio de ejemplo.

Esto funciona como se esperaba cuando se usa la autenticación de Windows y la seguridad de mensajes, se recupera un token del STS y se llama correctamente al método de servicio. El servicio devuelve una cadena que contiene la identidad de los usuarios actuales, que devuelve mi nombre de usuario de AD.

Sin embargo, tengo el requisito de autenticarme contra una base de datos en lugar de AD. He intentado crear un CustomUserNameValidator (en el STS, ¿es este el lugar correcto?) Y hacer referencia a él en web.config. Luego proporciono las credenciales como se muestra a continuación.

SampleServiceReference.SampleServiceClient client = new SampleServiceReference.SampleServiceClient(); client.ClientCredentials.UserName.UserName = "alex"; client.ClientCredentials.UserName.Password = "pass";

Creo que los certificados están configurados correctamente (todos usan 'localhost'), sin embargo, recibo la siguiente excepción al llamar al servicio:

System.ServiceModel.FaultException: ID3242: The security token could not be authenticated or authorized.

Todo lo que intento parece fallar. ¿Es posible lo que estoy describiendo? ¿El cliente del servicio también pasa las credenciales del cliente al STS, o estoy entendiendo completamente mal lo que está sucediendo aquí?

Esta pregunta de stackoverflow es similar, sin embargo, he comprobado la URL de la audiencia y parece estar bien. WIF STS ID3242

¿Alguien tiene algún consejo sobre cómo puedo lograr una autenticación personalizada al usar un STS?

1
  • Ahora que resolví mi problema, pensé en actualizar esto en caso de que alguien más tenga problemas similares. Un CustomUserNameValidator no es lo que necesitaba, sino un CustomNamePasswordValidatorSecurityTokenHandler que implementó UserNameSecurityTokenHandler o WindowsUserNameSecurityTokenHandler. Eche un vistazo al ejemplo 4 de la solución aquí ClaimID.codeplex.com 13 de mayo de 2011 a las 10:23
3

Hay un ejemplo simple de lo que necesita aquí: http://claimsid.codeplex.com

Mire la muestra 8 o 4.

Sin embargo, una pequeña aclaración. La autenticación de nombre de usuario / contraseña está en el STS, no en su servicio. Su servicio se autenticará con un token de seguridad obtenido del STS.

1
  • ¡Muchas gracias! El ejemplo 4 es exactamente lo que pasé todo el día implementando ayer, por lo que esto confirma que lo que he hecho es correcto. ¡Ojalá lo hubiera encontrado antes! 13 de mayo de 2011 a las 10:13
2

Eche un vistazo a StarterSTS .

Se proporciona el código fuente completo y se autentica contra la base de datos SQL basada en roles aspnetdb estándar. Hay varios videos que le ayudarán a ponerlo en funcionamiento.

Este proyecto luego se convirtió en ASP MVC - IdentityServer . Esto no es tan maduro como los archivos de ayuda, etc.

3
  • Gracias por los enlaces, ya me encontré con StarterSTS. Es un gran ejemplo de cómo usar un STS con proveedores de membresía y perfil, sin embargo, no creo que contenga una muestra de cómo asegurar un servicio WCF usando STS y credenciales de nombre de usuario / contraseña, que parece ser mi problema. 11 de mayo de 2011 a las 21:47
  • Acabo de echar un vistazo a IdentityServer, parece prometedor y podría resolver mi problema. identityserver.codeplex.com/SourceControl/changeset/view/… 11 de mayo de 2011 a las 21:51
  • Sí, el 90% de la documentación en esta área gira en torno al perfil pasivo en lugar del activo. Supongo que comenzó con las plantillas WCF STS en VS 2010. (los que vienen con WIF SDK).
    rbrayb
    11 de mayo de 2011 a las 23:40