2011-06-22 45 views
1

ASP.NET MVC Webアプリケーションの内部でIIS 7.0/7.5でホストされているWCFサービスを持っています(ServiceHostディレクティブの.svcファイルを使用)。あなたは、私がトランスポート・セキュリティのためにSSLを使用しています参照して、ASP.NETメンバシッププロバイダに対してユーザー名とパスワードで認証することができたようASP.NETメンバーシップ、ロール、およびプロファイルを使用したWCF認証

<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> 

:私の構成のセキュリティ設定は、このように見ています。これはこれまでのところうまく動作します。

しかし、私は認証されたユーザーだけではなくではなく、特定の役割であり、そのプロファイルに設定された特定の値を持っている人のユーザーに、このサービスへのアクセスを制限したいです。 (私は、WebアプリケーションでSqlProfileProviderを使用しています。すべてのユーザーに、特定の値が割り当てられたプロファイルがあります)。

これは構成設定で可能ですか?そうでない場合は、サービス側でカスタム認証を作成して、着信メッセージからユーザーとパスワードを取得し、メンバーシップとロールをチェックしてプロファイルストアからプロファイルを引き出すことができますか?これどうやってするの?

答えて

1

Enable WCF Role Service

implement your own authentication methodとすることもできます。あなたは私たち自身でユーザを検証することをWCFに伝えます(独自のチェックサム/検証方法を実行します)

+0

このロールサービスが役立つかどうかはわかりません。説明:* "このトピックでは、Windows Communication Foundation(WCF)を使用するクライアントで使用できるようにするために、Webサーバー上でASP.NET役割サービスを構成する方法を示します。" *ただし、役割を利用できるようにしたくないクライアントと私はまた、クライアントがWCFを使用することを保証することはできません。私は、受信したユーザー名が特定の役割にあるかどうか、純粋にサーバー側で確認したいだけです。 – Slauma

+0

@Slauma:[aspNetCompatibilityMode](http://blogs.msdn.com/b/wenlong/archive/2006/01/23/516041.aspx)を有効にする方法はありますか? –

+0

私は思うに、WCFの役割サービスは、単に「aspNetCompatibilityMode」の有無にかかわらず、私が必要とする以上の目的を持っています。しかし、カスタム検証は実際に実装するのが簡単で、うまく動作します。このヒントをありがとう! – Slauma

1

まあ、サービスのメソッドへのアクセスを、 'PrincipalPermissionAttribute'

[PrincipalPermission(SecurityAction.Demand、役割= "ユーザー")] ます。public void MyMethodは(){...

あなたはロールプロバイダを使用するようにサービスを設定する必要があります。

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

しかしそれは役割だけに役立つでしょう。私は、ユーザプロファイルの値をチェックするのに役立つものは何もないと思っています。メソッド本体内で手動で行うことを検討するかもしれません。

+0

私はそれを試みましたが、私はいつも例外があります:* "私は、プリンシパルアクセス許可の要求に失敗しました。" * - ユーザーが指定したロールに関係なく、これはおそらくWindows認証のユーザーグループでのみ機能し、ASP.NETの役割では機能しませんか? – Slauma

+0

これはロールで動作します。私は現在それを使用しています... – TheNextman

+1

ロールサービスを使用するようにサービスを設定する必要があります: TheNextman

関連する問題