我有2页:xyz.com/a
和xyz.com/b
.xyz.com/b
当且仅当我xyz.com/a
首先登录时,我才能访问.如果xyz.com/b
不通过另一个访问,我只是通过浏览器获得访问被拒绝(没有重定向登录).登录后xyz.com/a
,我可以访问另一个.
我的问题是使用curl命令执行此操作.我可以成功登录xyz.com/a
使用curl,但是然后尝试xyx.com/b
我拒绝访问.
我使用以下内容:
curl --user user:pass https://xyz.com/a #works ok
curl https://xyz.com/b #doesn't work
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用带有和没有用户/密码部分的第二行,但仍然无法正常工作.两个页面都使用相同的CA,因此这不是问题.有什么建议?谢谢
看起来使用Express v3实现基本的HTTP身份验证是微不足道的:
app.use(express.basicAuth('username', 'password'));
Run Code Online (Sandbox Code Playgroud)
版本4(我使用4.2)删除了basicAuth
中间件,所以我有点卡住了.我有以下代码,但它不会导致浏览器提示用户提供凭据,这是我想要的(以及我想象的旧方法):
app.use(function(req, res, next) {
var user = auth(req);
if (user === undefined || user['name'] !== 'username' || user['pass'] !== 'password') {
res.writeHead(401, 'Access invalid for user', {'Content-Type' : 'text/plain'});
res.end('Invalid credentials');
} else {
next();
}
});
Run Code Online (Sandbox Code Playgroud) 我的Web应用程序有一个登录页面,通过AJAX调用提交身份验证凭据.如果用户输入正确的用户名和密码,一切都很好,但如果没有,则会发生以下情况:
这一切都很好,直到第3步.我不希望弹出对话框,我想要在我的AJAX回调函数中处理401响应.(例如,通过在登录页面上显示错误消息.)我希望用户重新输入他们的用户名和密码,当然,但我希望他们看到我友好,安心的登录表单,而不是浏览器的丑陋,默认验证对话框.
顺便说一句,我无法控制服务器,所以让它返回自定义状态代码(即401以外的东西)不是一个选项.
有什么办法可以抑制身份验证对话框吗?特别是,我可以在Firefox 2或更高版本中禁止"需要验证"对话框吗?有没有办法在IE 6及更高版本中禁止连接到[主机]对话框?
编辑
作者的其他信息(9月18日):
我应该补充说,浏览器的身份验证对话框弹出的真正问题是它给用户提供的信息不足.
用户刚刚通过登录页面上的表单输入了用户名和密码,他认为他已经正确输入了这些用户名和密码,并且他点击了提交按钮或按回车键.他的期望是,他将被带到下一页,或者可能被告知他输入的信息不正确,应该再试一次.但是,他会出现一个意外的对话框.
对话是没有的,他只是一个事实确认没有输入用户名和密码.它没有明确说明存在问题,他应该再试一次.相反,该对话框向用户显示诸如"网站说:' [领域] '之类的神秘信息." 凡[境界]是,只有一个程序员可以爱很短的领域名称.
Web broswer设计师注意到:如果对话框本身更加用户友好,没有人会问如何抑制身份验证对话框.我正在登录表单的全部原因是我们的产品管理团队正确地认为浏览器的身份验证对话框太糟糕了.
我正在检查类org.apache.http.auth.如果有人有更多的参考或例子?
这里我的应用程序控制器文件中的http基本身份验证(application_controller.rb)
before_filter :authenticate
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "username" && password == "password"
end
end
Run Code Online (Sandbox Code Playgroud)
和我的家庭控制器的索引操作的默认测试(spec/controllers/home_controller_spec.rb)
require 'spec_helper'
describe HomeController do
describe "GET 'index'" do
it "should be successful" do
get 'index'
response.should be_success
end
end
Run Code Online (Sandbox Code Playgroud)
由于身份验证方法,测试无法运行.我可以评论"before_filter:authenticate"来运行它们,但我想知道是否有办法让它们使用该方法.
谢谢!
首先,我们将安全考虑因素排除在外.我在Apache下使用简单的身份验证,仅用于一次性内部使用,非互联网连接的局域网,php web应用程序.
如何在PHP中获取HTTP身份验证的用户名?
对于我的一些Django视图,我创建了一个执行基本HTTP访问身份验证的装饰器.但是,在Django中编写测试用例时,我花了一些时间来研究如何对视图进行身份验证.这就是我做到的.我希望有人觉得这很有用.
python django unit-testing http-authentication django-testing
在AFNetworking 2.0上找不到AFHTTPClient,使用:
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com]];
[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];
Run Code Online (Sandbox Code Playgroud)
如何在AFNetworking 2.0上进行管理?
由于某种原因,没有任何代码
if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']))
{
// When the above is set, the code that is here will execute of course
}
Run Code Online (Sandbox Code Playgroud)
正在为我执行.当我输入正确的用户名和密码时,会再次弹出授权提示框.如果两个字段都正确并且我按下输入,那么这两个字段都不会被设置吗?但由于某些原因并非如此.我能做错什么?谢谢.