diff --git a/src/OAuth2/OpenID/Controller/TokenController.php b/src/OAuth2/OpenID/Controller/TokenController.php new file mode 100644 index 000000000..e93b5d20b --- /dev/null +++ b/src/OAuth2/OpenID/Controller/TokenController.php @@ -0,0 +1,46 @@ +idToken = $idToken; + $this->userClaimsStorage = $userClaimsStorage; + } + + public function grantAccessToken(RequestInterface $request, ResponseInterface $response) + { + $accessToken = parent::grantAccessToken($request, $response); + + if ($accessToken != null && array_key_exists('scope', $accessToken) && in_array('openid', explode(' ', $accessToken['scope']))) { + $grantTypeIdentifier = $request->request('grant_type'); + $grantType = $this->grantTypes[$grantTypeIdentifier]; + + $userId = $grantType->getUserId(); + $scope = $grantType->getScope(); + + $claims = $this->userClaimsStorage->getUserClaims($userId, $scope); + $accessToken['id_token'] = $this->idToken->createIdToken($grantType->getClientId(), $userId, null, $claims); + } + + return $accessToken; + } +} diff --git a/src/OAuth2/Server.php b/src/OAuth2/Server.php index cf040c2bc..b5a2a777f 100644 --- a/src/OAuth2/Server.php +++ b/src/OAuth2/Server.php @@ -4,6 +4,7 @@ use OAuth2\Controller\ResourceControllerInterface; use OAuth2\Controller\ResourceController; +use OAuth2\OpenID\Controller\TokenController as OpenIDTokenController; use OAuth2\OpenID\Controller\UserInfoControllerInterface; use OAuth2\OpenID\Controller\UserInfoController; use OAuth2\OpenID\Controller\AuthorizeController as OpenIDAuthorizeController; @@ -616,6 +617,10 @@ protected function createDefaultTokenController() $accessTokenResponseType = $this->getAccessTokenResponseType(); + if ($this->config['use_openid_connect']) { + return new OpenIDTokenController($accessTokenResponseType, $this->storages['client'], $this->getIdTokenResponseType(), $this->storages['user_claims'], $this->grantTypes, $this->clientAssertionType, $this->getScopeUtil()); + } + return new TokenController($accessTokenResponseType, $this->storages['client'], $this->grantTypes, $this->clientAssertionType, $this->getScopeUtil()); }