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

标签 c# javascript http basic-authentication

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

最佳答案

基本身份验证详细信息编码在来自客户端的名为“授权”的请求 header 中。 header包含“username:password”的base64编码结果。

例如Aladdin:open sesame = 授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Basic Access Auth wikipedia page 上有更多详细信息.

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

简单地访问您的服务器一次并为它添加一个“ token ”到请求然后重定向到 apache 服务器是不可能的。如果您使用表单/cookie 进行身份验证并且您的服务器将自己呈现给同一域中的用户(例如 asp.domain.com 和 apache.domain.com),则可以使用这种方法,然后可以将 auth cookie 设置在父域(例如 domain.com)和共享 - 参见 Forms Authentication across sub-domains .

假设 Apache 服务器上的基本身份验证方案不是您可以轻易更改的东西,它看起来像 reverse proxy是最好的选择。在反向代理代码中,HttpWebRequest 是创建对 apache 服务器的每个请求并向其添加额外的身份验证 header 的方法。

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

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

关于c# - 如何将用户重定向到不同的服务器并包含 HTTP 基本身份验证凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374622/

相关文章:

c# - 如何使用Elasticsearch索引多字段元素

javascript - 平滑网格折叠时 resizeCanvas 不起作用

javascript - 将 zip 文件流转换为磁盘上的文件

java - 如何获取本地主机:8080 from full URL

c# - 如何使用拇指使 WPF 弹出窗口可拖动?

c# - 为什么添加 DoubleStructs 比添加 double 慢得多?

javascript - 编译 ejs 时 <filepath> 中出现意外的 "/"

javascript - 检查表 tr 是否有类,然后在悬停事件上删除并添加新类

apache - 构建位于反向代理后面的应用程序时处理URI的策略

c# - 如何判断什么/谁在阻止对象被垃圾收集 (C#)