22. Januar 2024 19:11
POST https://mds-ktst.bzst.bund.de/dip/start/DAC7 HTTP/2
Host:mds-ktst.bzst.bund.de
Authorization:Bearer xxxxxx
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
HttpClientBZSt := HttpClientBZSt.HttpClient;
HttpClientBZSt.BaseAddress := UriBZSt.Uri('https://mds-ktst.bzst.bund.de');
HttpClientBZSt.DefaultRequestHeaders.Clear;
HttpClientBZSt.DefaultRequestHeaders.Add('Host', 'mds-ktst.bzst.bund.de');
HttpClientBZSt.DefaultRequestHeaders.TryAddWithoutValidation('Authorization', STRSUBSTNO('%1 %2', 'Bearer', GlobalTokenBzst)); // Variable ist auch gefüllt mit dem richtigen Token, getestet per MESSAGE(FORMAT(HttpClientBZSt.DefaultRequestHeaders));
HttpResponseMessage := HttpClientBZSt.PostAsync('/dip/start/DAC7', HttpContentPar).Result; // HttpContentPar ist dabei eine leere Variable, weil es keinen Content gibt
ResultStringPar := HttpResponseMessage.Content.ReadAsStringAsync.Result; // MESSAGE darauf ergibt dann obige Fehlermeldung
HttpClientHandlerBzst := HttpClientHandlerBzst.HttpClientHandler;
HttpClientHandlerBzst.ServerCertificateCustomValidationCallback := HttpClientHandlerBzst.DangerousAcceptAnyServerCertificateValidator;
HttpClientBZSt := HttpClientBZSt.HttpClient(HttpClientHandlerBzst);
Bearer error="invalid_request", error_description="No bearer token found in the request"
13. Februar 2024 16:31
18. Juli 2024 15:08
apimapi hat geschrieben:Ich erhalte das Token zurück und speichere es mir ab.
Dr31zehn hat geschrieben: Wir haben ein Zertifikat wie in dem Beispiel angeben generiert und bei der Registrierung der Schnittstelle hinterlegt.
Wenn wir jedoch das Zertifikat versuchen zu laden, kriegen wir nur Fehler um die Ohren geschmissen. Erst als wir unser RSA_PSS Zertifikat in ein normales RSA umgewandelt haben, konnten wir es laden.
Wenn wir jetzt damit Anfragen an die Schnittstelle schicken, bekommen wir aber nur 400 - Bad Request.
public function createJWT() {
$key = file_get_contents(self::DIP_PATH_TO_PRIVATE_KEY);
$jwt = new JWT($key, 'HS256');
$token = $jwt->encode([
'iss' => self::DIP_CLIENT_ID, // die ID, die ich bei der Registrierung bekommen habe
'sub' => self::DIP_CLIENT_ID, // die ID, die ich bei der Registrierung bekommen habe
'aud' => self::DIP_URL . 'auth/realms/mds', // DIP_URL: https://mds-ktst.bzst.bund.de/
'iat' => Carbon::now()->timestamp,
'exp' => Carbon::now()->addMinutes(5)->timestamp,
'jti' => str_random(35),
'nbf' => Carbon::now()->subMinute()->timestamp
]);
return $token;
}
16. Oktober 2024 16:53
VorlonTech hat geschrieben:Evtl. könnte ich an euren Beispielen sehen, was bei mir falsch ist.
Dr31zehn hat geschrieben:Wir benutzen kein MSDynamic, sondern c#, aber vielleicht kannst du mir trotzdem hilfreiche Infos geben?
Header
"alg": "RS256",
"typ": "JWT"
Payload
"iss": "CLIENT-ID vom BZST vergeben nach Beantragung im Portal",
"sub": "CLIENT-ID",
"aud": "https://mds-ktst.bzst.bund.de/auth/realms/mds",
"iat": "unixtime",
"exp": "unixtime+5min",
"jti": "{generierteguid}",
"nbf": "unixtime-2h1m"
SignArray := EncodingUtf8.UTF8.GetBytes(SignStringPar);
StringReader := StringReader.StringReader(KeyText);
PemReader := PemReader.PemReader(StringReader);
AsymetricKeyParameter := PemReader.ReadObject;
ISigner := SignerUtilities.GetSigner('SHA256WithRSA');
ISigner.Init(TRUE, AsymetricKeyParameter);
ISigner.BlockUpdate(SignArray, 0, SignArray.Length);
SignatureArray := ISigner.GenerateSignature;
EXIT(Base64Convert.ToBase64String(SignatureArray));
StringContent := StringContent.StringContent('grant_type=client_credentials&scope=openid&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=' + RequestToken, Encoding.UTF8, ReturnApplicationFormURLEncoded);
HttpContent := StringContent;