asp.net-mvc – ASP.NET MVC – HTTP验证提示

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC – HTTP验证提示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以让我的应用程序要求用户名和密码提示之前渲染视图?
就像在twitter API上获取有关您的帐户的信息:

http://twitter.com/account/verify_credentials.xml

所以在渲染视图||之前文件它要求您插入您的用户名和密码,我认为这是直接在服务器上,因为curl请求是基于用户名:密码,以及像这样:

curl -u user:password http://twitter.com/account/verify_credentials.xml

因为我试图构建一个API遵循相同的结构,我想知道如何我可以做这个ASP.NET MVC C#。我已经使用这个ruby rails和它的漂亮简单像:

before_filter :authenticate

def authenticate
    authenticate_or_request_with_http_basic do |username,password|
    username == "foo" && password == "bar"
end

我不认为[授权]过滤器是相同的,因为我相信它只是一个重定向
并将它重定向到基于帐户数据库的帐户内部控制器,在这种情况下,我将使用另一个数据库,特别是从Web服务,并在提交信息后进行验证。
但是我需要该操作来请求用户并在其请求上传递凭据。

提前致谢

更新:

实际上请求需要此身份验证的网页(即Twitter)
我必须根据要求声明这一点

request.Credentials = new NetworkCredential("username","password");

这将反映提示用户名和密码。

所以,它是完全相同的事情,但从另一方面,如果可以根据请求提供信息的身份验证提示,我如何要求对此请求的此身份验证?

所以每次有人试图向我的应用程序请求示例:

http://myapplication/clients/verify_credentials

它应该请求与服务器提示符的用户名和密码
所以要获取curl的信息,例如它会是这样的

curl -u user:password http://myapplication/clients/verify_credentials

解决方法

那么,要要求基本身份验证,您需要返回401状态码。但这样做将导致当前认证模块执行其默认的未授权处理程序(对于表单认证,这意味着重定向登录页面)。

我写了一个ActionFilterAttribte,看看是否可以得到你想要的行为,当没有认证模块安装在web.config。

public class RequireBasicAuthentication : ActionFilterAttribute {
   public override void OnActionExecuting(ActionExecutingContext filterContext) {
       var req = filterContext.HttpContext.Request;
       if (String.IsNullOrEmpty(req.Headers["Authorization"])) {
           var res = filterContext.HttpContext.Response;
           res.StatusCode = 401;
           res.AddHeader("WWW-Authenticate","Basic realm=\"Twitter\"");
           res.End();
       }
   }
}

而控制器动作:

[RequireBasicAuthentication]
public ActionResult Index() {
    var cred = System.Text.ASCIIEncoding.ASCII
            .GetString(Convert.FromBase64String(
            Request.Headers["Authorization"].Substring(6)))
            .Split(':');
    var user = new { Name = cred[0],Pass = cred[1] };
    return Content(String.Format("user:{0},password:{1}",user.Name,user.Pass));
}

该操作成功打印输入的用户名和密码。但我真的怀疑这是最好的方法做到这一点。除了以这种方式要求用户名和密码之外,你别无选择吗?

原文链接:https://www.f2er.com/aspnet/254091.html

猜你在找的asp.Net相关文章