我正在尝试连接到需要身份验证的Rails应用程序服务器.我在桌面应用程序上使用Jakarta HTTP Client for Java,它可以100%运行.但是当在Android模拟器上执行完全相同的代码时,我得到一个IOException.
这是代码,如果有人可以帮我弄清楚为什么它会抛出IOException,我将不胜感激!
private boolean login()
{
String username, password;
DefaultHttpClient client;
AuthScope scope;
Credentials myCredentials;
CredentialsProvider provider;
HttpEntity entity;
String line;
BufferedReader reader;
InputStream instream;
//Declare & Create the HTTP Client
client = new DefaultHttpClient();
//Create our AuthScope
scope = new AuthScope("10.19.9.33", 3000);
username = "admin"
password = "pass"
//Set Credentials
myCredentials = new UsernamePasswordCredentials( username, password );
//Set Provider
provider = new BasicCredentialsProvider();
provider.setCredentials(scope, myCredentials);
//Set Credentials
client.setCredentialsProvider( provider );
String url = "http://10.19.9.33:3000/users/show/2";
HttpGet …Run Code Online (Sandbox Code Playgroud) 当你事先知道请求需要它时,我已经看到许多 问题(并回答)如何提供凭证.
当我加载请求身份验证质询的站点时(使用HTTP 401响应),我UIWebViewDelegate只收到以下回调:webView:shouldStartLoadWithRequest:navigationType:有时webViewDidStartLoad:(webViewDidStartLoad:如果我直接导航到该站点,似乎会被调用,如果我',它似乎不会被调用m重定向那里).
通过覆盖-[NSObject respondsToSelector:],UIWebViewDelegate接收一些调用uiWebView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:和uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource:,这可能是有用的,但当然这些是私有API,可能会让我的应用程序被拒绝.
我用嵌入式UIWebViews 测试了一些不同的主流应用程序.到目前为止,只有Chrome正确处理这些身份验证挑战.我甚至已经设置了自己的服务器并验证了Chrome只有POST一次.Twitter和Tweetbot失败只是永远显示加载屏幕,就像我的.
除了使用第二个推测之外,还有另一种(可能是非常hacky)方法来检测这些身份验证挑战NSURLConnection吗?如果我提出POST请求,那将POST是一切,这是不好的.
我需要向流媒体服务器验证我的 RTSP 流,这是挑战:
RTSP/1.0 401 Unauthorized
WWW-Authenticate: Digest realm="Streaming Server", nonce="76bfe6986d3e766424de9bd6e7d3ccc1"
Session: 1845562184;timeout=60
Cseq: 1
...
Run Code Online (Sandbox Code Playgroud)
Wirecast 设法使用这些设置成功进行身份验证:
Host name : 192.168.33.9:1935/live/my_stream.sdp
location : live/my_stream.sdp
username : user
password : test
Run Code Online (Sandbox Code Playgroud)
它的响应是:e1dff363b9763df0c7615429af79715c
因此,根据维基百科,我尝试使用以下方法进行身份验证:
//H(data) = MD5(data)
//KD(secret, data) = H(secret:data)
//A1 = username:realm:password
//A2 = http-method:uri
//response = KD( H(A1), nonce:H(A2))
HA1 = md5("user:Streaming Server:test")
HA2 = md5("POST:live/my_stream.sdp")
RESPONSE = md5(HA1+":"+nonce+":"+HA2)
Run Code Online (Sandbox Code Playgroud)
但是使用此代码,我得到响应“0963c3a7b1481523f809e6affa7e792e”和 401 Unauthorized
你能帮助我吗 ?
authentication streaming http-authentication rtsp digest-authentication
使用 cURL,我可以--location-trusted允许将名称+密码发送到站点可能重定向到的所有主机(http://curl.haxx.se/docs/manpage.html#--location-trusted)。
我可以在 Python 中使用 requests 库做类似的事情吗?
我正在研究让IIS在J2EE服务器(JBoss)上执行的应用程序中进行身份验证.有没有办法让IIS作为反向代理工作,并传播代理应用程序(JBoss)用户的用户名和/或角色.如果可能的话,我还需要什么样的IIS版本?我有IIS的许可,所以我想在IIS中这样做,但除此之外我更喜欢开源.
谢谢!
托马斯
我想设置应用程序引擎开发服务器,以便其他人可以进行预览.
在此之前我真正想做的是为该网站提供的任何网址启用http身份验证.我不希望任何人在没有通过该阶段的情况下访问该服务.我当然可以在我正在开发的应用程序中构建自己的http身份验证,但这不是一个完美的解决方案,因为我在部署应用程序时不需要该功能.
有什么好办法可以解决吗?
场景:服务器为许多不同(但经过身份验证的)客户端提供相同的Webstart Applet.每个Applet都必须"知道"它所在的客户端.因此,服务器必须能够将一些参数传递给客户端,然后由该客户端上运行的Applet读取.
编辑:也许Webstart Applet是一个错误的术语.我的意思是只是一个Webstart客户端应用程序.
我需要针对HTTP服务器执行抢先式基本身份验证,即立即进行身份验证,而无需等待401响应.这可以用httplib2完成吗?
编辑:
我通过在请求中添加Authorization标头解决了这个问题,如接受的答案所示:
headers["Authorization"] = "Basic {0}".format(
base64.b64encode("{0}:{1}".format(username, password)))
Run Code Online (Sandbox Code Playgroud) 我正在从CakePHP 1.3迁移到CakePHP 2.2.2,并希望将Basic Http身份验证用于简单的管理区域.我只是无法使它工作,我想我在文档中理解了一些错误.
从我理解的文档中我必须做类似的事情
public $components = array(
'Auth' => array(
'authenticate' => array(
'Basic'
),
'authError' => 'You may not access this area.',
'authorize' => array('Controller')
)
);
Run Code Online (Sandbox Code Playgroud)
据我所知,我需要扩展BaseAuthenticate组件以返回有效的用户日期,但即使使用上述配置,我也希望浏览器的Http Access对话框能够在弹出窗口中打开.但是没有这样的事情发生,相反,我被重定向到/ users/login,这是不存在的.为什么我需要Http Access的登录视图?我很迷惑.
cakephp http-authentication cakephp-2.0 cakephp-2.1 cakephp-2.2
我试图限制端口9200上对elasticsearch的直接访问,但允许Nginx代理传递给它.
这是我目前的配置:
server {
listen 80;
return 301;
}
server {
listen *:5001;
location / {
auth_basic "Restricted";
auth_basic_user_file /var/data/nginx-elastic/.htpasswd;
proxy_pass http://127.0.0.1:9200;
proxy_read_timeout 90;
}
}
Run Code Online (Sandbox Code Playgroud)
这几乎与我想要的一样.我可以在端口5001上访问我的服务器以访问elasticsearch,并且必须按预期输入凭据.
但是,我仍然可以点击:9200并避免HTTP身份验证,这会失败.如何在不限制nginx的情况下阻止访问此端口?我试过这个:
server {
listen *:9200;
return 404;
}
Run Code Online (Sandbox Code Playgroud)
但我得到:
nginx: [emerg] bind() to 0.0.0.0:9200 failed (98: Address already in use)
Run Code Online (Sandbox Code Playgroud)
因为它与elasticsearch冲突.
必须有办法做到这一点!但我想不出来.
编辑:
我根据评论编辑并总结了问题:
我想锁定<serverip>:9200,基本上只允许通过端口5001(在HTTP Auth后面)进行访问.5001应代理到127.0.0.1:9200,以便只能通过5001访问elasticsearch.所有其他访问应该是404(或301等).