【问题标题】:How are people handling user authentication for web services?人们如何处理 Web 服务的用户身份验证?
【发布时间】:2011-01-23 01:47:58
【问题描述】:

我正在创建一个 Web 服务以通过可公开访问的 API 公开一些数据。概括地说,人们使用什么机制来保护他们的 API 以确保有效、经过身份验证的用户进行调用?

服务将是 C#,消费者可以是任何东西(Facebook 或 iPhone 应用程序以及网站),因此只有 Microsoft 的解决方案已推出。

这不是一个新问题,所以我认为有一些标准做法可以处理它,但我的 google-fu 在这个问题上让我失望了。集体可以向我指出任何资源吗?谢谢。

【问题讨论】:

  • 我询问了一些选项并得到了它们,但 Inquisitor 得到了答案,因为我指向了 OAuth。

标签: c# web-services security authentication


【解决方案1】:

您仍然可以使用会员身份验证:有一个 Web 服务方法 Login(username, password),在该方法中验证用户:

[WebMethod]
public bool Login( string username, string password)
{
    bool isValid = Membership.ValidateUser(username, password);
    if (isValid)
    {
        FormsAuthentication.SetAuthCookie(username, true);
        return true;
    }
    return false;
}

应该这样做 - 它将创建一个随请求一起传播的 cookie,并且在每种方法中您都可以检查 HttpContext.Current.User.IsAuthenticated

void SomeWebMethodThatRequiresAuthentication(someparameter)
{
    if (HttpContect.Current.User.IsAuthenticated)
    {
        ... do whatever you need - user is logged in ...
    }
    else
    {
        .... optionally let user know he is not logged in ...
    }
}

我相信它可以与支持 cookie 的不同消费者一起使用,因为它所需要的只是让消费者将 auth cookie 连同请求一起发送到您的网络服务器。

【讨论】:

  • 这很有趣 - 所以在这种情况下,经过身份验证的网站用户和 Web 服务的消费者之间没有区别。我猜如果客户端不支持 cookie,它会失败吗? (例如桌面应用)
  • ASP.NET 成员资格还支持 url 重写并将身份验证令牌保留在 url 本身中,因此这几乎适用于任何消费者,即使是那些不支持 cookie 的消费者。例如:informit.com/articles/article.aspx?p=351414&seqNum=4
【解决方案2】:

我看到在 SaaS Web 服务中经常使用 SSL 上的令牌密钥进行身份验证 - 我们在上一个项目中选择了这种简单的方法,而不是 OAuth 和 SAML 协议。也许这会很有用 - 有时简单的解决方案会使事情更具可扩展性和控制力。

【讨论】:

  • 这很有趣,因为我的词汇表中没有“OAuth”,这为谷歌打开了无限可能!
【解决方案3】:

【讨论】:

  • 第一个链接没有答案?
  • 我什至认为他不需要自定义提供程序,如果他使用 MS SQL 作为后端,他可以使用内置 SQL 提供程序。
【解决方案4】:

我们使用WS-Security。这是一个已发布的标准,因此任何客户端(理论上)都可以使用它来发送身份验证凭据。

这是另一个 SO 问题,涉及将 WS-Security 与 C# 结合使用。
How to use WS-Security in C#?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    相关资源
    最近更新 更多