我有一个带有以下服务合同的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进行身份验证..
答案 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"];
}