Skip to content

Commit ce15fae

Browse files
committed
Check issuer state during credential issuance
1 parent 5406a0c commit ce15fae

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/Controllers/VerifiableCredentials/CredentialIssuerCredentialController.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use SimpleSAML\Module\oidc\Entities\AccessTokenEntity;
1111
use SimpleSAML\Module\oidc\ModuleConfig;
1212
use SimpleSAML\Module\oidc\Repositories\AccessTokenRepository;
13+
use SimpleSAML\Module\oidc\Repositories\IssuerStateRepository;
1314
use SimpleSAML\Module\oidc\Repositories\UserRepository;
1415
use SimpleSAML\Module\oidc\Server\Exceptions\OidcServerException;
1516
use SimpleSAML\Module\oidc\Services\LoggerService;
@@ -53,6 +54,7 @@ public function __construct(
5354
protected readonly RequestParamsResolver $requestParamsResolver,
5455
protected readonly UserRepository $userRepository,
5556
protected readonly Did $did,
57+
protected readonly IssuerStateRepository $issuerStateRepository,
5658
) {
5759
if (!$this->moduleConfig->getVerifiableCredentialEnabled()) {
5860
$this->loggerService->warning('Verifiable Credential capabilities not enabled.');
@@ -121,6 +123,30 @@ public function credential(Request $request): Response
121123
);
122124
}
123125

126+
$issuerState = $accessToken->getIssuerState();
127+
if (!is_string($issuerState)) {
128+
$this->loggerService->error(
129+
'CredentialIssuerCredentialController::credential: Issuer state missing in access token.',
130+
['access_token' => $accessToken],
131+
);
132+
return $this->routes->newJsonErrorResponse(
133+
'invalid_token',
134+
'Issuer state missing in access token.',
135+
401,
136+
);
137+
}
138+
139+
if ($this->issuerStateRepository->findValid($issuerState) === null) {
140+
$this->loggerService->warning(
141+
'CredentialIssuerCredentialController::credential: Issuer state not valid.',
142+
['issuer_state' => $issuerState],
143+
);
144+
return $this->routes->newJsonErrorResponse(
145+
'invalid_token',
146+
'Issuer state not valid.',
147+
);
148+
}
149+
124150
if (
125151
isset($requestData[ClaimsEnum::CredentialConfigurationId->value]) &&
126152
isset($requestData[ClaimsEnum::CredentialIdentifier->value])
@@ -652,7 +678,11 @@ public function credential(Request $request): Response
652678
throw new OpenIdException('Invalid credential format ID.');
653679
}
654680

655-
$this->loggerService->debug('response', [
681+
$this->loggerService->debug('Revoking issuer state.', ['issuerState' => $issuerState]);
682+
;
683+
$this->issuerStateRepository->revoke($issuerState);
684+
685+
$this->loggerService->debug('Returning credential response.', [
656686
'credentials' => [
657687
['credential' => $verifiableCredential->getToken()],
658688
],

0 commit comments

Comments
 (0)