Skip to content

Commit 15a5081

Browse files
author
ogorkun
committed
MC-32830: Do not store admin and customer tokens in DB
1 parent e8853e0 commit 15a5081

File tree

4 files changed

+54
-11
lines changed

4 files changed

+54
-11
lines changed

app/code/Magento/Integration/Model/Oauth/Token.php

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99
use Magento\Framework\App\ObjectManager;
1010
use Magento\Framework\Oauth\Exception as OauthException;
1111
use Magento\Framework\Oauth\Helper\Oauth as OauthHelper;
12+
use Magento\Integration\Api\Data\UserTokenParametersInterfaceFactory;
1213
use Magento\Integration\Api\Exception\UserTokenException;
14+
use Magento\Integration\Api\UserTokenIssuerInterface;
1315
use Magento\Integration\Api\UserTokenReaderInterface;
16+
use Magento\Integration\Model\CustomUserContext;
1417
use Magento\Integration\Model\ResourceModel\Oauth\Token\Collection as TokenCollection;
1518

1619
/**
@@ -84,6 +87,16 @@ class Token extends \Magento\Framework\Model\AbstractModel
8487
*/
8588
private $reader;
8689

90+
/**
91+
* @var UserTokenIssuerInterface
92+
*/
93+
private $issuer;
94+
95+
/**
96+
* @var UserTokenParametersInterfaceFactory
97+
*/
98+
private $tokenParamsFactory;
99+
87100
/**
88101
* Initialize dependencies.
89102
*
@@ -98,6 +111,8 @@ class Token extends \Magento\Framework\Model\AbstractModel
98111
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
99112
* @param array $data
100113
* @param UserTokenReaderInterface|null $reader
114+
* @param UserTokenIssuerInterface|null $issuer
115+
* @param UserTokenParametersInterfaceFactory|null $paramsFactory
101116
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
102117
*/
103118
public function __construct(
@@ -111,7 +126,9 @@ public function __construct(
111126
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
112127
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
113128
array $data = [],
114-
?UserTokenReaderInterface $reader = null
129+
?UserTokenReaderInterface $reader = null,
130+
?UserTokenIssuerInterface $issuer = null,
131+
?UserTokenParametersInterfaceFactory $paramsFactory = null
115132
) {
116133
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
117134
$this->_keyLengthFactory = $keyLengthFactory;
@@ -120,6 +137,8 @@ public function __construct(
120137
$this->_oauthData = $oauthData;
121138
$this->_oauthHelper = $oauthHelper;
122139
$this->reader = ObjectManager::getInstance()->get(UserTokenReaderInterface::class);
140+
$this->issuer = ObjectManager::getInstance()->get(UserTokenIssuerInterface::class);
141+
$this->tokenParamsFactory = ObjectManager::getInstance()->get(UserTokenParametersInterfaceFactory::class);
123142
}
124143

125144
/**
@@ -195,23 +214,35 @@ public function convertToAccess()
195214
*
196215
* @param int $userId
197216
* @return $this
217+
* @deprecated New proper SPI for warking with tokens has been introduced.
218+
* @see UserTokenIssuerInterface
198219
*/
199220
public function createAdminToken($userId)
200221
{
201-
$this->setAdminId($userId);
202-
return $this->saveAccessToken(UserContextInterface::USER_TYPE_ADMIN);
222+
return $this->loadByToken(
223+
$this->issuer->create(
224+
new CustomUserContext((int) $userId, UserContextInterface::USER_TYPE_ADMIN),
225+
$this->tokenParamsFactory->create()
226+
)
227+
);
203228
}
204229

205230
/**
206231
* Create access token for a customer
207232
*
208233
* @param int $userId
209234
* @return $this
235+
* @deprecated New proper SPI for warking with tokens has been introduced.
236+
* @see UserTokenIssuerInterface
210237
*/
211238
public function createCustomerToken($userId)
212239
{
213-
$this->setCustomerId($userId);
214-
return $this->saveAccessToken(UserContextInterface::USER_TYPE_CUSTOMER);
240+
return $this->loadByToken(
241+
$this->issuer->create(
242+
new CustomUserContext((int) $userId, UserContextInterface::USER_TYPE_CUSTOMER),
243+
$this->tokenParamsFactory->create()
244+
)
245+
);
215246
}
216247

217248
/**
@@ -386,6 +417,7 @@ public function loadByToken($token)
386417
$this->setAdminId($data->getUserContext()->getUserId());
387418
}
388419
$this->setId(PHP_INT_MAX);
420+
$this->setToken($token);
389421

390422
return $this;
391423
}

app/code/Magento/Integration/Model/OpaqueToken/Issuer.php

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Magento\Integration\Api\UserTokenIssuerInterface;
1515
use Magento\Integration\Model\Oauth\Token;
1616
use Magento\Integration\Model\Oauth\TokenFactory as TokenModelFactory;
17+
use Magento\Framework\Oauth\Helper\Oauth as OauthHelper;
1718

1819
/**
1920
* Issues opaque tokens (legacy).
@@ -25,12 +26,18 @@ class Issuer implements UserTokenIssuerInterface
2526
*/
2627
private $tokenFactory;
2728

29+
/**
30+
* @var OauthHelper
31+
*/
32+
private $helper;
33+
2834
/**
2935
* @param TokenModelFactory $tokenFactory
3036
*/
31-
public function __construct(TokenModelFactory $tokenFactory)
37+
public function __construct(TokenModelFactory $tokenFactory, OauthHelper $helper)
3238
{
3339
$this->tokenFactory = $tokenFactory;
40+
$this->helper = $helper;
3441
}
3542

3643
/**
@@ -42,20 +49,24 @@ public function create(UserContextInterface $userContext, UserTokenParametersInt
4249
$token = $this->tokenFactory->create();
4350

4451
if ($userContext->getUserType() === UserContextInterface::USER_TYPE_CUSTOMER) {
45-
$token = $token->createCustomerToken($userContext->getUserId());
52+
$token->setAdminId($userContext->getUserId());
4653
} elseif ($userContext->getUserType() === UserContextInterface::USER_TYPE_ADMIN) {
4754
$token = $token->createAdminToken($userContext->getUserId());
4855
} else {
4956
throw new UserTokenException('Can only create tokens for customers and admin users');
5057
}
51-
58+
$token->setUserType($userContext->getUserType());
59+
$token->setType(Token::TYPE_ACCESS);
60+
$token->setToken($this->helper->generateToken());
61+
$token->setSecret($this->helper->generateTokenSecret());
5262
if ($params->getForcedIssuedTime()) {
5363
if ($params->getForcedIssuedTime()->getTimezone()->getName() !== 'UTC') {
5464
throw new UserTokenException('Invalid forced issued time provided');
5565
}
5666
$token->setCreatedAt($params->getForcedIssuedTime()->format('Y-m-d H:i:s'));
57-
$token->save();
5867
}
68+
$token = $token->save();
69+
5970

6071
return $token->getToken();
6172
}

app/code/Magento/Integration/Model/OpaqueToken/Reader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function read(string $token): UserToken
4545
{
4646
/** @var Token $tokenModel */
4747
$tokenModel = $this->tokenFactory->create();
48-
$tokenModel = $tokenModel->loadByToken($token);
48+
$tokenModel = $tokenModel->load($token, 'token');
4949

5050
if (!$tokenModel->getId()) {
5151
throw new UserTokenException('Token does not exist');

app/code/Magento/JwtUserToken/etc/db_schema_whitelist.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"revoke_before": true
77
},
88
"constraint": {
9-
"JWT_AUTH_REVOKED_USER_TYPE_ID_USER_ID": true
9+
"PRIMARY": true
1010
}
1111
}
1212
}

0 commit comments

Comments
 (0)