# WebService Authentifizierung



## TeamBob (6. Mrz 2009)

Hi
Also meine WebSerive braucht natürlich auch eine gewisse Sicherheit. Das bereits bestehende Project wozu ich einen WS entwickeln soll besitzt bereits eine Passwortabfrage. Es soll möglich sein das man sich beim starten des WS indentifizieren muss mit einen gegeben Username und Passwort. Ich weis jedoch nicht ob das so einfach geht und ich einfach in meine WS den bereits vorhanden security log einbinden kann oder nicht. Ich habe schon im Netz rumgeschaut aber kein passendes Tut. gefunden nur für .Net oder MS usw.
Ich benutze Eclipse WS mit Tomcat als server und einer MYSql Datenbank dazu.
Ich hoffe jemand kann mir bei dem Thema weiterhelfen.
Danke


----------



## mvitz (6. Mrz 2009)

Der Webservice den man für Atlassian Jira benutzen kann löst das folgendermaßen:

Es gibt eine Webservicemethode wo du Username/Passwort an den Server schickst, zurück bekommst du einen sogenannten Authtoken.
Diesen Authtoken, musst du dann für jede weitere Anfrage mitschicken. Evtl. kannst du das ja so lösen.

Ansonsten müsstest du bei jeder Abfrage dir Username/Passwort mitschicken lassen und bevor du die eigentliche Aufgabe erledigst prüfen ob beides gültig ist -> mehr Overhead.

Ansonsten, wenn der Webservice nur Lokal (LAN) aufgerufen wird, könnte man das evtl. auch über IPs lösen.


----------



## TeamBob (6. Mrz 2009)

hmm...
Also würde es möglich sein die Security Methode vom Project zu verwenden die bereits eine passwort abfrage macht.
Man müsste diese im WS nur aufrufen und so verändern das diese als Antwort eine AuthToken mitsenden der ja dann wahrscheinlich im SOAP Header gespeichert wird, sodass man ein gewissen session hat oder sehe ich das jetzt falsch.
Hast du genau Tipps wie man dies umsetzen könnte?
Kannst mir ja mal ne Pm mit deiner ICQ-NR. schicken, dann kann man das näher besprechen...
Naja danke dir


----------



## mvitz (6. Mrz 2009)

Da ich mich bei der Sache nur einen Client entwickelt habe kann ich dir eben per Pseudocode zeigen, wie das geht. Ist eigentlich keine Session, sondern ein immerwährendes senden des Tokens. Sessions gibt es für einen Webservice meines wissens nach nicht.

Pseudocode:
[HIGHLIGHT="Java"]WebService service = new WebService();
String authToken = service.login("test", "geheim");
Document doc = service.getDocument(authToken, "ichWillDasDokument");
service.logout(authToken);[/HIGHLIGHT]

Wie das intern geregelt wird, kann ich dir nicht sagen, ich weiß auch nicht, ob der Authtoken jedesmal derselbe ist oder sich ändert. (Das kann ich aber am Montag nachgucken, wenn bedarf besteht).

Ansonsten machst du das so:

Nach dem Aufruf login, passiert auf dem Server:
1) Username vorhanden?
2) Password passt zum Usernamen?
3) zufälliges authToken generieren
4) authToken + Zeitstempel abspeichern
5) bei jedem Methoden aufruf gucken, ob authToken vorhanden
6) aufruf bearbeiten + neuen Zeitstempel für authToken abspeichern
6) wenn logout aufgerufen wird, authToken löschen, ansonsten authToken nach x minuten löschen


----------



## TeamBob (6. Mrz 2009)

ok das sind schonmal sehr interessante Informationen und Hilfen.
Also es wäre echt eine riesen Hilfe, wenn du mir Montag dazu mehr
schreiben könntest. Also sprich nicht nur den Pseudocode
sondern alles was du so darüber hast. Das würde mir echt helfen.
Danke ich freue mich..


----------



## TeamBob (12. Mrz 2009)

Naja ich bin jetzt immernoch nicht soviel weiter mit meiner WebService Authentifizierung, weil ich einfach nicht weis wie ich bei der ganzen Sache ansetzen sollte.

Also der User muss sich irgendwie anmelden mit einen Passwort und einen Username und diese muss überprüft werden und dann die dazugehörigen rechte bekommen. Wie schon gesagt eine Username / Passwort abfrage besteht schon im Project aber im WS funktioniert das ja irgendwie anders. Dieser Status dann muss ja dann auch irgendwie weitergegeben werden sodass ich das irgendwie übergeben. Weil bei der Suchanfrage muss man bis jetzt ein Suchbegriff eingeben und seine ID. Die ID sollte dann wegfallen und es sollte dann die ID übergeben werden die er bei der anmeldung bekommmen hat, sodas ihn ein status zugeorndet werden kann usw. Ich weis aber gar nicht wie ich das übergebe ohne das komplette XML-File auseinander zunehmen. 
Wie gesagt ich habe gar keinen Ansatz, vielleicht könnt ihr mir ja helfen.
Danke


----------



## mvitz (12. Mrz 2009)

Wie gesagt, entweder gibts du dem Benutzer in der Anmeldung einen Key (oder auch ID) zurück und dieser muss diese dann jedesmal mitschicken. (So macht das auch Jira, habe das heute nachgeschaut. Hier muss man sich einloggen, bekommt einen Key zurück und muss diesen Key immer mitschicken.) Ander Möglichkeit wäre evtl. per IP.


----------



## TeamBob (13. Mrz 2009)

hmm....
Hast du den vielleicht irgendwelche Qullcodes für mich?
Weil ich weis gar nicht wie ich das angehen soll im dem Bereich


----------



## mvitz (13. Mrz 2009)

Nein Quellcode kann ich dir leider keinen geben. Ich würde es wie gesagt so machen:

1. User loggt sich ein:

```
token = login(username, password);
```
1.1 Server macht folgendes:

```
String login(username, password) {
  boolean canLogin = canLogin(username, password);
  if (canLogin) {
    String token = calculateToken(username, password);
    addTokenToList(token);
  }
}
```
2. User ruft methode auf:

```
result = suche(dokumentname, token);
```
2.1 Server macht folgendes:

```
Document suche(dokumentname, token) {
  if (checkToken(token)) {
    return findeDokument(dokumentanem);
  } else {
    throw new Exception("Nicht erlaubter Zugriff!");
  }
}
```


```
boolean checkToken(token) {
  if (tokenMap.exists(token)) {
    return true;
  }
  return false;
}
```


----------



## TeamBob (13. Mrz 2009)

hmm.... 
Ich sehe schon wie du das meinst, muss ich da jetzt extra einen server programmieren oder wo schreibe ich das denn hin.


----------



## mvitz (13. Mrz 2009)

Auf den Server, der deinen Webservice ausführt?

Evtl brauchst du dann dafür noch ne Datenbank anstelle der Map.


----------



## Wildcard (17. Mrz 2009)

Warum eigentlich nicht WS-Security verwenden?


----------

