ASP.NET MVC - HTTP 身份验证提示

2024-04-10

是否可以让我的应用程序在渲染视图之前要求输入用户名和密码提示? 就像在 twitter API 上获取有关您帐户的信息一样:

http://twitter.com/account/verify_credentials.xml 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

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

提前致谢


UPDATE:

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

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

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

所以,这是完全相同的事情,但从另一面来看,如果可能的话provide根据请求向身份验证提示提供信息,我怎样才能require对请求进行此身份验证?

因此,每次有人尝试向我的应用程序发出请求时:

http://myapplication/clients/verify_credentials http://myapplication/clients/verify_credentials

它应该在服务器提示符下要求输入用户名和密码 例如,要检索有关卷曲的信息,就会像这样

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));
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC - HTTP 身份验证提示 的相关文章

随机推荐

  • Windows 中的 Perl Kill(0, $pid) 总是返回 1

    我正在尝试制作一个 Perl 脚本来运行 Windows 中的一组其他程序 我需要能够捕获进程的 stdout stderr 和退出代码 并且需要能够查看进程是否超出了分配的执行时间 现在 我的代码的相关部分如下所示 pid open3 w
  • 如何在 Rails 中实现计数器缓存?

    我有一个帖子控制器和一个评论控制器 帖子有很多评论 评论属于帖子 关联是在 counter cache 选项打开的情况下设置的 如下所示 Inside post rb has many comments Inside comment rb
  • 自定义指令中的 ng-class 不观察更新

    我正在尝试创建一个像这样使用的指令
  • OpenCV 模板匹配 N 个最佳匹配不起作用

    我已经为此苦苦挣扎了很长一段时间 但似乎找不到这里的问题 让我尝试引导您完成整个过程 我正在尝试为我的模板匹配获取 10 个最佳边界框 不会在这里显示整个图像 但这是我的cv mat当我循环遍历cv mat搜索最低值 结果 int a b
  • ggplot2:如何调整图例中的线型+顺序?

    我想调整以下 ggplot 中的线型 因此 我在 data frame df 中引入另一列来表示线型 但是一旦我将其转换为因子 线型而不是 方法 就会出现在图例中 参见试验 3 如何获得传说中的 方法 最后我希望能够 自由选择线型 自由选择
  • 为什么反射可以访问C#中类的受保护/私有成员?

    为什么反射可以访问C 中类的受保护 私有成员 这对课堂来说不安全吗 为什么反思会被赋予如此大的力量 这是一个反模式 http en wikipedia org wiki Anti pattern 会员可访问性不是安全功能 它的存在是为了保护
  • 仅在 iOS 和 Android 中处理数据通知失败

    我有一个发送推送通知的服务器 对于Android 我覆盖onMessageReceived来处理消息 对于 iOS 我使用NotificationExtension I need更改传入的推送通知 我不知道标题和服务器端的所有内容 客户端知
  • HttpClient HttpResponseMessage 地址/URI

    我正在开发一个 C WinRT 应用程序 该应用程序向网络服务器发出 POST 和 GET 请求 有谁知道使用 HttpClient 对象时是否有办法获取响应 URI 地址 如果我使用 HttpWebRequest HttpWebRespo
  • 使用jq连接多个文件中的JSON数组

    我有一系列包含记录数组的 JSON 文件 例如 cat f1 json records a 1 a 3 cat f2 json records a 2 我想 1 从每个记录中提取一个字段 2 输出一个包含所有输入文件中所有字段值的数组 第一
  • C:创建静态库并使用 Makefile 进行链接

    我在尝试着了解静态和共享库 http randu org tutorials c libraries php 我想执行以下操作来创建一个单独编译和链接的 makefile 以便创建和链接静态库 形成最终的静态可执行文件 我有以下 Makef
  • 在java应用程序中使用“bcc”发送电子邮件而不使用“to”

    我已经阅读了 stackoverflow 中的所有参考资料 然而 没有任何东西符合我们的目标 我该如何使用bccjava中的sendmail方法 根据 SMTP 的 RFC RFC 2821 link http www ietf org r
  • mySQL SELECT 即将到来的生日

    我正在尝试编写一个查询来选择数据库中生日在未来 7 天内的用户 我做了很多研究 但无法想出可行的解决方案 生日字段存储为 varchar 例如 04 16 93 有什么办法可以处理这个吗 这是我到目前为止所拥有的 SELECT FROM P
  • 为什么一个简单的 React 组件会渲染两次?

    我刚刚启动了一个新的 create react app 项目 并注意到 React 渲染组件两次 我的反应版本在包 json is react 16 13 1 import React useRef from react const App
  • Tomcat 未从 eclipse 启动

    我试图从 eclipse 启动 tomcat 服务器 6 0 32 不是我的应用程序 但它失败并出现错误 Server Apache Tomcat v6 0 32 at localhost failed to start 但是当我用star
  • Windows 窗体中的淡入淡出效果

    我正在尝试使用 Windows 窗体向按钮 图片框和文本框添加一些淡入淡出效果 我知道我应该为此使用 WPF 但我从未使用过它 这对我来说太复杂了 我的项目现在要高级以切换平台 我有这个 但不透明 褪色效果一点也不平滑 public voi
  • 如何在 Pandas 中用分组模式替换缺失值?

    我按照中的方法这个帖子 https stackoverflow com questions 45741879 can i replace nans with the mode of a column in a grouped data fr
  • Azure 中用于 SVG 和字体的 Express Node JS web.config

    我在 Express 网站上遇到问题 该网站使用 SVG 和字体等其他文件 本地运行应用程序时没有任何问题 但部署到 Azure 上后 SVG 和字体不再出现 创建了一个web config项目根目录下的文件
  • 如何将不同的菜单项添加到多个上下文菜单?

    我有两个按钮 每个按钮都有一个上下文菜单 但我不确定如何更改第二个菜单中的菜单项 我的代码仅显示我的第一个按钮的项目 Button Button1 Button findViewById R id Button1 registerForCo
  • 如何检测访问者使用的是HTTP/2还是SPDY?

    我正在寻找一个可以检测访问者的浏览器是否启用了 SPDY 或 HTTP 2 的脚本 就像是this https www ist http2 aktiviert de 理论上 一次nextHopProtocol降落在资源计时 https w3
  • ASP.NET MVC - HTTP 身份验证提示

    是否可以让我的应用程序在渲染视图之前要求输入用户名和密码提示 就像在 twitter API 上获取有关您帐户的信息一样 http twitter com account verify credentials xml http twitte