我有一个现有的 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/