# Wie am besten eine Authentifzierung einbauen?



## Spitfire777 (20. Jul 2012)

Hallo,

ich nutze einen JBoss Applikationsserver und bin dabei, mir einen RESTful Web Service zu basteln (ich benutze EJB3). 
Als Grundlage habe ich z.B. eine User-Tabelle auf meinem Datenbankserver mit einem SHA1-gehashtem Passwort und einem Salt-Wert. 

Jetzt möchte ich z.B. dass nur ein eingeloggter Nutzer Operationen am System durchführen kann (z.B. das Auslesen von Daten).

Wie stelle ich das am besten an? Per HTTP anmelden? Wie mach ich das am besten? Wie kann ich in meiner REST-Ressource-Klasse das am besten absichern?

Danke!


----------



## FArt (20. Jul 2012)

Let me google that for you


----------



## FArt (20. Jul 2012)

RESTEasy JAX-RS


----------



## Spitfire777 (21. Jul 2012)

FArt hat gesagt.:


> RESTEasy JAX-RS



Ja, das habe ich schon gesehen. Nur nutze ich EJB für Präsentationsschicht und Anwendungskern. 
Für die Präsentationsschicht habe ich z.B. ein solches Interface: 


```
@Produces({ MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON })
@Consumes
@Path("/users")
public interface IUserResource {
	
	@GET
	@Path("{id:[0-9]+}")
	@Formatted
	public User findUserById(@PathParam("id") Long id, @Context UriInfo uriInfo);
...
```

Und dazu eine (stark vereinfachte) Implementierung, welche dann den Anwendungskern aufruft.

```
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class UserResource implements IUserResource {
	
	@Inject
	private UserService us;

	@Override
	public User findUserById(Long id, UriInfo uriInfo) {
		final User user = us.findUserById(id);
		return user;
	}
...
```

Nun gibt es im Tutorial folgende Bemerkung:


> NOTE!!! Do not turn on this switch if you are using EJBs. The EJB container will provide this functionality instead of Resteasy.



Macht das nun Probleme?


----------



## FArt (23. Jul 2012)

Dann sicher doch, wie vorgeschlagen, die EJBs absichern.


----------



## Spitfire777 (29. Jul 2012)

Okay jetzt habe ich noch ein paar Fragen: Wie soll das ganze jetzt benutzerseitig ablaufen? 

Ich hab mir sowas überlegt: Benutzer loggt sich mittels Benutzername und Passwort per GET /sometokengenerator?u=username&pw=password123 ein und erhält einen zufälligen Hash, der er für seine künftigen Aktionen immer mitübergibt. 
Wer jedoch den Hashwert abfängt, kann eben Sessionriding betreiben. Ich dachte daran, den Hashwert an eine IP-Adresse oder so zu binden. Aber so ganz sicher bin ich mir dabei nicht.

Oder für jede Aktion müssen eben immer Username und Passwort übergeben werden, aber bei jedem Tastendruck z.B. in einer Mobil-App Username und Passwort im Klartext zu senden, ist mir auch zu unsicher.


----------



## F.S.WhiTeY (30. Jul 2012)

hey,

wenn du unbedingt tokens speichern willst nimm cokies die sind sicherer als die reine get methode. das ganze zu hashen ist dabei eine gute idee.

an eine ip-adresse binden hat nur im intranet sinn, es sei denn deine user haben alle eine statisch adresse bei ihrem isp.

zum klartext senden: dafür gibt es ssl bzw. https.das ist zwar auch nicht 100%ig aber sicherer als http, denn da werden alle pakete im klartext gesendet. wenn du bei den apps allerdings "keylogger" meinst, da wüsste ich nicht wie man das verhindern sollte, da ist eh alles zu spät.

lg

david


----------



## Spitfire777 (30. Jul 2012)

Ja, danke, werde mir das weiter anschauen. 

Ich meinte keinen Keylogger, sondern, dass es unsicherer ist, wenn Benutzerdaten im Klartext sehr oft über das Netzwerk geschickt werden. (Was durch häufige Benutzeraktionen in einer App ja zwangsläufig passiert)


----------

