Аутентификация WCF с участием, ролью и профилем ASP.NET - PullRequest
1 голос
/ 22 июня 2011

У меня есть служба WCF, которая размещена в IIS 7.0 / 7.5 внутри веб-приложения ASP.NET MVC (с помощью файла .svc с директивой ServiceHost).Параметры безопасности в моей конфигурации выглядят следующим образом:

<services>
  <service name="MyServiceLib.MyService">
    <endpoint address="" binding="wsHttpBinding" 
              bindingConfiguration="wsHttpBindingConfig"
              contract="MyServiceLib.IMyService" />
  </service>
</services>

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBindingConfig">
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="None" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceCredentials>
        <userNameAuthentication
            userNamePasswordValidationMode="MembershipProvider"
            membershipProviderName="AspNetSqlMembershipProvider"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

Как вы можете видеть, я использую SSL для обеспечения безопасности транспорта, а затем проверяю подлинность с использованием имени пользователя и пароля для поставщика членства ASP.NET.Пока это работает нормально.

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

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

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Что ж, вы можете ограничить доступ к методам в вашем сервисе, указав их с помощью PrincipalPermissionAttribute

[PrincipalPermission (SecurityAction.Demand, Role = "User")] public void MyMethod () {...

Необходимо настроить службу для использования поставщика ролей:

<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider" />

Но это поможет только с ролями.Я не думаю, что есть что-то из коробки, которое поможет с проверкой значения в профиле пользователя: вы можете сделать это вручную в теле метода.

1 голос
/ 22 июня 2011

Как насчет Включить службу роли WCF ?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...