如何获取Http Basic Authentiction的凭据

时间:2016-06-15 06:48:32

标签: c# windows http

我正在编写一个C#应用程序,需要从仅提供Http基本身份验证的rss页面中抓取一些信息。

这似乎让我有两个选择

  • 要求用户将他们的凭据输入我的应用程序(由于该应用程序是潜在的中间人攻击者,因此存在信任问题?)

  • 获取窗口代表我的应用程序以某种方式插入凭据(此工具是否存在?)

我在SO上看到的所有示例都在应用程序中对用户名/密码进行了硬编码,或者从未指定的地方作为参数传递。我的用例是我想把这个应用程序交给那些可能不想用密码信任的人。

这通常如何处理?感谢

1 个答案:

答案 0 :(得分:0)

简答:基本身份验证无法实现。操作系统通常无法成为可信实例。

答案很长:

解决此问题的正确方法将涉及一个程序,您的应用程序将控制权交给操作系统(Windows),然后询问用户"您是否相信应用程序XY使用您的身份?"。在用户接受之后,您的应用程序将收到一个安全令牌,您可以在之后使用该令牌来发出HTTP请求以获取RSS源。问题是,相关网站只接受基本身份验证。这意味着,"安全令牌"是base64编码的用户名和密码。因此,无论如何,用户名和密码都会暴露给您的应用程序。

第二个问题是操作系统和RSS站点必须共享一个秘密(即您或其他任何不允许登录站点用户的人都无法使用的加密密钥),以使操作系统能够发出安全令牌。受RSS网站信任。

如何解决问题

代表用户在不知道密码的情况下使用第三方软件访问网络资源的默认实际示例是OAuth,例如参见Facebook login flow。 (但是,这需要相关网站/资源提供第三方访问权限。正如您的问题所示,这不适用于您的用例。)

采用的模式如下:

先决条件:您需要向RSS服务提供商注册您的应用程序,以获取应用程序ID和应用程序密钥。

  1. 您的应用程序会将用户重定向到身份提供商的登录端点。
  2. 用户接受(或拒绝)您的应用程序对其身份和数据(例如RSS流)的访问。
  3. 身份提供商重定向到您的应用
  4. 您的应用程序会收到一个令牌,该令牌可用于代表用户进行经过身份验证的请求。这可能涉及其他步骤,例如将令牌换成另一个。
  5. 替代解决方案(不回答您的问题): 有时(受保护的)RSS源可以通过特定的用户特定URL访问。当然,用户必须为您的应用程序提供该URL。