c# - 使用 Azure 进行身份验证

标签 c# asp.net .net authentication azure

我有一个 Azure 帐户,并且当前有一个带有 SQL 数据库的移动服务设置,以便我的 Windows 应用商店应用可以与数据库进行通信。

我使用 ASP.NET 网页身份验证开发了网站。我的 Windows 应用商店应用程序需要类似的东西。

我已经成功浏览了 Windows Azure 网站上的文档和教程并实现了 ACS(Windows Live ID、Google、Yahoo! 和 Facebook) - 但问题是 - 我不想要 Google、Yahoo!、Facebook甚至 Windows Live ID 或 Microsoft 帐户)登录 - 我想要我自己的登录,但似乎他们没有给您这个选项(如果我错了,请纠正我)。

我需要允许用户从我的应用程序中注册(这意味着提供他们的姓名、出生日期、电子邮件、电话、地址等)并将其全部放入我的数据库中。

现在,在使用我的 Azure 服务实现 Microsoft 帐户登录后,我发现您甚至无法获得有关登录到您的应用程序的任何用户的最基本信息 - 甚至连电子邮件地址也无法获得。

我花了几个小时在网上搜索可能有帮助的东西,但我的关键字已经用完了 - 而且还没有找到任何相关的结果。

有人知道这是否可行吗?我们如何将登录和注册与 Windows 应用商店应用集成,以将这些数据设置到 Windows Azure 服务中或从 Windows Azure 服务中获取这些数据?

任何代码、示例、链接、教程、文档等都将受到高度赞赏。

最佳答案

您已经走上了连接外部身份验证的道路,在我看来,对于面向外部的 Web 应用程序来说,这是一个更好的方法。好处是:

  • 您的应用程序仅负责授权而不负责身份验证。身份验证涉及大量工作和大量最佳实践。最好让那些最了解的人来承担这个负担。但这并不意味着您不应该尝试理解它。
  • 如果您的网站遭到黑客攻击,您不必告诉他们他们的用户名/电子邮件和密码组合已被泄露,他们可能必须在其他网站上更改密码。
  • 您还要确保您的用户不必记住/管理另一个用户名/电子邮件地址密码组合

如果您确实想要进行身份验证,那么没问题,但您需要自己进行。看看 Asp.Net Membership 上的示例。这不是唯一的方法,也不是最好的方法,但有很多例子。

现在,如果您决定要使用外部身份验证,我可以为您提供一些指导来帮助您当前的实现。

  • 首先要注意的是,您从 Live、Google、Facebook 返回的 ID 只能被假定为对于该提供商来说是唯一的。因此,如果您想在系统中保留该身份的配置文件,并且想要使用多个提供商,您将需要以这样一种方式来实现它:您可以在系统中保持该 ID 的唯一性,并帮助您将其与某个身份相关联。提供商。

Website Authentication with Social Identity Providers and ACS Part 2 – Integrating ACS with the Universal Profile Provider

  • 正如您所发现的,并非所有身份验证提供商都返回相同的“声明”。声明是用户声称拥有的内容,例如电子邮件地址、姓名、出生日期等。默认情况下,您可以通过 ACS 返回 Uid 使用所有这些内容,有些会返回姓名和电子邮件地址。你所要做的就是填补空白。当有人注册时,您需要提取相关声明,然后要求他们填写缺失的声明。您可能还希望将 ACS 中的不同声明映射到可在应用中使用的通用名称,因为某个提供商可能会使用略有不同的名称。

Federated Identity with Windows Azure Access Control Service

  • 正因为您不处理身份验证,您仍然需要负责确保应用程序的安全。一半的工作已经为您完成,因此您的代码应该会轻很多,但您仍然需要使用角色。

Windows Azure Role Based authentication (ACS)

  • 这种方法的真正好处是,您可以实现您的应用程序,就像使用身份模型一样。您可以允许用户将多个身份与其个人资料相关联,这意味着他们可以按照自己的方式登录。

关于c# - 使用 Azure 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15902818/

相关文章:

asp.net - 什么是 SNIReadSyncOverAsync?为什么需要很长时间才能完成?

c# - MVVM 在两个 View / View 模型之间传递数据

.net - 如何完全卸载 Visual Studio 2010?

c# - 当我的 LINQ 查询将数据库记录作为 Enumerable 获取并在 foreach 循环中访问记录时会发生什么?

c# - 如何在 C# 静态和非静态方法之间做出决定?

c# - Windows 应用商店应用程序崩溃未登录到 Application Insights azure 门户

c# - 在C#中获取HTTP状态代码

c# - "=>"是什么意思?

c# - 网格水平 View

c# - 将数据模板内的元素绑定(bind)到父属性