WCF + Удостоверения пользователя

Это означает, что вы тестируете, оцениваете или распечатываете переменную, которой вы еще ничего не присвоили. Это означает, что у вас либо опечатка, либо вам нужно сначала проверить, что переменная была инициализирована. Проверьте ваши логические пути, они могут быть установлены в одном пути, но не в другом.

5
задан Charles 18 July 2009 в 00:21
поделиться

3 ответа

Откуда берутся эти имена пользователей и пароли? Если на вашем веб-сайте уже реализована проверка подлинности с помощью форм, вы можете самостоятельно обойти настройку учетных данных и использовать файл cookie проверки подлинности с помощью форм. Если ваши пользователи вошли в систему, файл cookie будет перемещаться вместе с вызовом веб-службы. Чтобы прочитать его с другой стороны, вам нужно внести пару изменений.

Сначала вам нужно включить режим совместимости ASP.NET для WCF в разделе system.ServiceModel:

<system.serviceModel>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel>

Как только это будет сделано, затем для каждого метод службы, который вы хотите понять, файл cookie ASP.NET, добавьте атрибут [AspNetCompatibilityRequirements] в свой класс службы

[ServiceContract]
[AspNetCompatibilityRequirements(
    RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExampleService
{
}

. Теперь в каждом методе вы можете получить доступ к объекту HttpContext.Current.User.Identity для определения личности пользователя.

7
ответ дан 14 December 2019 в 04:45
поделиться

вы можете передать какой-то объект аутентификации и зашифровать его на уровне сообщения с помощью WCF. Затем можно использовать аспекты C # ( http://www.postsharp.org/ ), чтобы избежать избыточной логики. Это очень чистый способ обращения с ним.

0
ответ дан 14 December 2019 в 04:45
поделиться

Не сворачивайте свои собственные и не добавляйте явные параметры - это действительно слишком много!

Ознакомьтесь с функциями безопасности WCF - их много! Вы можете, например, защитить сообщение и включить в него учетные данные - все сразу же, никакого дополнительного кодирования с вашей стороны не требуется!

Ознакомьтесь с этой отличной статьей о безопасности WCF, написанной Мишель Леру Бустаманте: http: // www.devx.com/codemag/Article/33342

В вашем случае я бы предложил безопасность сообщений с учетными данными имени пользователя - вам нужно настроить это на обоих концах:

На стороне сервера:

<bindings>
  <basicHttpBinding>
    <binding name="SecuredBasicHttp" >
      <security mode="Message">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="YourService">
    <endpoint address="http://localhost:8000/MyService"
              binding="basicHttpBinding"
              bindingConfiguration="SecuredBasicHttp"
              contract="IYourService" />
  </service>
</services>

И вы необходимо применить те же настройки на стороне клиента:

<bindings>
  <basicHttpBinding>
    <binding name="SecuredBasicHttp" >
      <security mode="Message">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<client>
    <endpoint address="http://localhost:8000/MyService"
              binding="basicHttpBinding"
              bindingConfiguration="SecuredBasicHttp"
              contract="IYourService" />
</client>

Теперь ваш сервер и клиент согласны с безопасностью - на клиенте вы должны указать имя пользователя и пароль для использования следующим образом:

YourServiceClient client = new YourServiceClient();

client.ClientCredentials.UserName.UserName = "your user name";
client.ClientCredentials.UserName.Password = "top$secret";

На стороне сервера , ты' Вам потребуется настроить способ проверки этих учетных данных пользователя - обычно либо по домену Windows (Active Directory), либо по модели поставщика членства ASP.NET. В любом случае, если учетные данные пользователя не могут быть проверены в том хранилище, которое вы определяете, вызов будет отклонен.

Надеюсь, это немного поможет - безопасность - большая тема в WCF и имеет много-много опций - это может быть немного пугающе, но, в конце концов, обычно это имеет смысл! : -)

Марк

Надеюсь, это немного поможет - безопасность - важная тема в WCF, и у нее много-много вариантов - это может быть немного пугающе, но, в конце концов, обычно это имеет смысл! : -)

Марк

Надеюсь, это немного поможет - безопасность - это большая тема в WCF, и у нее есть много-много вариантов - это может быть немного пугающе, но, в конце концов, обычно это имеет смысл! : -)

Марк

1
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: