Commit b1546a33 authored by Blanke, Daniela's avatar Blanke, Daniela
Browse files

Update distributed-rest.html

parent f99d2dc1
Pipeline #8026 passed with stage
in 1 minute and 10 seconds
......@@ -233,7 +233,7 @@ public class AccountEntry {
<span>Erläuterungen zu den Annotationen aus dem Package <code>javax.ws.rs</code> in dem obigen Code-Beispiel:</span>
<ul>
<li><b>@Path</b>: In der Klasse <code>WebServiceStarter</code> wird ein HTTP-Server gestartet, dem eine Ressourcen-Konfiguration als Argument übergeben wird (s. <code>WebServiceStarter</code>, Zeilen 7-8). Mittels der Ressourcen-Konfiguration wird Jersey angewiesen alle Klassen im Package <code>resources</code> dahingehend zu analysieren, ob sie mit einer Annotation <code>@Path</code> versehen sind (z.B. <code>AccountResource</code>, Zeile 9). Falls diese Annotation vorhanden ist, handelt es sich um eine REST-Ressourcenklasse, die unter dem entsprechenden Pfad erreichbar gemacht wird.</li>
<li><b>@GET</b>, <b>@POST</b>, etc.: Die einzelnen Methoden einer Ressourcenklasse reagieren auf nur spezifische HTTP-Methoden, wenn sie mit einer entsprechenden Annotation versehen sind, z.B. <code>@GET</code> (Zeile 14) oder <code>@POST</code> (Zeile 18).</li>
<li><b>@GET</b>, <b>@POST</b>, etc.: Die einzelnen Methoden einer Ressourcenklasse reagieren nur auf spezifische HTTP-Methoden, wenn sie mit einer entsprechenden Annotation versehen sind, z.B. <code>@GET</code> (Zeile 14) oder <code>@POST</code> (Zeile 18).</li>
<li><b>@PathParam</b>: Der Pfad einer Ressourcenklasse kann durch eine entsprechende Annotation an ihren Methoden dynamisch erweitert werden, z.B. <code>@Path("{id}")</code> (Zeile 23). Die angehängte Id wird von Jersey aus der URI extrahiert und mittels der Annotation <code>@PathParam("id")</code> als Methodenargument injiziert (Zeile 24). Hier wird implizit ein Cast von <code>String</code> auf <code>int</code> durchgeführt, der auch fehlschlagen kann.</li>
<li><b>@Consumes</b> und <b>@Produces</b>: An den Methoden einer Ressourcenklasse kann mittels der Annotationen <code>@Consumes</code> (Zeile 19) und <code>@Produces</code> (Zeile 15) explizit angegeben werden, in welchen Formaten die annotierten Methoden Eingaben verarbeiten bzw. Ausgaben erzeugen können. Diese Annotationen sind insbesondere dann notwendig, wenn je nach Eingabeformat (HTTP-Header <code>Content-Type</code>) oder angefordertem Ausgabeformat (HTTP-Header <code>Accept</code>) eine unterschiedliche Methode der Ressourcenklasse ausgeführt werden soll.</li>
</ul>
......@@ -531,7 +531,7 @@ public class AccountResourceTest extends JerseyTest {
<h4>JWT (JSON Web Token)</h4>
<p>REST-Webservices sind per Konvention zustandslos, d.h. auf dem Server werden keine Sessions für die aktuell verbundenen Clients verwalten. Demzufolge muss jeder Client selbst seine Session verwaltet und mit jedem HTTP-Request ein Token o.ä. an den Server senden, über das er authentifiziert und für den Zugriff autorisiert werden kann. Eine standardisierte Möglichkeit zur Erzeugung derartiger Tokens findet sich in <a href="https://tools.ietf.org/html/rfc7519">RFC 7519</a>, in dem sogenannte <a href="https://jwt.io/"><i>JSON Web Token (JWT)</i></a> eingeführt werden.</p>
<p>REST-Webservices sind per Konvention zustandslos, d.h. auf dem Server werden keine Sessions für die aktuell verbundenen Clients verwaltet. Demzufolge muss jeder Client selbst seine Session verwalten und mit jedem HTTP-Request ein Token o.ä. an den Server senden, über das er authentifiziert und für den Zugriff autorisiert werden kann. Eine standardisierte Möglichkeit zur Erzeugung derartiger Tokens findet sich in <a href="https://tools.ietf.org/html/rfc7519">RFC 7519</a>, in dem sogenannte <a href="https://jwt.io/"><i>JSON Web Token (JWT)</i></a> eingeführt werden.</p>
<div class="cite"><a href="https://tools.ietf.org/html/rfc7519">"JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted." (Internet Engineering Task Force)</a></div>
......@@ -686,7 +686,7 @@ public class UserResource {
<li>Serialisieren des JWS-Objekts in das JWT-Format (Zeile 22).</li>
</ul>
</li>
<li><code>AuthenticationFilter</code>: Das JWT, das der Client bei weiteren Anfragen im HTTP-Header mitsendet, soll bei gesicherten Ressourcen-Methoden geprüft werden. Die Sicherung einer Ressourcen-Methode erfolgt über einen eigene Annotation, die hier <code>@Secured</code> heißen soll und in den Zeilen 12-13 der Klasse <code>AuthenticationFilter</code> deklariert wird. Diese Klasse implementiert das Interface <code>ContainerRequestFilter</code> und funktioniert ihrem Namen entsprechend als Filter vor jedem Aufruf einer Methode mit der Annotation <code>@Secured</code>. Die Verifikation des JWT erfolgt in drei Schritten:
<li><code>AuthenticationFilter</code>: Das JWT, das der Client bei weiteren Anfragen im HTTP-Header mitsendet, soll bei gesicherten Ressourcen-Methoden geprüft werden. Die Sicherung einer Ressourcen-Methode erfolgt über eine eigene Annotation, die hier <code>@Secured</code> heißen soll und in den Zeilen 12-13 der Klasse <code>AuthenticationFilter</code> deklariert wird. Diese Klasse implementiert das Interface <code>ContainerRequestFilter</code> und funktioniert ihrem Namen entsprechend als Filter vor jedem Aufruf einer Methode mit der Annotation <code>@Secured</code>. Die Verifikation des JWT erfolgt in drei Schritten:
<ul>
<li>Zunächst wird das JWT als sogenanntes <a href="https://www.iana.org/assignments/http-authschemes/">Bearer Token</a> aus dem HTTP-Header extrahiert (Zeilen 17-23).</li>
<li>Anschließend wird aus dem JWT wieder ein JWS-Objekt erzeugt (Zeile 27) und dieses mit demselben <i>Secret</i> verifiziert, das auch zur Signatur verwendet worden ist (Zeilen 28-29).</li>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment