【问题标题】:How to authenticate a website member in a Metro-style App如何在 Metro 风格的应用程序中验证网站成员
【发布时间】:2012-06-07 10:09:08
【问题描述】:

我有一个使用 WebMatrix 用户身份验证(登录/注册页面)的网站,我正在 Windows 8 发布预览版中制作一个应用程序,我想知道是否可以对我的应用程序的用户进行身份验证(让我的应用程序的用户如果他们是我网站的注册会员,请登录我的应用程序?如果他们不是,允许他们通过我的应用程序注册 - 但似乎在 Metro 应用程序中大多数数据库连接是不可能的 - 所以我不知道该怎么做。有人可以帮忙吗?

我已经搜索了数周,但仍然没有大量的官方文档。

【问题讨论】:

  • 与其尝试通过应用程序连接数据库,难道不能在您的网站上制作一个身份验证 API 供应用程序使用吗?
  • 是的,这是个好主意。我制作了一个 API 来从应用程序内的数据库中检索某些结果。但现在看起来我必须按照你的方式去做,这没关系,但我对这种东西很陌生,而且出于明显的原因,我有点害怕制作身份验证 API。你有什么可以推荐我阅读的资源吗?谢谢!
  • 不确定资源,也许看看 MVC 4 中的一些新的 Web API 东西。
  • 即使是写得很糟糕的身份验证也比直接访问数据库更安全。在发送之前,从服务器检索一个密钥,使用该密钥对密码进行哈希处理,然后传输用户名和哈希密码,哈希服务器端也进行比较,如果一切正常,则返回另一个创建的哈希,用于识别当前此会话期间的用户(仅在固定时间或 IP 更改前有效)。
  • 谢谢马里奥和格雷厄姆。我认为这将是要走的路。

标签: c# .net security webmatrix asp.net-webpages


【解决方案1】:

您应该永远不要允许任何客户端或用户程序直接访问您的数据库(甚至不允许读取访问权限)。人们会以一种或另一种方式滥用它,如果他们的访问权限仅限于阅读,他们可能会尝试利用漏洞来获得写访问权限。如果你想要一个突出的例子,Super Meat Boy 正是这样做的,他们在去年的圣诞节期间遇到了很多数据库问题和滥用行为(当时有游戏在 (Steam) 销售,所以他们有很多额外的沮丧玩家! )。

我从来没有使用过 WebMatrix,所以我可能有点离题,但总的来说,您应该有几种可能的方法 - 都比直接访问数据库更好:

  • 使用一些提供的远程访问(这可能是一些额外的类或插件或其他;如果可用)。
  • 编写您自己的远程访问工具。这本质上是一些特殊的网站接受/返回由您的程序解释的文本或数据。例如。您可以在 HTTP POST 请求中发布登录凭据,它可能会返回 okfailed 或类似的东西。
  • 本质上是伪造网络浏览器并访问 WebMatrix 提供的标准 URL/脚本/系统。

【讨论】:

  • 感谢您的警告和方案。我认为第二种选择最适合。我可以问一下,对于您的第二个选项,我应该将用户凭据发布到网站的登录页面,让登录页面登录用户并向 Metro 应用程序返回 ok 或 failed 吗?就这样?我认为它会比这更复杂。可以以任何方式查看从应用程序发布的数据吗?
  • 除了上面的答案,我认为msdn.microsoft.com/en-us/library/windows/apps/xaml/… 对想要对事物进行身份验证的人会有帮助
  • 可以“看到”来自 POST 请求的数据,除非它通过 HTTPS 连接——这是使用唯一/一次性哈希的原因之一(请参阅我在问题 cmets 中的建议)。但是,是的,基本原理就是这样,只是尽量避免发布未加密/未散列的数据。您的网站部分很可能会返回某种唯一令牌或类似的东西,应用程序可能会将其用于进一步的请求作为身份验证(类似于 SESSION cookie)。
  • 优秀。非常感谢您的帮助马里奥,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多