Zugriffsautorisierung für Dienstvorgänge

In diesem Beispiel wird veranschaulicht, wie <serviceAuthorization> verwendet wird, um die Verwendung des PrincipalPermissionAttribute-Attributs für die Zugriffsautorisierung für Dienstvorgänge zu aktivieren. Dieses Beispiel basiert auf dem Beispiel Erste Schritte. Dienst und Client werden mithilfe von <wsHttpBinding> konfiguriert. Das mode-Attribut von <security> wurde auf Message und clientCredentialType wurde auf Windows gesetzt. PrincipalPermissionAttribute wird auf jede Dienstmethode angewandt und für die Beschränkung des Zugriffs auf jeden Vorgang verwendet. Der Aufrufer muss Windows-Administrator sein, um auf jeden Vorgang zugreifen zu können.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Die Dienstkonfigurationsdatei verwendet <serviceAuthorization>, um das principalPermissionMode-Attribut festzulegen:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- The serviceAuthorization behavior sets the
           principalPermissionMode to UseWindowsGroups.
           This puts a WindowsPrincipal on the current thread when a
           service is invoked. -->
      <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Die Einrichtung von principalPermissionMode auf UseWindowsGroups ermöglicht die Verwendung von PrincipalPermissionAttribute basierend auf Windows-Gruppennamen.

Das PrincipalPermissionAttribute wird auf jeden Vorgang angewendet, sodass der Aufrufer Mitglied der Windows-Administratorgruppe sein muss, wie im folgenden Beispielcode gezeigt.

[PrincipalPermission(SecurityAction.Demand,
                             Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
    double result = n1 + n2;
    return result;
}

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Der Client kommuniziert erfolgreich mit jedem Vorgang, wenn er unter einem Konto ausgeführt wird, das zur Administratorgruppe gehört. Andernfalls wird der Zugang verweigert. Um einen Autorisierungsfehler zu provozieren, führen Sie den Client unter einem Konto aus, das nicht zur Administratorgruppe gehört. Drücken Sie im Konsolenfenster die EINGABETASTE, um den Client zu schließen.

Ein Dienst kann über Autorisierungsfehler benachrichtigt werden, indem man einen IErrorHandler implementiert. Informationen zur Implementierung von IErrorHandler finden Sie unter Erweitern der Fehlerbehandlung und -berichterstellung.

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.

  3. Wenn Sie das Beispiel in einer Einzelcomputer- oder einer computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.