ASP.NET — крючок аутентификации ADFS

У меня есть веб-API ASP.NET, который выполняет проверку подлинности на сервере ADFS. Класс запуска Authentication определяется следующим образом:

public void ConfigureAuth(IAppBuilder app)

{

    app.UseCookieAuthentication(
        new CookieAuthenticationOptions
        {
        AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
        });

    app.UseWsFederationAuthentication(
        new WsFederationAuthenticationOptions
        {
            MetadataAddress = ConfigurationManager.AppSettings["ADFSMetadata"],
            Wtrealm = ConfigurationManager.AppSettings["Wtrealm"]
        });


    app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);

}

Я хочу, чтобы когда пользователь успешно аутентифицируется ADFS и токен возвращается обратно, должна быть создана запись пользователя в моей базе данных SQL, если адрес электронной почты, найденный в утверждении, возвращенном ADFS, уже не существует в базе данных.

Есть ли способ перехватить ответ сразу после аутентификации для выполнения вышеуказанной задачи?


person A J Qarshi    schedule 24.05.2019    source источник


Ответы (1)


Я нашел решение. Класс WsFederationAuthenticationOptions имеет свойство Notification, которое можно использовать для перехвата ответов об успешной и неудачной аутентификации.

Например

public void ConfigureAuth(IAppBuilder app)

{

    app.UseCookieAuthentication(
        new CookieAuthenticationOptions
        {
        AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
        });

    app.UseWsFederationAuthentication(
        new WsFederationAuthenticationOptions
        {
            MetadataAddress = ConfigurationManager.AppSettings["ADFSMetadata"],
            Wtrealm = ConfigurationManager.AppSettings["Wtrealm"],
            Notifications = new WsFederationAuthenticationNotifications
            {
                AuthenticationFailed = context =>
                {
                    context.HandleResponse();
                    context.Response.Redirect("/Error?message=" + context.Exception.Message);
                    return Task.FromResult(0);
                },
                SecurityTokenReceived = context =>
                {
                    // Get the token
                    var token = context.ProtocolMessage.GetToken();                    
                    return Task.FromResult(0);
                }
            }
        });


    app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);

}
person A J Qarshi    schedule 27.05.2019