Home   Cover Cover Cover Cover
 

SOAP-Header in .NET


Zu Abschnitt 7.4.3 des Buchs

In diesem Beispiel wird ein SOAP-Header zur Unterstützung der Autentifizierung von Benutzern verwendet. Nur wer sich über die Methode Login autentifiziert hat kann die GetTime Methode aufrufen. Die Benutzerdaten (cookie) werden in einem SOAP-Header (siehe AuthHeader) mitgeführt, der beim Aufruf von Login das erste mal erzeugt wird. Über die Daten im SOAP-Header wird ein Benutzer identifiziert.

Weil hier die Verwendung von SOAP-Headern gezeigt werden soll, werden keine Algorithmen zur Verschlüsselung verwendet.

HeaderService.asmx
<%@ WebService Language="C#" Class="Kapitel7.HeaderTimeService" %>

using System;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Serialization;

namespace Kapitel7 {
  //SOAP Header Implementierung
  public class AuthHeader : SoapHeader {
    public string cookie;
  }

  [WebService(Namespace="http://dotnet.jku.at/time/", Description="SOAP-Header-Bspl.")]
  public class HeaderTimeService : WebService {
    public AuthHeader curUser;  // Header-Eintrag
    
    [WebMethod (Description="Autentifiziert den Benutzer")]
    [SoapHeader("curUser", Direction=SoapHeaderDirection.Out)]
    public bool Login(string user, string pwd) {
      curUser = new AuthHeader();  // Eintrag erzeugen, der dann zur´┐Żckgesendet wird
      if (Authenticate(user, pwd)) {    
        curUser.cookie = CreateCookie(user);  // Benutzer bekannt, also cookie setzen! 
        return true;
      }
      return false;
    }
    
    [WebMethod(Description="Liefert die aktuelle Zeit")]
    [SoapHeader("curUser", Direction=SoapHeaderDirection.In)]
    public string GetTime() {
      if (ValidateCookie(curUser.cookie ))  // ist der Benutzer autorisiert?
        return System.DateTime.Now.ToLongTimeString();
      else
        throw new SoapHeaderException("Keine Berechtigung!", // Fehler des Client!
                                      SoapException.ClientFaultCode);
    }
    
    //Hier sollten Verschluesselungsalgorithmen eingesetzt werden!
    bool ValidateCookie(string cookie) { return cookie == "admin"; }
    bool Authenticate(string usr, string pwd) { return usr == "admin" && pwd=="dotnet"; }
    string CreateCookie(string user) { return user; }
  }
}

Ausführung

Der nächste Link führt Sie zu einer automatisch erzeugten Seite. D.h. für den oben dargestellten Code wird eine HTML-Seite erzeugt, welche das Web-Service beschreibt. Weil SOAP-Header verwendet werden, können die Methoden nur über SOAP-HTTP aufgerufen werden. Daher enthält die erzeugte HTML-Seite auch keine Links zum Testen des Web-Services.

Verwenden Sie zum Testen folgende Daten:
Benutzer-ID: admin
Passwort: dotnet

http://dotnet.jku.at/book/samples/7/header/HeaderService.asmx

Eine weitere Möglichkeit, wie Sie dieses Web-Service testen können, ist das Webservice Studio zu verwenden, welches auf der Begleit-CD zum Buch "Die .NET-Technologie" enthalten ist.

'Login' erzeugt einen SOAP-Header