人们如何处理Web服务的用户身份验证?

时间:2011-01-23 01:47:58

标签: c# web-services security authentication

我正在创建一个Web服务,通​​过可公开访问的API公开一些数据。在较高的层面上,人们使用什么机制来保护他们的API以确保有效的,经过身份验证的用户正在进行呼叫?

该服务将是C#,消费者可以是任何东西(Facebook或iPhone应用程序以及网站),因此微软的解决方案已经淘汰。

这不是一个新问题,所以我假设有一些标准的做法来处理它,但我的google-fu让我失败了。集体能指出我的资源吗?感谢。

4 个答案:

答案 0 :(得分:5)

您仍然可以使用成员身份验证:拥有一个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服务器。

答案 1 :(得分:3)

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

这是另一个涉及在C#中使用WS-Security的SO问题。
How to use WS-Security in C#?