2010-08-29 177 views
3

我建立一个自托管WCF服务,这暴露2端点为每个服务REST WCF认证

  1. SOAP
  2. REST

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

我想到了某种形式的登录方法将返回某种类型的饼干,但我想不出如何使这个透明单位所有我的电话..

感谢。去这个

回答

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() { 
     . . . 
    } 
} 
+0

这样做会违反RESTful系统的限制。 – 2010-08-29 12:38:33

+0

它会违反什么特定约束? – 2010-08-29 14:07:03

+0

请求必须是无状态的。在服务器上维护会话违反了该约束。如果返回的令牌在每次请求时都会重新发送,并且仅用于确认身份验证,那么对可伸缩性和自描述性的影响将很小。只是不要开始将其他状态关联到该会话。 – 2010-08-29 17:53:28

4

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

我建议你使用HTTP基本认证,如果这不足以满足你的场景,那么也许你可以通过HTTPS进行HTTP基本认证。

+1

基本/摘要式身份验证是一个不错的主意,但它有一个WCF的问题(只适用于Windows帐户) – MindFold 2010-08-29 13:09:14

1

好的,环顾四周后,我找到了答案,我传递了一个特殊的身份验证头,类似于Amazon S3。

其构建起来并不那么简单,但可以让我在没有SSL的情况下工作,并且将成为无状态并支持所有客户端。