我有一个使用基本表单身份验证的现有asp.net mvc网站。该站点有一个登录页面,该页面回发到登录操作,该操作通过FormsAuthentication.SetAuthCookie()记录用户。我希望在网站上添加一个api,作为一个mvc2区域,用户将根据作为http头传递的令牌进行身份验证。此区域仅包含json操作,因此将用户重定向到登录页面没有意义。相反,我希望用户只需将令牌与每个请求一起传递。该令牌映射到每个用户帐户,用户将自动进行身份验证。
我在努力摆脱这种逻辑。此时,最佳选择似乎是在Application_AuthenticateRequest方法中将标头查找逻辑和身份验证添加到Global.asax。我想避免在调用FormsAuthentication.SetAuthCookie()之后需要重定向用户。我希望登录操作对他们透明。
我接近这个错误的方式吗?
作为旁注:不可能要求api请求的用户名/密码,因为该网站有多个用户。一些人使用OpenID加入,而其他人则使用用户名/密码加入。
答案 0 :(得分:4)
向Global.asax中的Application_AuthenticateRequest
事件添加标题查找。代码看起来像:
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
{
}
}
答案 1 :(得分:1)