【发布时间】:2016-12-23 20:09:34
【问题描述】:
我有一个使用我的身份验证过滤器的操作方法:
public class TutorAuthenticationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var req = filterContext.HttpContext.Request;
var auth = req.Headers["Authorization"];
if (!string.IsNullOrEmpty(auth))
{
var cred = System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(auth.Substring(6))).Split(':');
var user = new { Name = cred[0], Password = cred[1] };
if (userService.AuthorizeTutor(user.Name, user.Password))
{
return;
}
}
filterContext.HttpContext.Response.AddHeader("WWW-Authenticate", $"Basic realm= {BasicRealm}");
filterContext.Result = new HttpUnauthorizedResult();
}
}
然后我想在主页上为已通过这种方式进行身份验证的用户显示一些内容,但这在我的视图中不起作用:(
@if (Request.IsAuthenticated)
{
<h1>Hello</h1>
}
我知道它不起作用,因为我不使用 Identity,但有什么方法可以做到这一点?
感谢您的回答:)
【问题讨论】:
-
userService是从哪里来的?它是否有一些属性可以返回经过身份验证的状态? -
DI,我只是省略了一些不重要的属性...它只是返回真/假
-
该过滤器会自动将一些数据存储到 cookie 中,以便存储经过身份验证的状态
-
你介意解决方案是否使用了“身份”吗??
-
当你说你想要一个没有身份的解决方案时,这是否也排除了将 Thread.CurrentPrincipal 设置为 GenericPrincipal 的可能性?