2

パブリック WCF サービスを作成しました。アクセス可能で、機能します。しかし、wsdl で使用可能なメソッドを取得すると、アクセス可能にしたくない一般に公開されているメソッドがあることに気付きました。

例:

public interface IJobs { 
    List<Jobs> GetAllJobs(); //Good
}

public interface IJobManagement {
    void AddNewJob(Jobs job); //Bad
}

設定

<services>
  <service name="Services.Data.PublishService" >
    <clear/>
    <endpoint address="JobsHttp" binding="basicHttpBinding" contract="Services.Data.IJobs" ></endpoint>
    <endpoint address="JobsTCP" binding="netTcpBinding" contract="Services.Data.IJobManagement" />
    <endpoint binding="mexHttpBinding" name="httpmex" contract="IMetadataExchange"></endpoint>
    <endpoint binding="mexTcpBinding" name="mex" contract="IMetadataExchange"></endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:9000/"/>
        <add baseAddress="net.tcp://localhost:9001"/>
      </baseAddresses>
    </host>
  </service>
</services>

新しいエンドポイントを作成すると問題が解決するのではないかと考えましたが、この構成では何もしませんでした。その理由がわかりました。私は、IJobManagement を一般公開する方法を見つけ出して、ローカル ネットワークでのみアクセスできるようにしようとしています。

これが私のサービス クラスで、そこに私のメソッドが存在します。

public class PublishService : IJobs, IJobsTCP { //Methods are in here. }

編集

さらに説明すると、新しいジョブが追加されると、この WCF サービスにプッシュして変更する別の WCF サービスがあります。List<Jobs>

4

1 に答える 1

1

特定のグループのユーザーのみが特定のメソッドへのアクセスを許可される原則ベースのセキュリティを実装することにより、メソッド レベルでアクセスを制限できます。

たとえば、MSDN は、メソッドAddPrincipalPermissionで注釈を付けることにより、「CalculatorClients」ロールのユーザーのみがこのメソッドにアクセスできることを示しています。

[PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")]
public double Add(double a, double b)
{
    return a + b;
}

MSDN にも示されているように、サブジェクト名と証明書の拇印を指定することにより、クライアント証明書に基づいてメソッドを制限することもできます。

[PrincipalPermission(SecurityAction.Demand,
    Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")]
public double Multiply(double a, double b)
{
    return a * b;
}

ローカル アカウントによる制限についての質問に答えるには、別のオプションとして、アカウント名で制限する方法があります。

[PrincipalPermission(SecurityAction.Demand, Name="SomeAccountName")]

ただし、これらのローカル アカウントは、前の例で適用できるグループに属している必要があります。実際の名前による制限は、アプリケーション開発に対して非常に制限的で静的です

MSDNの完全な記事を参照してください。

于 2013-06-05T14:45:38.273 に答える