端口WCF SOAP服务到REST服务:如何实现用户/密码/令牌认证

时间:2011-08-03 13:58:01

标签: wcf authentication rest soap

我有一个带有以下服务合同的SOAP端点的WCF服务:

[OperationContract]
string Login(string sAuthUserName, string sAuthUserPassword);

[OperationContract]
Consumer GetData(string sAuthKey);

[OperationContract]
bool Logout(string sAuthKey);

[OperationContract]
DataSet GetSingleByRefID(string sAuthKey, int iCommand, int iRefID);

调用Login()检查提供的sAuthUserName和sAuthUserPassword,生成一个散列(sAuthKey),该散列将进一步用于身份验证。

如何将此端口移植到REST? 使用以下地址?

/session/{sAuthUserName}/{sAuthUserPassword} [POST]

将是Login()

/consumer/{sAuthKey} [GET]

将是GetData()

/session/{sAuthKey}/ [DELETE]

将是Logout()

/data/single/{sAuthKey}/{iCommand}/{iRefID} [GET]

将是GetSingleByRefID()

使用用户名和密码进行身份验证的最佳方式是哪种? 这应该只需要一次吗?之后,REST-Consumer应该能够使用它的AuthKey进行身份验证..

1 个答案:

答案 0 :(得分:1)

我们有类似的情况,并使用标头作为auth相关值(在您的情况下用户名,密码,auth-key)。调用auth相关方法时不带任何参数。通过安全传输进行通信。

您可以访问下面的标题值

HttpRequestMessageProperty httpProperties;
string sAuthKey = default(string);
if (OperationContext.Current.IncomingMessageProperties.TryGetValue(HttpRequestMessageProperty.Name, out httpProperties))
{
    sAuthKey = httpProperties.Headers["sAuthKey"];
}