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>

カスタムメンバーシッププロバイダーとカスタムロールプロバイダーを空のままにしておくと仮定します(Asin、すべてのメソッドthrow NotImplementedException); [PrinciplePermission(SecurityAction.Demand, Role = "Custom")]またはを使用して役割を確認しようとすると、エラーが発生することが予想されますvar b = Thread.CurrentPrincipal.IsInRole("Custom")]

Access is deniedただし、代わりに、(属性で) およびfalseフィールドで戻り続けるだけです。

Membership.GetAllUsers()実際に使用するNotImplementedErrorと .. が得られますが、カスタム ロール プロバイダーとカスタム メンバーシップ プロバイダーをトリガーする PrincipalPermission 属性を使用するときに、どうすれば確認できますか?

編集

, Test.Authenticationメンバーシップ プロバイダーとロール プロバイダーのタイプに追加しようとしました...

ただし、現在 PrinciplePermission は私に教えてくれますRequest for principal permission failed

編集 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>
4

1 に答える 1

0

しばらくして、上記のすべてが正しく機能することがわかりました

クライアント側からは、サービス参照を作成すると、2 つのエンドポイントが作成されます (私たちの場合。これが標準かどうかはわかりません)。1 つは保護されており、もう 1 つは保護されていません。

トークンを使用するために、私は常に保護されていないものを使用してきました...しかし、メンバーシッププロバイダー、ロールプロバイダー、およびユーザー名パスワード検証を使用するには、保護されたエンドポイントを使用する必要があります!

于 2013-03-21T13:17:29.683 に答える