visual una tutorial studio registro paso pagina net formularios formulario ejemplos diseño crear como asp aplicaciones aplicacion vb.net authentication asp.net-mvc-5 owin ws-federation

vb.net - tutorial - ¿Cómo atrapar una devolución de llamada WS-Federation en una aplicación OWIN MVC5 para crear automáticamente una identidad en la base de datos local?



formulario de registro en asp net (1)

Después de que el WsFederationAuthenticationHandler haya validado el token de entrada, puede registrarse para recibir una notificación. WsFederationAuthenticationOptions.Notifications es donde puede hacer eso. En startup.cs, desea establecer notificaciones para: WsFederationAuthenticationNotifications.SecurityTokenValidated.

Patrice, aquí hay un código que te dará una idea de cómo enganchar la notificación. este código generalmente se coloca en startup.auth.cs.

var wsFederationOptions = new WsFederationAuthenticationOptions { Notifications = new WsFederationAuthenticationNotifications { SecurityTokenValidated = (notification) => { var identity = notification.AuthenticationTicket.Identity; var defaultName = identity.FindFirst ("<claim-that-identifies-user>"); // do work here return Task.FromResult<object>(null); } }, MetadataAddress = wsFedMetadataAddress, Wreply = host, Wtrealm = clientId }; app.UseWsFederationAuthentication(wsFederationOptions);

Actualmente estoy trabajando en una aplicación vb.net MVC5 y utilizando WS-Federation para autenticar a todos los usuarios de un servidor ADSF 3.0. Todo está funcionando bien; cuando los usuarios intentan acceder a un controlador seguro marcado con el atributo AUTHORIZE, los usuarios son redirigidos a la página de inicio de sesión de STS, inician sesión y vuelven. Puedo leer las RECLAMACIONES proporcionadas por el servidor ADFS.

Mi problema es que necesito crear una entrada local en mi base de datos cuando ingresa un nuevo usuario autenticado después de iniciar sesión para almacenar información adicional. No quiero que el usuario se registre manualmente, si está autenticado, significa que puedo confiar en este usuario.

El Startup.Auth.vb se ve así:

Partial Public Class Startup Private Shared realm As String = ConfigurationManager.AppSettings("ida:Wtrealm") Private Shared adfsMetadata As String = ConfigurationManager.AppSettings("ida:ADFSMetadata") Public Sub ConfigureAuth(app As IAppBuilder) app.UseCookieAuthentication(New CookieAuthenticationOptions() With { .AuthenticationType = CookieAuthenticationDefaults.AuthenticationType, .LoginPath = New PathString("/Home/Login") }) app.UseWsFederationAuthentication(New WsFederationAuthenticationOptions() With { .AuthenticationType = "ExternalCookie", .Wtrealm = realm, .MetadataAddress = adfsMetadata, .Wreply = "https://myapp.com/Home/SSOLogin" }) app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType) End Sub

Clase final

En mi controlador de casa, he creado la acción SSOLogin para poder hacer lo que necesito hacer para probar la presencia de este usuario y crearlo si no existe

Public Function SSOLogin() As ActionResult '' Some code here to check if user exists or not and create it End Function

Puse un punto de interrupción en mi acción, pero nunca se golpea porque el middleware maneja y detecta la devolución de datos antes de que golpee el método de acción y hace un redireccionamiento 302 a la página segura solicitada originalmente.

La pregunta

¿Hay alguna forma de atrapar la devolución de llamada en el middleware WSFederation o agregar un evento al archivo.asax global para realizar la creación automática de mi usuario solo después de la autenticación, no en todas las solicitudes?

Gracias por tu tiempo !