Announcement

Collapse
No announcement yet.

WebServices Authentifizierung für alle .NET Framework-Varianten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WebServices Authentifizierung für alle .NET Framework-Varianten

    Hallo,

    ich möchte eine Nicht-Windows-Basierte Authentifizierung eines WebServices realisieren, wobei Benutzername und PW aus einer eigenen DB abgefragt werden.

    Testweise habe ich einen Ansatz mit eigenem Soap-Header entwickelt.

    Server/WS:

    Code:
    public class SecuredTestWebService : System.Web.Services.WebService
    {
        public AuthSoapHd spAuthenticationHeader;
    
        public SecuredTestWebService()
        {
    
            //Uncomment the following line if using designed components 
            //InitializeComponent(); 
        }
    
        [WebMethod, SoapHeader("spAuthenticationHeader")]
        public string HelloWorld()
        {
            if (spAuthenticationHeader.strUserName == "TestUser" && spAuthenticationHeader.strPassword == "TestPassword")
            {
                return "User Name : " + spAuthenticationHeader.strUserName + " and " + "Password : " + spAuthenticationHeader.strPassword;
            }
            else
            {
                return "Access Denied";
            }
        }
    
    }
    public class AuthSoapHd : SoapHeader
    {
        public string strUserName;
        public string strPassword;
    }
    
    }
    Client:

    Code:
     public partial class SimpleWebForm : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                localhost.SecuredTestWebService objWebService = new localhost.SecuredTestWebService();
                localhost.AuthSoapHd objAuthSoapHeader = new localhost.AuthSoapHd();
    
                string strUsrName = ConfigurationManager.AppSettings["UserName"];
                string strPassword = ConfigurationManager.AppSettings["Password"];
    
                objAuthSoapHeader.strUserName = strUsrName;
                objAuthSoapHeader.strPassword = strPassword;
               
                objWebService.AuthSoapHdValue = objAuthSoapHeader;
                string str = objWebService.HelloWorld();
    
                Response.Write(str);
    
            }
        }


    Wird der WebService über eine ASP.NET Seite konsomiert, dann funktioniert alles prima.

    Möchte ich ihn allerdings über WPF oder eine mobile .NET CF Anwendung verwenden, dann funktioniert das nicht, da er das Property meines SoapHeaders (AuthSoapHdValue) nicht kennt:

    Code:
                objWebService.AuthSoapHdValue = objAuthSoapHeader;
    Irgendwie scheint dieses Konstrukt also nur für ASP.NET verwendbar zu sein.


    Ich möchte aber eine WebService Authentifizierung entwickeln, die sowohl für ASP.NET, als auch für WPF, "alte" Windows Anwendungen und vor allem für .NET CF verwendbar ist.

    Muss ich da nur etwas in meinem Code-Snipped umbauen oder geht mein Ansatz gar nicht.


    Welchen Ansatz könnte man alternativ wählen?
    Wie bereits gesagt... ich möchte keine Windows-Basierte Anmeldung sondern habe meine Benutzerdaten in einer eigenen DB.


    Bye,
    Martin

  • #2
    Hallo,

    der ASP.net-Webservice kann wie eine gewöhnliche ASP.net-Webanwendung geschützt werden. Einstellungen zB über die IIS-Verwaltung.

    Auf Client-Seite kann per CredentialCache die Infos zur Authentifizierung übergeben werden.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hi gfoidl,

      kann ich das auch über die web.config Regeln?
      Wenn ja, kannst Du ein kurzes Beispiel oder ein Stichwort nennen, nach dem ich googeln kann?


      Bye,
      Martin

      Comment


      • #4
        kann ich das auch über die web.config Regeln?
        http://www.google.at/search?hl=de&q=web.config+authentication&btnG=Goog le-Suche&meta=&aq=1&oq=web.config+auth


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Danke!

          Manchmal ist es einfacher als man denkt :-)

          z.B:

          <location path="WS/MyWebService.asmx">

          <system.web>

          <authorization>

          <deny users="?"/>

          <allow roles="urlallowed"/>

          <deny users="*"/>

          </authorization>

          </system.web>

          </location>

          Comment

          Working...
          X