我有一个Flex文件上传脚本,它使用URLRequest将文件上传到服务器.我想添加对http身份验证(服务器上受密码保护的目录)的支持,但我不知道如何实现这一点 - 我假设我需要以某种方式扩展类,但是如何让我有点迷失.
我试图修改以下内容(用URLRequest替换HTTPService),但这不起作用.
private function authAndSend(service:HTTPService):void{
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("someusername:somepassword");
service.headers = {Authorization:"Basic " + encoder.toString()};
service.send();
}
Run Code Online (Sandbox Code Playgroud)
我应该指出,在ActionScript/Flex方面我并不知情,尽管我已经设法成功地修改了上传脚本.
[编辑] - 根据下面的答案,这里是我的进度的更新,虽然我仍然无法让这个工作:
谢谢您的帮助.我试图实现你的代码,但我没有运气.
我在处理HTTP身份验证位置时遇到的一般行为是,IE7一切都很好,但在Firefox中,当我尝试将文件上传到服务器时,它会显示一个HTTP身份验证提示 - 即使给出了正确的详细信息,也只是停顿上传过程.
我相信IE7正常的原因在于浏览器和Flash组件共享的会话/身份验证信息 - 但是,在Firefox中并非如此,我遇到了上述行为.
这是我更新的上传功能,包含您的更改:
private function pergress():void
{
if (fileCollection.length == 0)
{
var urlString:String = "upload_process.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&filetotal="+fileTotal;
if (ExternalInterface.available)
{
ExternalInterface.call("uploadComplete", urlString);
}
}
if (fileCollection.length > 0)
{
fileTotal++;
var urlRequest:URLRequest = new URLRequest("upload_file.php?folder="+folderId+"&type="+uploadType+"&feid="+formElementId+"&obfuscate="+obfuscateHash+"&sessidpass="+sessionPass);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = new URLVariables("name=Bryn+Jones");
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode("testuser:testpass");
var credsHeader:URLRequestHeader = …Run Code Online (Sandbox Code Playgroud) apache-flex base64 actionscript urlrequest http-authentication
我将Apache配置为代理服务器时遇到问题.目前,我通过端口80使用domain.net访问MS Sharepoint安装.在能够使用它之前,我必须输入用户名和密码.到现在为止还挺好.
现在我希望能够通过子域web.domain.net访问网站.托管此站点的服务器在内部网络中的另一台计算机上运行.我想出的解决方案是将端口80重定向到运行apache的计算机以服务新网站,并将对sharepoint的任何请求代理到sharepoint服务器.
到目前为止,我启用了httpd.conf中的所有代理模块,并添加了一个虚拟主机. 编辑:第一次回复后更新配置.
<VirtualHost *:80>
ServerName domain.net
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyErrorOverride On
ProxyPass / http://sharepoint/
ProxyPassReverse / http://sharepoint/
<Location />
AuthType basic
AuthBasicAuthoritative Off
SetEnv proxy-chain-auth On
Order allow,deny
Allow from all
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这有效.输入domain.net会将我转发给sharepoint服务器.现在出现了实际问题.sharepoint要求我提供我的凭据.但是当我输入它们时,登录表单会一直弹出,因为我输入了不正确的用户名和密码.
似乎凭证不会通过代理转发到sharepoint.
你能给我任何建议如何解决这个问题吗?是否可以使用mod_proxy执行此操作?
我有一个标准的HTML登录页面,我宁愿使用它而不是浏览器提供的标准HTTP身份验证弹出窗口.今天,我在登录后使用会话cookie跟踪会话,但我希望无状态并且每次都通过HTTP身份验证.我正在尝试的Web服务已经支持这一点,所以这是一个仅限浏览器的问题.
在jQuery中添加身份验证凭据是微不足道的,但我不知道如何保留它们.如果您从登录页面(jsp)转到主页(另一个jsp),您显然不会保留登录页面中的用户名和密码字段.我知道如果您从弹出窗口输入它们,某些浏览器将存储您的HTTP身份验证凭据,但我不知道它们是否在使用XHRRequest时被存储.如果他们这样做,浏览器之间是否有很多一致性?
此外,用户也需要能够"退出"应用程序.如果浏览器存储身份验证凭据,是否有办法使用JavaScript清除它们.
我觉得我不能成为第一个试图解决这个问题的人.是否有一些jQuery插件或已经处理过的东西?或者根本不可能做我想做的事情?
ajax jquery xmlhttprequest http-authentication stateless-session
我在Amazon S3上托管了一个静态HTML站点.
理想情况下,我希望能够以与.htaccess/.htpasswd文件相同的方式限制对暂存站点的访问.
我知道存储桶策略可以用来限制访问(我已经使用了一个来公开访问存储桶内容),但是我看不到任何限制访问的方法.
在理想的情况下,我想要一个身份验证提示 - 但将一个令牌附加到URL也可以.
我使用JAX-RS,Jersey和Grizzly编写了一个简单的REST服务器.这就是我启动服务器的方式:
URI baseUri = UriBuilder.fromUri("http://localhost/api")
.port(8081)
.build();
ResourceConfig rc = new PackagesResourceConfig("se.aioobe.resources");
HttpServer httpServer = GrizzlyServerFactory.createHttpServer(baseUri, rc);
Run Code Online (Sandbox Code Playgroud)
现在我需要使用基本HTTP身份验证来保护资源,我无法弄清楚如何执行此操作.
我可以从Grizzly切换到例如Jetty,如果它更容易让它工作,但我真的很重视Grizzly提供的简单配置/启动.
我已经阅读了很多教程.他们都提到了web.xml,但在我目前的配置中我没有.(我是否需要添加一个用于HTTP身份验证?)我发现了以下 问题,它们都没有任何帮助:-(
(此时不需要SSL.此时的身份验证只是为了防止公众在我们的测试版中偷看.)
TL; DR:如何向Jersey/Grizzly webapp添加基本HTTP身份验证?
我正在做一些简单的HTTP身份验证,我得到了一个
java.lang.IllegalArgumentException: Illegal character(s) in message header value: Basic OGU0ZTc5ODBk(...trimmed from 76 chars...)
(...more password data...)
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我有一个非常长的用户名和密码,编码器包含\n76个字符.有什么方法可以解决这个问题吗?该URL仅支持HTTP Basic Auth.
这是我的代码:
private class UserPassAuthenticator extends Authenticator {
String user;
String pass;
public UserPassAuthenticator(String user, String pass) {
this.user = user;
this.pass = pass;
}
// This method is called when a password-protected URL is accessed
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pass.toCharArray());
}
}
private String fetch(StoreAccount account, String path) throws IOException {
Authenticator.setDefault(new UserPassAuthenticator(account.getCredentials().getLogin(), account.getCredentials().getPassword()));
URL url …Run Code Online (Sandbox Code Playgroud) 我已经用Jersey Server 编写了一个REST Web服务(完全是摇滚!).我现在正在使用Jersey Client开发它的客户端部分.
在服务器端,我选择了DIGEST身份验证,因为我个人认为BASIC身份验证是一种异端,应该在我们的头脑中标记为"已弃用".
不幸的是,我在客户端看不到任何Digest身份验证的支持.对于BASIC身份验证,可以执行以下操作:
client.addFilter(
new HTTPBasicAuthFilter(
user,
password));
Run Code Online (Sandbox Code Playgroud)
但我看不到" HTTPDigestAuthFilter "对应物.我错过了什么吗?
谢谢你的帮助,
拉斐尔
这是我第一次使用证书身份验证.商业合作伙伴公开两种服务,XML Web服务和HTTP服务.我必须使用.NET客户端访问它们.
我试过了什么
0.设置环境
我已使用certmgr.exe在本地计算机(win 7 professional)中安装了SSLCACertificates(在root和两个中间)和客户端证书.
1.对于Web服务
这是代码:
OrderWSService proxy = new OrderWSService();
string CertFile = "ClientCert_DER.cer";
proxy.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile));
orderTrackingTO ot = new orderTrackingTO() { order_id = "80", tracking_id = "82", status = stateOrderType.IN_PREPARATION };
resultResponseTO res = proxy.insertOrderTracking(ot);
Run Code Online (Sandbox Code Playgroud)
最后声明中报告的例外:The request failed with an empty response.
2.对于HTTP接口
这是代码:
string PostData = "MyPostData";
//setting the request
HttpWebRequest req;
req = (HttpWebRequest)HttpWebRequest.Create(url);
req.UserAgent = "MyUserAgent";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile, "MyPassword"));
//setting …Run Code Online (Sandbox Code Playgroud) c# authentication web-services certificate http-authentication
在过去的几周里,我一直在努力使用Angular,Node,TDD,Heroku,Amazon S3等.试图更好地了解如何构建具有坚固后端的完全可扩展的SPA,与grunt,bower,避风港合作还没有使用Jasmine在TDD中浸泡我的脚趾,虽然我知道如何通过Karma进行测试,这可能是我的下一步.
有一件事是肯定的:这是很多信息
首先,我玩了
并阅读了许多帖子等.
我发现NG Boilerplate是最符合逻辑的结构(就我对这些事情的理解而言).
作为一个演示项目(从一些非常小的东西演变而来)我想使用以下方法制作单页CRUD应用程序:
现在我想使用Angular-Apps的(https://github.com/angular-app/angular-app)服务器作为我的NGBoilerplate kickstarter的后端
我想知道如何:
我脑子里有一个很大的模糊:).
我很抱歉已经有类似的问题,但我想更广泛地问它.
有没有办法在客户端确定Web应用程序,如果请求资源将返回401状态代码并导致浏览器显示丑陋的身份验证对话框?
或者,是否有任何方法可以在Flash中加载mp3音频资源,在401状态代码的情况下无法无形地失败,而不是让浏览器显示丑陋的对话框?
如果我设置了URLRequest对象的"authenticate"属性,但此属性不在Flash运行时中,Adobe Air运行时将禁止身份验证.任何适用于客户端的解决方案都可以.XMLHttpRequest不太可能有效,因为问题中的资源将位于不同的域中.
隐藏失败非常重要,因为应用程序将包含许多要尝试的音频资源的列表,当有许多其他可用时,打扰用户尝试对其进行身份验证是没有意义的.解决方案在客户端上运行非常重要,因为有问题的mp3来自我控制之外的各种服务器.
java ×3
javascript ×2
jersey ×2
actionscript ×1
ajax ×1
amazon-s3 ×1
angularjs ×1
apache ×1
apache-flex ×1
base64 ×1
c# ×1
certificate ×1
credentials ×1
flash ×1
grizzly ×1
html ×1
http ×1
jax-rs ×1
jquery ×1
node.js ×1
proxy ×1
suppress ×1
url ×1
urlrequest ×1
web-services ×1