是否可以让我的应用程序要求用户名和密码提示之前渲染视图?
就像在twitter API上获取有关您的帐户的信息:
就像在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)); }
该操作成功打印输入的用户名和密码。但我真的怀疑这是最好的方法做到这一点。除了以这种方式要求用户名和密码之外,你别无选择吗?