我们有一个在Apache上运行的网站,访问该网站有许多通过HTTP基本身份验证保护的静态页面.
我使用Django内置的用户管理支持,用Django编写了网站的新部分.
我遇到的问题是用户必须通过HTTP Basic身份验证登录一次,然后再使用Django登录表单.这对用户来说既笨拙又令人困惑.
我想知道是否有人找到了让Django使用HTTP Basic身份验证信息登录用户的方法.
我不希望将密码传递给Django,而是如果用户dave已经通过Apache验证,那么它们也应该自动登录到Django dave.
(一种选择是让Apache和Django共享一个用户存储来确保常见的用户名和密码,但这仍然会涉及两个登录提示,这是我试图避免的.)
我试图暗示使用JMeter的Web服务的基本身份验证过程.但每次它抛出错误401:未经授权.我尝试使用HTTP标头管理器向其添加标头授权和值.它仍然无效.我也尝试过使用HTTP授权管理器.仍然没有运气.有人可以帮忙吗
我正在尝试访问受密码保护的网站.它没有使用基本身份验证(即使在firefox中弹出相同的用户/传递框),因为响应头是WWW-Authenticate: Negotiate.
我想通过发送正确的标头来自动化登录过程.
在基本的,你会使用类似的东西:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)
我会用什么来进行谈判?
我正在尝试使用Sauce Labs为我们的登台服务器设置一些selenium测试.它在一个基本的http auth后面,所以理论上我可以将selenium URL设置为http://user:password@www.stagesite.com.但是,密码包含"@",导致各种各样的问题,如您所想.我尝试用反斜杠逃避它,但是我没有做任何事情.
所以,
有没有另一种方法来使用selenium进行http身份验证,即不通过URL.要么,
有没有办法使用基于URL的身份验证,但不知何故告诉浏览器"@"是密码的一部分?
我正在尝试从Adobe AIR应用程序中请求需要基本授权标头的HTTP资源.我尝试手动将标头添加到请求中,以及使用setRemoteCredentials()方法设置它们,但无济于事.
这是代码:
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function authAndSend(service:HTTPService):void
{
service.setRemoteCredentials('someusername', 'somepassword');
service.send();
}
private function resultHandler(event:ResultEvent):void
{
apiResult.text = event.result.toString();
}
private function resultFailed(event:FaultEvent):void
{
apiResult.text = event.fault.toString();
}
]]>
</mx:Script>
<mx:HTTPService id="apiService"
url="https://mywebservice.com/someFileThatRequiresBasicAuth.xml"
resultFormat="text"
result="resultHandler(event)"
fault="resultFailed(event)" />
<mx:Button id="apiButton"
label="Test API Command"
click="authAndSend(apiService)" />
<mx:TextArea id="apiResult" />
Run Code Online (Sandbox Code Playgroud)
但是,仍然会弹出标准的基本身份验证对话框,提示用户输入用户名和密码.我有一种感觉,我没有以正确的方式做到这一点,但我能找到的所有信息(Flex文档,博客,谷歌等)要么没有用,要么太模糊无法提供帮助.
任何黑魔法,哦Flex大师?谢谢.
编辑:将setRemoteCredentials()更改为setCredentials()会产生以下ActionScript错误:
[MessagingError message='Authentication not supported on DirectHTTPChannel (no proxy).']
Run Code Online (Sandbox Code Playgroud)
编辑:经过Adobe的一些关注后,问题解决了.有关完整说明,请参阅下面的帖子.此代码适用于任意长度的HTTP身份验证标头.
import mx.utils.Base64Encoder;
private function authAndSend(service:HTTPService):void
{
var encoder:Base64Encoder = new Base64Encoder();
encoder.insertNewLines = false; …Run Code Online (Sandbox Code Playgroud) 我有一个基于REST的服务器,我试图使用JQuery进行通信.XML和JSON都可用作响应格式,因此我使用的是JSON.
连接都是SSL,因此HTTP基本身份验证是我们选择的授权方法,我们对其他前端没有任何问题(原始Javascript,Silverlight等...)
现在我试图将一些东西与JQuery放在一起,并使用HTTP基本身份验证遇到无穷无尽的问题.
我已经仔细研究了之前的许多问题,其中大部分都有解决方案似乎没有实际工作或将整个问题归咎于跨域访问,我已经在基本的Javascript测试中克服了这些问题.响应始终为Access-Control-Allow-Origin请求中提供的Origin头提供set,这可以在我的测试的响应中看到.
在基本的javascript中,这个完整的调用非常简单:
req.open('GET', 'https://researchdev-vm:8111/card', true, 'test', 'testpassword');
Run Code Online (Sandbox Code Playgroud)
JQuery尝试这是相当标准的:
$.ajax({
username: 'test',
password: 'testpassword',
url: 'https://researchdev-vm:8111/card',
type: 'GET',
dataType: 'json',
crossDomain: true,
/*data: { username: 'test', password: 'testpassword' },*/
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization",
//"Basic " + encodeBase64(username + ":" + password));
"Basic AAAAAAAAAAAAAAAAAAA=");
},
sucess: function(result) {
out('done');
}
});
Run Code Online (Sandbox Code Playgroud)
实际上似乎提供身份验证的唯一方法是在beforeSend()函数中直接插入Base64编码数据.如果不包括在内,则无法取得任何进展.用户名和密码属性似乎完全被忽略.
通过beforeSend()提供的行为,GET调用获得包含数据的肯定响应.但是,因为这是一个跨站点调用,所以OPTIONS调用在GET调用之前执行并始终失败,因为它没有使用,beforeSend()因此由于身份验证失败而获得401响应.
有没有更好的方法来完成应该是一个非常微不足道的电话?OPTIONS请求不使用beforeSend()函数处理的事实应该被视为错误吗?有没有办法完全禁用OPTIONS检查?不可能使这个调用不是跨站点,因为Javascript似乎甚至考虑与"跨站点"在同一台机器上的不同端口号.
javascript ajax jquery http-authentication basic-authentication
我正在使用Retrofit来做一个基本的POST请求,我正在为请求提供一个基本的@Body.
@POST("/rest/v1/auth/login")
LoginResponse login(@Body LoginRequest loginRequest);
Run Code Online (Sandbox Code Playgroud)
当我为Retrofit构建界面时,我正在提供我自己的自定义OkHttpClient,而我正在做的就是添加我自己的自定义身份验证:
@Provides
@Singleton
public Client providesClient() {
OkHttpClient httpClient = new OkHttpClient();
httpClient.setAuthenticator(new OkAuthenticator() {
@Override
public Credential authenticate(Proxy proxy, URL url, List<Challenge> challenges) throws IOException {
return getCredential();
}
@Override
public Credential authenticateProxy(Proxy proxy, URL url, List<Challenge> challenges) throws IOException {
return getCredential();
}
});
return new OkClient(httpClient);
}
Run Code Online (Sandbox Code Playgroud)
当我使用OKHttp直接发送请求时,以及其他GET请求进行改造,但是当我使用改造来执行POST请求时,我会收到以下错误:
Caused by: java.net.HttpRetryException: Cannot retry streamed HTTP body
at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:324)
at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:508)
at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:94)
at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:49)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:357)
at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:282)
at …Run Code Online (Sandbox Code Playgroud) function ParseUrl($URL)
{
$crl = curl_init();
curl_setopt ($crl, CURLOPT_URL, $URL);
curl_setopt ($crl, CURLOPT_PORT, 8086);
curl_setopt ($crl, CURLOPT_USERPWD, "admin:pass");
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, 5);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;
}
echo ParseUrl('http://xxx.me/serverinfo');
Run Code Online (Sandbox Code Playgroud)
上面的代码根本不返回任何内容 我试图通过curl获取的页面使用http身份验证.
我错过了一些简单或什么?
我是ruby on rails的新手,但我想将我的SQlite数据库中的数据从我的iphone应用程序发送到rails web应用程序.就像"同步"服务一样.
我正在使用设计进行Web应用程序的身份验证.我启用了基本的HTTP身份验证,我可以卷入xml或json数据的网站.当我将帖子标题设置为JSON并使用用户名和密码时,我也可以将数据上传到网站.
这就是我被困的地方.
1)如何在第一次登录后让用户登录?每次我向网站发送数据时都使用http身份验证吗?我已阅读有关令牌身份验证但我不确定如何使用它.
2)我可以使用正确的用户名和密码将JSON数据发布到http:// localhost:3000/example之类的内容.但是,如果用户名和passowrd不正确,它将返回HTML内容.我是否必须写一些返回有关登录成功/ fialure的json数据的内容?
3)在我的iPhone应用程序和我的网络应用程序之间进行通信.我是否正确在Web应用程序端编写RESTful API?我需要使用有效资源吗?
我真的很难全面了解这一切是如何运作的.谢谢!
我已阅读RFC 2617,如果支持多种方案,则无法在那里或其他任何地方找到分隔符.例如,假设支持Basic和Digest.我明白这可能是这样的:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
WWW-Authenticate: Digest
Run Code Online (Sandbox Code Playgroud)
但我也读到两者都可以列为一行,但没有人展示过一个例子或描述要使用的分隔符.我已经看到警告可以在单个方案中使用逗号:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
Run Code Online (Sandbox Code Playgroud)
我还读到如果在一个方案中使用逗号,那么其他方案必须放在不同的行上.所以我想在上面的例子中,如果我们添加Basic,它会显示如下:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
WWW-Authenticate: Basic
Run Code Online (Sandbox Code Playgroud)
这很简单.但现在假设你只有一条线
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Scheme stuff, morestuff, more stuff
Run Code Online (Sandbox Code Playgroud)
那是什么?这是一个以逗号分隔的方案列表,还是一个方案,只有一些参数?