Порт службы WCF SOAP для службы REST: как реализовать аутентификацию пользователя / пароля / токена - PullRequest
1 голос
/ 03 августа 2011

У меня есть служба WCF, снабженная конечной точкой SOAP со следующим контрактом на обслуживание:

[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 Ответ

1 голос
/ 04 августа 2011

У нас похожая ситуация и мы используем заголовок для значений, связанных с аутентификацией (имя пользователя, пароль, ключ авторизации в вашем случае). Методы, связанные с аутентификацией, вызываются без каких-либо параметров. Связь происходит через безопасный транспорт.

Вы можете получить доступ к значениям заголовка, как показано ниже

HttpRequestMessageProperty httpProperties;
string sAuthKey = default(string);
if (OperationContext.Current.IncomingMessageProperties.TryGetValue(HttpRequestMessageProperty.Name, out httpProperties))
{
    sAuthKey = httpProperties.Headers["sAuthKey"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...