如何将用户重定向到其他服务器并包含HTTP基本身份验证凭据?

时间:2011-06-16 15:42:02

标签: c# javascript http basic-authentication

我有一个Web应用程序(C# - ASP.net)需要使用HTTP基本身份验证将用户传递到远程Apache服务器上的页面。我需要能够将用户名和密码传递给此服务器,以允许我的应用程序进行身份验证的用户无缝使用其他应用程序,而不会被提示输入他没有的凭据。切换应该是安全的,因为只要用户名和密码不在客户端脚本中,两个系统都需要SSL。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

基本身份验证详细信息在客户端名为“Authorization”的请求标头中进行编码。标头包含base64编码的结果“username:password”。

e.g。阿拉丁:开芝麻= Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

有关Basic Access Auth wikipedia page的详细信息。

对于基本身份验证,需要将授权标头添加到每个请求中。通常,在用户将凭据输入浏览器显示的对话框后,浏览器将处理此问题。如果您想避免让您的用户输入这些凭据,那么您的ASP.net服务器将需要位于用户和Apache服务器之间(充当反向代理),将auth标头添加到它代表的每个请求中。你的用户。

无法简单地访问您的服务器一次,并为其添加“令牌”,然后重定向到Apache服务器。如果您使用表单/ cookie进行身份验证并且您的服务器在同一个域(例如asp.domain.com& apache.domain.com)中向用户显示,则可以使用此方法,然后可以设置auth cookie父域(例如domain.com)和共享 - 请参阅Forms Authentication across sub-domains

假设Apache服务器上的基本身份验证方案不是您可以轻松更改的,那么reverse proxy似乎是最佳选择。在反向代理代码中,HttpWebRequest是向apache服务器创建每个请求并向其添加其他身份验证标头的方法。

.net将使用以下内容处理代理请求中的凭据编码:

RemoteServer remoteServer = new RemoteServer(httpContext);
HttpWebRequest request = remoteServer.GetRequest();
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(UserName, SecurelyStoredPassword);

答案 1 :(得分:0)

尝试使用网址格式https://username:password@example.com

答案 2 :(得分:0)

只有我能想到的其他事情 - 如果页面没有强行解决,在一个框架中加载他们的网站页面,发送数据+控件,通过javascript,所以它发送登录等等。可能是可行的。