1
<system.web> 
    <compilation debug="true" 
       targetFramework="4.0" /> 
    <httpRuntime requestPathInvalidCharacters="" /> 
    <authentication mode="Forms" /> 
    <membership defaultProvider="> 
     <providers> 
      <clear /> 
       <add name="ANSMP" 
        type="Test.Authentication.CustomMembershipProvider" 
        connectionStringName="DataConnection" /> 
     </providers> 
    </membership> 
    <roleManager enabled="true" 
       defaultProvider="ANSRP"> 
     <providers > 
      <clear />  
       <add connectionStringName="DataConnection" 
        applicationName="/" 
        name="ANSRP" 
        type="Test.Authentication.CustomRoleProvider" /> 
     </providers> 
    </roleManager> 
</system.web> 
<system.serviceModel> 
    <behaviours> 
     <serviceBehaviors> 
      <behavior name="TestDataBehaviour"> 
       <serviceCredentials> 
        <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" 
              membershipProviderName="ANSMP"/> 
       </serviceCredentials> 
       <serviceMetadata httpGetEnabled="true" 
           httpsGetEnabled="true" /> 
       <serviceAuthorization principalPermissionMode="UseAspNetRoles" 
             roleProviderName="ANSRP" /> 
       <dataContractSerializer ignoreExtensionDataObject="true" /> 
       <serviceDebug httpHelpPageBinding="webHttpBinding" 
           httpHelpPageBindingConfiguration="" 
           includeExceptionDetailInFaults="true" /> 
      </behavior> 
     </serviceBehaviour> 
    </behaviors> 
</system.serviceModel> 

Если предположить, что я оставляю мой пользовательский поставщик членства и пользовательские роли providwer пустых (Асина, все методы throw NotImplementedException); Я ожидал бы ошибку при попытке проверить роль с помощью [PrinciplePermission(SecurityAction.Demand, Role = "Custom")] или var b = Thread.CurrentPrincipal.IsInRole("Custom")]Пользовательские роли поставщика не вызывает в WebService

Однако вместо этого он просто постоянно возвращается Access is denied (по атрибуту) и false на поле.

Использование Membership.GetAllUsers() действительно дает мне NotImplementedError .. но как я могу убедиться, что когда я использую атрибут PrincipalPermission, который вызывает триггеры моего поставщика роли и моего пользовательского поставщика членства?

Редактировать

Я попытался добавить , Test.Authentication к типу поставщика членства, а также поставщика ролей ...

Однако в настоящее время PrinciplePermission говорит мне Request for principal permission failed

Edit 2

При проверке журналов трассировки я обнаружил следующее:

The action that failed was: 
Demand 
The type of the first permission that failed was: 
System.Security.Permissions.PrincipalPermission 
The first permission that failed was: 
<IPermission class="System.Security.Permissions.PrincipalPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
version="1"> 
<Identity Authenticated="true" 
Role="Customer"/> 
</IPermission> 

The demand was for: 
<IPermission class="System.Security.Permissions.PrincipalPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
version="1"> 
<Identity Authenticated="true" 
Role="Customer"/> 
</IPermission> 

The assembly or AppDomain that failed was: 
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

Я также получаю справедливые несколько Extension type not found ПРЕДУПРЕЖДЕНИЙ

<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Warning"> 
    <TraceIdentifier>http://msdn.microsoft.com/nl-NL/library/System.ServiceModel.ExtensionTypeNotFound.aspx</TraceIdentifier> 
    <Description>Extension type not found.</Description> 
    <AppDomain>/LM/W3SVC/1/ROOT/webapi3-6-130082517071825580</AppDomain> 
    <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/DictionaryTraceRecord"> 
     <ExtensionName>pollingDuplexHttpBinding</ExtensionName> 
     <ExtensionType>System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement, System.ServiceModel.PollingDuplex, version=3.0.0.0, Culture=neutral</ExtensionType> 
    </ExtendedData> 
</TraceRecord> 

ответ

0

После много времени я обнаружил, что все было показано выше работает corretly

Со стороны клиента, при создании сервисная ссылка, 2 конечных пункта (в нашем случае. Я не знаю, является ли это стандартом). Один защищен и один .. ну, не обеспечен.

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