test(e2e): whoami absichern und die gemeldete Fassung festnageln

Vier Faelle, die genau die Fehler wiederfinden wuerden, um die es in 2.7.1
ging:

- whoami nennt Bindung und Rechte, und zwar dieselben, die provisioniert
  wurden
- whoami gibt den Klartextwert des Tokens nicht heraus. Eine Auskunft ueber
  ein Token darf das Token nicht weiterreichen
- whoami ohne Token antwortet 401
- Health meldet dieselbe Fassung, die changelog.json fuehrt. Das ist der
  Fall, der #346 nicht wiederkommen laesst: Ein fester Wert in der
  Konfiguration faellt sonst niemandem auf, weil die Datei gitignored ist

Ausserdem: Wird der Shared Key an whoami geschickt, sagt der Endpunkt das
jetzt (not_a_token) statt "Token unbekannt". Der Shared Key ist kein Token -
er hat weder Bindung noch Rechteliste, und ohne den Hinweis sucht der
Aufrufer den Fehler bei seinem Token.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Deploymentcenter Bot
2026-08-30 21:09:38 +02:00
co-authored by Claude Opus 5
parent 3b56839a1e
commit 0c1d269665
2 changed files with 68 additions and 0 deletions
+15
View File
@@ -22,6 +22,7 @@ declare(strict_types=1);
require_once __DIR__ . '/../../../../src/bootstrap.php';
use Deploymentcenter\Core\Config;
use Deploymentcenter\Core\Db;
use Deploymentcenter\Core\Http;
use Deploymentcenter\Core\TokenManager;
@@ -42,6 +43,20 @@ $manager = new TokenManager($db);
$token = $manager->validateToken($presented, null);
if ($token === null) {
// Der haeufigste Irrtum an dieser Stelle: Es wurde der Shared Key
// geschickt. Der ist kein Token - er hat weder Bindung noch Rechteliste,
// und die Frage "wer bin ich" hat fuer ihn keine Antwort. Ohne diesen
// Hinweis sucht der Aufrufer den Fehler bei seinem Token.
$sharedKey = (string)Config::get('security.shared_key', '');
if ($sharedKey !== '' && hash_equals($sharedKey, $presented)) {
Http::fail(
401,
'not_a_token',
'Das ist der Shared Key, kein Agenten-Token. Er hat keine Bindung und keine '
. 'Rechteliste - dieser Endpunkt kann darueber nichts sagen.'
);
}
Http::fail(401, 'invalid_token', 'Token unbekannt, widerrufen oder abgelaufen.');
}