【问题标题】:Azure ACS and SimpleMembershipAzure ACS 和 SimpleMembership
【发布时间】:2013-01-30 23:10:42
【问题描述】:

我想创建 azure mvc4 网站(azurewebsites):

  • 公司域内员工的 SSO(ADFS 已与 ACS 联合)
  • 通过本地帐户或 LiveID OAuth(liveid 是 ACS 上的 IdP)访问外部(非员工)。
  • 要求是在应用程序中管理用户配置文件和角色。

我看到以下选项:

  1. 将我的应用程序与 ACS 联合并使用联合身份验证,为 UserProfiles 和 Membership 等创建自定义表集,在这种方法中,我无法使用任何现有的提供程序。我在索赔中没有必要的信息。

  2. 为 ACS 编写自定义 OAuth/OAuth2 客户端(我找不到任何客户端)并使用 OAuthWebSecurity 注册它。这种方法似乎适合我,我可以使用 SimpleMembership 等。问题是我找不到任何示例如何以正确的方式实现它。

问:

在这种情况下,正确的方法是什么?

还有其他选择可以满足我的要求吗?

是否有任何适用于 ACS 的 OAuthWebSecurity 客户端?

谢谢, 马切耶

【问题讨论】:

    标签: azure asp.net-mvc-4 single-sign-on acs


    【解决方案1】:

    我会选择方法 1。因为 -

    a) 无论如何,您都需要 ws-fed 来合并 ADFS b) ACS 没有 OAuth 客户端 - ACS 仅支持 OAuth 的一些特殊用例(这就是为什么您还没有找到它的客户端的原因)。

    无论如何,您都希望完全控制您的数据库 - 而不是使用魔法/半生不熟(取决于您的观点)简单的会员资格...

    【讨论】:

    • 嗨,如果我选择将 ACS 的 LiveID 用于外部,这会很好,但如果我想创建本地帐户怎么办?我看到的唯一选择是 ACS 的 Oauth。我找到了这个:yorkporc.wordpress.com/2012/11/14/…,但我还没有机会尝试。如果我使用 acs fedauth,如何将联合用户映射到本地数据库?
    • ACS 不支持 MVC 模板 (DotNetOpenAuth) 中使用的 OAuth“类型”。但是您可以简单地进行自己的映射。 ACS 返回一些 id,然后您将其映射到数据库中的用户。
    • 是的,它没有。提到的博客文章与我的问题文章的 2.approach 相关,无论如何:如果我想为外部用户使用本地帐户 + 为本地用户使用 ACS 怎么办?
    • 正如我所说的 - 你可以做你自己的映射。我更喜欢编写自己的逻辑。您可以完全控制身份验证、声明和本地数据库。
    • 感谢您的回复,但我仍然不知道如何使用表单身份验证(对于外部人员)miv Fed 身份验证(对于本地人)..
    【解决方案2】:

    我们最近针对类似问题实施了解决方案。我们所做的是:

    • 使用 ACS 和身份提供程序(Windows Live、Google 等)获取身份令牌
    • 使用我们自己的机制将这些身份映射到用户/角色。例如,我们在首次登录时使用工资单数据来验证针对员工的索赔。
    • 对于那些不想使用社交媒体身份的用户,我们允许他们在通过 ACS 链接的“自己的”身份提供商上创建用户名/密码。这是一个单独的服务,运行 Thinktecture Identity Server 的修改版本。所以我们使用 thinktecture 身份服务作为 STS 端点。
    • 我们将对联合 ADFS 执行相同的操作(就像您所做的那样)

    随着时间的推移,我们似乎可以使用 Thinktecture 服务器来替换 ACS 功能,并提供比 ACS 中可用的更多控制(例如使用我们自己的域名),但现在,ACS 可以工作,而且我们'就这样吧。但是 Thinktecture 服务作为简单用户名/密码的替代登录方式,对我们来说很重要——但这确实意味着托管一个单独的云服务。

    您想从 SimpleMembership 中获得什么?用户名/密码登录(在这种情况下使用/主机/构建用户名/密码 STS 端点),或成员资格/角色表(无论如何都不是很好)。?

    【讨论】:

      【解决方案3】:

      在 ASP.NET 中有一个 OAUTH2 客户端框架,我为此编写了一个 ACS 提供程序。 Web 应用程序加载 OAUTH2 提供程序,它是 OAUTH2 端点的外观。实际上,它将 ws-fedp 与 ACS(及其各种发行人)进行对话。由于 oauth 协议或 ws-fedp 协议等都隐藏在提供程序中,因此 API 使用者(ASP.NET 管道)不知道(或关心)。毕竟,它已经不在乎它是在同一个 API 后面说的是 OAUTH1、OAUTH2 还是 openid。

      它非常有效 - 并且可以毫不费力地重复使用简单的会员资格。适用于 Web 表单、网页和 MVC。后两者是开源的,其源代码访问有助于看到更大的图景。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-08
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        相关资源
        最近更新 更多