REST WCF认证

3
我正在构建一个自托管的WCF服务,该服务为每个服务公开了2个端点:

  1. SOAP
  2. REST

SOAP使用WS-* SOAP身份验证(身份验证标头)如何实现REST身份验证?

我考虑过一种登录方法,该方法将返回某种类型的cookie,但我无法想出如何使其对我所有其他调用透明。

谢谢。

3个回答

4

RESTful系统中的请求是无状态的,因此您需要在每个请求上重新验证身份。

我建议您使用HTTP基本认证,如果这对您的情况不足够,则可以在HTTPS上执行HTTP基本认证。


1
基本/摘要身份验证是一个不错的想法,但它在WCF中存在问题(只能使用Windows帐户)。 - MindFold

1
一种解决方法是通过使用泛型作为响应包装器,以及一个帮助函数来检查身份验证,例如:
[DataContract]
public sealed class AuthenticatedRequest<T> {
    [DataMember(Order=0)]
    public string SessionToken {get; set;}

    [DataMember(Order=1)]
    public T RequestBody {get; set; }

    public static bool IsAuthenticated () {
        . . .
    }
}

这样做将违反RESTful系统的约束条件。 - Darrel Miller
它会违反哪个特定的约束条件? - Justin Dearing
请求必须是无状态的。在服务器上保持会话违反了此限制。如果返回的令牌随每个请求重新发送,并且仅用于确认身份验证,则对可扩展性和自我描述性的影响将很小。只是不要开始将其他状态与该会话相关联即可。 - Darrel Miller
1
你可以发送用户名和密码,或者在每个请求中附带一个密钥。这种方法仍然是可靠的。 - Justin Dearing

1

好的,在查找了一番后,我找到了答案,我正在传递一个类似于Amazon S3的特殊身份验证标头。

构建起来并不简单,但它将允许我在没有SSL的情况下工作,并且将是无状态的并支持所有客户端。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接