将服务器端和客户端身份验证与WebAPI结合使用

时间:2017-05-27 12:01:53

标签: c# asp.net session authentication asp.net-web-api

我有一个遗留的ASP.NET webforms应用程序,用户通过服务器端处理的表单登录。如果输入的用户名+密码与数据库中的凭据匹配,我会在会话中设置一些值(例如,当前用户ID),然后执行Response.Redirect。我还为#34创建了一个HttpCookie;我下次访问时会自动重新启动。功能。

目前,我还在该Web应用程序中添加了WebApi支持。我设法实现了令牌身份验证,允许我在客户端登录。

如何结合两种身份验证方法?我希望用户输入一次凭据,在服务器端进行身份验证,在客户端进行身份验证后将用户重定向到另一个页面。

2 个答案:

答案 0 :(得分:0)

以下代码将创建一个cookie以保持用户登录。

// login etc
        if (chkRemember.Checked)
        {
            // calculate the total number of minutes in 20 days to use as the time out.
            int timeout = (int)TimeSpan.FromDays(30).TotalMinutes;

            // create an authentication ticket
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(txtUserName.Text, true, timeout);

            // Encrypt the ticket
            string encrptedTicked = FormsAuthentication.Encrypt(ticket);

            // create the cookie for the ticket, and put the ticket inside
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrptedTicked);

            // give cookie and ticket same expiration
            cookie.Expires = ticket.Expiration;

            // Attach cookie to current response. it will now to the client and then back to the webserver with every request
            HttpContext.Current.Response.Cookies.Set(cookie);

            // send the user to the originally requested page.
            string requestedPage = FormsAuthentication.GetRedirectUrl(txtUserName.Text, false);
            Response.Redirect(requestedPage, true);
        }
        else
        {
            // login without saving cookie to client
            FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);
        }

答案 1 :(得分:-1)

您可以使用Angular JS在webapi中使用基于令牌的身份验证。访问以下链接 http://www.dotnetcurry.com/aspnet/1223/secure-aspnet-web-api-using-tokens-owin-angularjs