自从HttpClient 4.3以来,我一直在使用HttpClientBuilder.我正在连接到具有基本身份验证的REST服务.我正在设置凭据如下:
HttpClientBuilder builder = HttpClientBuilder.create();
// Get the client credentials
String username = Config.get(Constants.CONFIG_USERNAME);
String password = Config.get(Constants.CONFIG_PASSWORD);
// If username and password was found, inject the credentials
if (username != null && password != null)
{
CredentialsProvider provider = new BasicCredentialsProvider();
// Create the authentication scope
AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);
// Create credential pair
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password);
// Inject the credentials
provider.setCredentials(scope, credentials);
// Set the default credentials provider
builder.setDefaultCredentialsProvider(provider);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用(我正在使用的REST服务返回401).出了什么问题?
我们碰巧运行带有API的REST Web服务,要求客户端使用基本身份验证.我们用各种语言制作了一套简洁的样本,展示了如何与我们的服务进行交互.现在我正在检查服务的IIS日志,并发现以下模式经常发生:
看起来像第一个请求没有授权标头发送,然后第二个请求与正确的标头一起发送并成功.大多数情况下,日志记录包含"user-agent",这与我们在.NET示例中植入的字符串相同.
所以我认为问题仅在于.NET程序.我们的示例代码没有重现该问题,因此我假设用户以某种方式修改了代码或从头开始编写自己的代码.
我们尝试联系用户,但显然他们不想花时间研究.所以很高兴找到导致.NET程序这种行为的最可能的情况.
他们为什么要这样做?他们为什么不在第一次尝试时附上标题?
使用JQuery,我如何调用需要基本身份验证的JSONP API?
我可以以编程方式处理此问题,还是用户必须进行交互并在登录对话框中输入用户名和密码?
这应该比它证明的要简单得多!
我有一个ASP.Net Web应用程序,它使用FORMS身份验证来保护站点的一部分(即成员登录区域).
现在我只想在整个网站上放置一个传统/简单的浏览器密码弹出窗口(目录安全性),因为我们正在测试它,并且不希望任何人偶然发现整个网站并看到未完成的版本等!
在旧的IIS版本中,这曾经非常简单.
我已经"安装了基本身份验证"(因为IIS7现在没有开箱即用).但是当我启用它时,它告诉我我不能同时启用任何基于重定向的身份验证(这是我的FORMS身份验证使用的).
所以这只是愚蠢的.
必须有一种超级简单的方法来简单地在整个站点上放置一个廉价的弹出密码,而不会影响您在web.config中为实际应用程序设置的其他身份验证方法.
非常感谢..
更新 IP访问限制并不是出于以下几个原因: - 我的IP是动态的,因此不断变化. - 我不想打扰任何需要看到该网站的人,要求他们在他们的机器上调出一个控制台并计算他们的IP地址或检查他们的路由器等.其中许多是非技术性的商业用户,它会花一个小时来计算他们的IP地址. - 基本身份验证和Windows身份验证都不允许底层表单身份验证保留在下面.
我们在这里看到的是一个巨大的案例,微软试图过度设计事物,因此超级简单的古老要求不再可能或不易实现.这有可能以某种方式...任何人???
我正在尝试使用基本HTTP身份验证,并按照PHP手册页上的示例进行操作.但它对我不起作用.$_SERVER['PHP_AUTH_USER']似乎没有设置变量.当用户尝试登录时,将通过新的登录对话框提示用户.服务器正在运行PHP 5.3.3,我尝试使用谷歌浏览器和Internet Explorer.
这是我使用的简单示例:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Jonas Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'User pressed Cancel';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as you password.</p>";
}
?>
Run Code Online (Sandbox Code Playgroud)
怎么了?如何在PHP中使用基本HTTP身份验证?
php authentication server-variables http-authentication basic-authentication
使用Fiddler测试WCF REST服务时,如何获取基本身份验证握手?
我有基本授权的maven存储库的nginx.
我的build.sbt有:
credentials += Credentials("maven repository", "rep.com", "sbt", "password")
resolvers ++= Seq(
"maven repository" at "http://rep.com:8080/"
)
Run Code Online (Sandbox Code Playgroud)
但是,sbt找不到模块,因为sbt不使用基本授权.
我的nginx日志看起来像:
012/07/22 20:02:21 [error] 3338#0: *14 no user/password was provided for basic authentication, client: 8.32.39.29, server: rep.com, request: "HEAD /some/cool_2.9.1/0.1-SNAPSHOT/cool_2.9.1-0.1-SNAPSHOT.pom HTTP/1.1", host: "rep.com:8080"
Run Code Online (Sandbox Code Playgroud)
我不想通过nginx发布工件.基本身份验证只需要限制访问工件.
如何在sbt中限制访问和使用存储库?
我正在尝试使用jquery ajax进行api调用,我已经为api工作了,但我的ajax正在抛出HTTP 500
我有一个curl命令工作,看起来像这样:
curl -u "username:password" -H "Content-Type: application/json" -H "Accept: application/json" -d '{"foo":"bar"}' http://www.example.com/api
Run Code Online (Sandbox Code Playgroud)
我试过像这样的ajax,但它不起作用:
$.ajax({
url: "http://www.example.com/api",
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("username:password"));
},
type: 'POST',
dataType: 'json',
contentType: 'application/json',
data: {foo:"bar"},
success: function (data) {
alert(JSON.stringify(data));
},
error: function(){
alert("Cannot get data");
}
});
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我目前部署了一个招摇项目,但我无法添加一些基本授权.当你点击"试试看!"时是当前的.按钮您需要登录帐户才能访问结果.我有一个帐户,我想每次有人试图访问api时自动使用.Bellow是我项目的index.html:
<!DOCTYPE html>
<html>
<head>
<title>Swagger UI</title>
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/>
<script src='lib/jquery-1.8.3.js' type='text/javascript'></script>
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
<script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
<script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
<script src='lib/handlebars-1.0.rc.1.js' type='text/javascript'></script>
<script src='lib/underscore-min.js' type='text/javascript'></script>
<script src='lib/backbone-min.js' type='text/javascript'></script>
<script src='lib/swagger.js' type='text/javascript'></script>
<script src='lib/swagger-ui.js' type='text/javascript'></script>
<script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>
<script type="text/javascript">
$(function () {
window.swaggerUi = new SwaggerUi({
discoveryUrl:"https://localhost:8080/AssistAPI/api-docs.json",
apiKey:"",
dom_id:"swagger-ui-container",
supportHeaderParams: true,
supportedSubmitMethods: ['get', 'post', 'put'],
onComplete: function(swaggerApi, swaggerUi){
if(console) {
console.log("Loaded SwaggerUI")
console.log(swaggerApi);
console.log(swaggerUi);
}
$('pre code').each(function(i, e) {hljs.highlightBlock(e)});
}, …Run Code Online (Sandbox Code Playgroud) 我正在使用一个当前使用基本身份验证对话框登录系统的站点,这是您进入此处时获得的对话类型:http://www.dur.ac.uk/vm.boatclub/password/index .php 我没有设置这个系统,也不能轻易/快速地解决它,但它确实有效.但问题是,对话框对于告诉您必须使用哪些登录信息(即用户名和密码组合)并不是很有帮助,所以我想用表单替换它.我一直在想这不可能,但我想问一下,以便找出答案.
是否可以设置一个HTML表单,将数据发送到服务器,使其以与使用此对话框相同的方式接受它?或者,是否可以设置一个PHP脚本,该脚本将采用普通表单数据并以某种方式将其传递给服务器,以便它登录?
编辑:在被告知这是基本身份验证后,我四处寻找并找到了一种有效的方法并让用户持续登录.但是,这在Internet Explorer中不起作用.解决方案只是将用户重定向到: http:// username:password@www.dur.ac.uk/vm.boatclub/password/index.php 但是由于大约3年前的网络钓鱼使用,Internet Explorer将其删除了.有没有办法使用JavaScript来让浏览器以这种方式访问该网站?或者我只需要改变我的用户界面?