Skip to content

Commit 777d69f

Browse files
committed
Remove OAuth2 Implicit flow
1 parent df90903 commit 777d69f

File tree

7 files changed

+38
-207
lines changed

7 files changed

+38
-207
lines changed

routing/services/services.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ services:
5656
# Grants
5757
SimpleSAML\Module\oidc\Server\Grants\AuthCodeGrant:
5858
factory: ['@SimpleSAML\Module\oidc\Factories\Grant\AuthCodeGrantFactory', 'build']
59-
SimpleSAML\Module\oidc\Server\Grants\OAuth2ImplicitGrant:
60-
factory: ['@SimpleSAML\Module\oidc\Factories\Grant\OAuth2ImplicitGrantFactory', 'build']
6159
SimpleSAML\Module\oidc\Server\Grants\ImplicitGrant:
6260
factory: ['@SimpleSAML\Module\oidc\Factories\Grant\ImplicitGrantFactory', 'build']
6361
SimpleSAML\Module\oidc\Server\Grants\RefreshTokenGrant:

src/Factories/AuthorizationServerFactory.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use SimpleSAML\Module\oidc\Server\AuthorizationServer;
2525
use SimpleSAML\Module\oidc\Server\Grants\AuthCodeGrant;
2626
use SimpleSAML\Module\oidc\Server\Grants\ImplicitGrant;
27-
use SimpleSAML\Module\oidc\Server\Grants\OAuth2ImplicitGrant;
2827
use SimpleSAML\Module\oidc\Server\Grants\RefreshTokenGrant;
2928
use SimpleSAML\Module\oidc\Server\RequestRules\RequestRulesManager;
3029
use SimpleSAML\Module\oidc\Server\ResponseTypes\IdTokenResponse;
@@ -37,7 +36,6 @@ public function __construct(
3736
private readonly AccessTokenRepository $accessTokenRepository,
3837
private readonly ScopeRepository $scopeRepository,
3938
private readonly AuthCodeGrant $authCodeGrant,
40-
private readonly OAuth2ImplicitGrant $oAuth2ImplicitGrant,
4139
private readonly ImplicitGrant $implicitGrant,
4240
private readonly RefreshTokenGrant $refreshTokenGrant,
4341
private readonly IdTokenResponse $idTokenResponse,
@@ -63,11 +61,6 @@ public function build(): AuthorizationServer
6361
$this->moduleConfig->getAccessTokenDuration(),
6462
);
6563

66-
$authorizationServer->enableGrantType(
67-
$this->oAuth2ImplicitGrant,
68-
$this->moduleConfig->getAccessTokenDuration(),
69-
);
70-
7164
$authorizationServer->enableGrantType(
7265
$this->implicitGrant,
7366
$this->moduleConfig->getAccessTokenDuration(),

src/Factories/Grant/OAuth2ImplicitGrantFactory.php

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/Server/Grants/ImplicitGrant.php

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace SimpleSAML\Module\oidc\Server\Grants;
66

77
use DateInterval;
8+
use League\OAuth2\Server\Grant\ImplicitGrant as OAuth2ImplicitGrant;
89
use League\OAuth2\Server\RequestTypes\AuthorizationRequest as OAuth2AuthorizationRequest;
910
use League\OAuth2\Server\ResponseTypes\RedirectResponse;
1011
use League\OAuth2\Server\ResponseTypes\ResponseTypeInterface;
@@ -17,24 +18,32 @@
1718
use SimpleSAML\Module\oidc\Factories\Entities\AccessTokenEntityFactory;
1819
use SimpleSAML\Module\oidc\Repositories\Interfaces\AccessTokenRepositoryInterface;
1920
use SimpleSAML\Module\oidc\Server\Exceptions\OidcServerException;
21+
use SimpleSAML\Module\oidc\Server\Grants\Interfaces\AuthorizationValidatableWithCheckerResultBagInterface;
2022
use SimpleSAML\Module\oidc\Server\Grants\Traits\IssueAccessTokenTrait;
2123
use SimpleSAML\Module\oidc\Server\RequestRules\Interfaces\ResultBagInterface;
2224
use SimpleSAML\Module\oidc\Server\RequestRules\RequestRulesManager;
2325
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\AcrValuesRule;
2426
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\AddClaimsToIdTokenRule;
27+
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\ClientIdRule;
2528
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\MaxAgeRule;
2629
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\PromptRule;
30+
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\RedirectUriRule;
2731
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\RequestedClaimsRule;
2832
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\RequestObjectRule;
2933
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\RequiredNonceRule;
3034
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\RequiredOpenIdScopeRule;
3135
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\ResponseTypeRule;
36+
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\ScopeRule;
37+
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\StateRule;
3238
use SimpleSAML\Module\oidc\Server\RequestTypes\AuthorizationRequest;
3339
use SimpleSAML\Module\oidc\Services\IdTokenBuilder;
3440
use SimpleSAML\Module\oidc\Utils\RequestParamsResolver;
3541
use SimpleSAML\OpenID\Codebooks\HttpMethodsEnum;
3642

37-
class ImplicitGrant extends OAuth2ImplicitGrant
43+
/**
44+
* @psalm-suppress PropertyNotSetInConstructor
45+
*/
46+
class ImplicitGrant extends OAuth2ImplicitGrant implements AuthorizationValidatableWithCheckerResultBagInterface
3847
{
3948
use IssueAccessTokenTrait;
4049

@@ -49,14 +58,15 @@ class ImplicitGrant extends OAuth2ImplicitGrant
4958

5059
public function __construct(
5160
protected IdTokenBuilder $idTokenBuilder,
52-
DateInterval $accessTokenTTL,
61+
protected DateInterval $accessTokenTTL,
5362
AccessTokenRepositoryInterface $accessTokenRepository,
54-
RequestRulesManager $requestRulesManager,
63+
protected RequestRulesManager $requestRulesManager,
5564
protected RequestParamsResolver $requestParamsResolver,
56-
string $queryDelimiter,
65+
protected string $queryDelimiter,
5766
AccessTokenEntityFactory $accessTokenEntityFactory,
5867
) {
59-
parent::__construct($accessTokenTTL, $queryDelimiter, $requestRulesManager);
68+
parent::__construct($accessTokenTTL, $queryDelimiter);
69+
6070
$this->accessTokenRepository = $accessTokenRepository;
6171
$this->accessTokenEntityFactory = $accessTokenEntityFactory;
6272
}
@@ -112,10 +122,8 @@ public function validateAuthorizationRequestWithCheckerResultBag(
112122
ServerRequestInterface $request,
113123
ResultBagInterface $resultBag,
114124
): OAuth2AuthorizationRequest {
115-
$oAuth2AuthorizationRequest =
116-
parent::validateAuthorizationRequestWithCheckerResultBag($request, $resultBag);
117-
118125
$rulesToExecute = [
126+
ScopeRule::class,
119127
RequestObjectRule::class,
120128
PromptRule::class,
121129
MaxAgeRule::class,
@@ -129,14 +137,35 @@ public function validateAuthorizationRequestWithCheckerResultBag(
129137

130138
$this->requestRulesManager->predefineResultBag($resultBag);
131139

140+
/** @var string $redirectUri */
141+
$redirectUri = $resultBag->getOrFail(RedirectUriRule::class)->getValue();
142+
/** @var string|null $state */
143+
$state = $resultBag->getOrFail(StateRule::class)->getValue();
144+
/** @var \SimpleSAML\Module\oidc\Entities\Interfaces\ClientEntityInterface $client */
145+
$client = $resultBag->getOrFail(ClientIdRule::class)->getValue();
146+
147+
// Some rules need certain things available in order to work properly...
148+
$this->requestRulesManager->setData('default_scope', $this->defaultScope);
149+
$this->requestRulesManager->setData('scope_delimiter_string', self::SCOPE_DELIMITER_STRING);
150+
132151
$resultBag = $this->requestRulesManager->check(
133152
$request,
134153
$rulesToExecute,
135154
$this->shouldUseFragment(),
136155
$this->allowedAuthorizationHttpMethods,
137156
);
138157

139-
$authorizationRequest = AuthorizationRequest::fromOAuth2AuthorizationRequest($oAuth2AuthorizationRequest);
158+
/** @var \League\OAuth2\Server\Entities\ScopeEntityInterface[] $scopes */
159+
$scopes = $resultBag->getOrFail(ScopeRule::class)->getValue();
160+
161+
$authorizationRequest = new AuthorizationRequest();
162+
$authorizationRequest->setClient($client);
163+
$authorizationRequest->setRedirectUri($redirectUri);
164+
$authorizationRequest->setScopes($scopes);
165+
$authorizationRequest->setGrantTypeId($this->getIdentifier());
166+
if ($state !== null) {
167+
$authorizationRequest->setState($state);
168+
}
140169

141170
// nonce existence is validated using a rule, so we can get it from there.
142171
$authorizationRequest->setNonce((string)$resultBag->getOrFail(RequiredNonceRule::class)->getValue());

src/Server/Grants/OAuth2ImplicitGrant.php

Lines changed: 0 additions & 131 deletions
This file was deleted.

src/Services/Container.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
use SimpleSAML\Module\oidc\Factories\FormFactory;
5151
use SimpleSAML\Module\oidc\Factories\Grant\AuthCodeGrantFactory;
5252
use SimpleSAML\Module\oidc\Factories\Grant\ImplicitGrantFactory;
53-
use SimpleSAML\Module\oidc\Factories\Grant\OAuth2ImplicitGrantFactory;
5453
use SimpleSAML\Module\oidc\Factories\Grant\RefreshTokenGrantFactory;
5554
use SimpleSAML\Module\oidc\Factories\IdTokenResponseFactory;
5655
use SimpleSAML\Module\oidc\Factories\JwksFactory;
@@ -71,7 +70,6 @@
7170
use SimpleSAML\Module\oidc\Server\AuthorizationServer;
7271
use SimpleSAML\Module\oidc\Server\Grants\AuthCodeGrant;
7372
use SimpleSAML\Module\oidc\Server\Grants\ImplicitGrant;
74-
use SimpleSAML\Module\oidc\Server\Grants\OAuth2ImplicitGrant;
7573
use SimpleSAML\Module\oidc\Server\Grants\RefreshTokenGrant;
7674
use SimpleSAML\Module\oidc\Server\RequestRules\RequestRulesManager;
7775
use SimpleSAML\Module\oidc\Server\RequestRules\Rules\AcrValuesRule;
@@ -436,9 +434,6 @@ public function __construct()
436434
);
437435
$this->services[AuthCodeGrant::class] = $authCodeGrantFactory->build();
438436

439-
$oAuth2ImplicitGrantFactory = new OAuth2ImplicitGrantFactory($moduleConfig, $requestRuleManager);
440-
$this->services[OAuth2ImplicitGrant::class] = $oAuth2ImplicitGrantFactory->build();
441-
442437
$implicitGrantFactory = new ImplicitGrantFactory(
443438
$moduleConfig,
444439
$this->services[IdTokenBuilder::class],
@@ -463,7 +458,6 @@ public function __construct()
463458
$accessTokenRepository,
464459
$scopeRepository,
465460
$this->services[AuthCodeGrant::class],
466-
$this->services[OAuth2ImplicitGrant::class],
467461
$this->services[ImplicitGrant::class],
468462
$this->services[RefreshTokenGrant::class],
469463
$this->services[IdTokenResponse::class],

tests/unit/src/Server/Grants/OAuth2ImplicitGrantTest.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)