asp.net - 将每个请求、基于 token 的身份验证添加到 asp.net mvc 站点

标签 asp.net asp.net-mvc-2 authentication

我有一个现有的 asp.net mvc 网站,它使用基本表单例份验证。该站点有一个登录页面,可回发登录操作,该操作通过 FormsAuthentication.SetAuthCookie() 使用户登录。我希望向网站添加一个 api,作为 mvc2 区域,其中将根据作为 http header 传递的 token 对用户进行身份验证。该区域仅包含 json 操作,因此将用户重定向到登录页面没有意义。相反,我希望用户只在每个请求中传递一个 token 。该 token 映射到每个用户帐户,并且用户将自动进行身份验证。

我正在努力思考该逻辑应该放在哪里。此时,最好的选择似乎是将 header 查找逻辑和身份验证添加到 Application_AuthenticateRequest 方法中的 Global.asax 中。不过,我想避免在调用 FormsAuthentication.SetAuthCookie() 后需要重定向用户。我希望登录操作对他们来说是透明的。

我是否以错误的方式处理这个问题?

顺便说一句:API 请求需要用户名/密码是不可能的,因为该网站有混合用户。一些使用 OpenID 加入,而其余的则使用用户名/密码加入。

最佳答案

在 Global.asax 中向 Application_AuthenticateRequest 事件添加 header 查找。代码看起来像这样:

private const string AuthorizationHeader = "Authorization";

if (!string.IsNullOrWhiteSpace(request.Headers[AuthorizationHeader]))
{
  try
  {
    // Remove Basic from beginning and then decode the string
    var token = request.Headers[AuthorizationHeader].Substring(6);
    token = new ASCIIEncoding().GetString(Convert.FromBase64String(token)).Split(':')[0];

    return UserService.FetchByApiToken(token);
  }
  catch
  {
  }
}

关于asp.net - 将每个请求、基于 token 的身份验证添加到 asp.net mvc 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827688/

相关文章:

c# - ASP.NET 学习路径

asp.net - Web 表单 - sql 和检索数据 - 有更简单的解决方案吗

asp.net-mvc - 用于拆分日期时间字段的 ASP.NET MVC 2 自定义编辑器模板

azure - 从 Azure databricks 向 MS Onelake 写入数据时出错

asp.net - 如何通过 web.config 重定向 ASP.NET 中已登录的用户?

c# - Asp Action 路线数据

c# - 动态控件的复杂 View 状态问题

c# - 在 SQL to LINQ 中使用 SP 时从 SQL Server 检索错误消息

asp.net-mvc-2 - Windows Azure "Sandbox"

authentication - 有没有办法让 "remember me"复选框在 WinRT 应用程序的 Azure 移动服务身份验证上起作用?