Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WCF Аутентификация Роли по http 
:(
    Опции темы
hug
Дата 9.12.2009, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.7.2007

Репутация: нет
Всего: нет



Добрый день. 
Есть сервис. Необходимо, чтобы методами его контракта пользовались только определенные роли.
Без использования сертификатов. Только по логину и паролю
На мсдне нашел подобный пример с сертификатами и ws биндингом.
Переделал его под свои нужды и ... не работает.
Итак сервис
Код

public class Service1 : IService1
{
        [PrincipalPermission(SecurityAction.Demand, Role="Managers")]
        public bool LoadPrice(string xmlDoc)
        {
           return true;
        }
}

Делаем конфиг:
Код


<services>
      <service name="Pharm.PriceLoader.Service1" behaviorConfiguration="Pharm.PriceLoader.Service1Behavior">
        <endpoint address=""
                  binding="basicHttpBinding"
                  bindingConfiguration="myBinding"
                  contract="Pharm.PriceLoader.IService1"
                  bindingNamespace="http://pharm.com">
          <identity>
            <dns value="localhost"/>
          </identity>          
        </endpoint>
       </service>
</services>

<bindings>
      <basicHttpBinding>
        <binding name="myBinding" allowCookies="true">
          <security mode ="TransportCredentialOnly">
            <message clientCredentialType ="UserName"/>
            <transport clientCredentialType="None"/>
          </security>
        </binding>
      </basicHttpBinding>      
 </bindings>

<behaviors>
      <serviceBehaviors>
        <behavior name="Pharm.PriceLoader.Service1Behavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
                                roleProviderName="MySQLRoleProvider"  />          
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
             membershipProviderName="MySQLMembershipProvider" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>



Все это хочет сделать на простом хттп без сертификатов. Защиту пришлось сделать ну транспортном уровне.
Прописал провайдеры мембершипа и ролей. Они рабочие. Проверены в асп.нет приложении 

Пишем клиента
Код

Service1Client client = new Service1Client();
client.ClientCredentials.UserName.UserName = "1";
client.ClientCredentials.UserName.Password = "1";
bool a = client.LoadPrice("test");

Выходит  Request for principal permission failed. Если открываю контракт и смотрю
 Thread.CurrentPrincipal.Identity.Name то тоже почему-то налл.

App.config клиента
Код

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
            maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
            useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="None" proxyCredentialType="None"
                realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:3837/Service1.svc" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
          name="BasicHttpBinding_IService1" />
    </client>
  </system.serviceModel>

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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.