如何将用户重定向到不同的服务器并包括HTTP基本身份验证凭据

本文关键字:HTTP 包括 身份验证 服务器 用户 重定向 | 更新日期: 2023-09-27 17:59:23

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

如何将用户重定向到不同的服务器并包括HTTP基本身份验证凭据

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

例如阿拉丁:打开芝麻=Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

有关基本访问权限验证维基百科页面的更多详细信息。

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

不可能简单地访问服务器一次,然后将"令牌"添加到请求中,然后重定向到apache服务器。如果您使用表单/cookie进行身份验证,并且您的服务器在同一域(例如asp.domain.com&apache.domain.com)中向用户显示自己,则可以在父域(例如domain.com)上设置并共享身份验证cookie-请参阅跨子域的表单身份验证。

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

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

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

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

我能想到的唯一一件事是,如果页面不强行退出,可以在框架中加载他们网站的页面,通过javascript向其发送数据+控件,这样它就可以发送登录信息,等等。这可能是可行的。