123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- <?php
- /**
- * Test authentication mechanisms in REST.
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Webapi\Authentication;
- /**
- * @magentoApiDataFixture consumerFixture
- */
- class RestTest extends \Magento\TestFramework\TestCase\WebapiAbstract
- {
- /** @var \Magento\TestFramework\Authentication\Rest\OauthClient[] */
- protected $_oAuthClients = [];
- /** @var \Magento\Integration\Model\Oauth\Consumer */
- protected static $_consumer;
- /** @var \Magento\Integration\Model\Oauth\Token */
- protected static $_token;
- /** @var string */
- protected static $_consumerKey;
- /** @var string */
- protected static $_consumerSecret;
- /** @var string */
- protected static $_verifier;
- protected function setUp()
- {
- $this->_markTestAsRestOnly();
- parent::setUp();
- }
- /**
- * Create a consumer
- */
- public static function consumerFixture($date = null)
- {
- /** Clear the credentials because during the fixture generation, any previous credentials are invalidated */
- \Magento\TestFramework\Authentication\OauthHelper::clearApiAccessCredentials();
- $consumerCredentials = \Magento\TestFramework\Authentication\OauthHelper::getConsumerCredentials($date);
- self::$_consumerKey = $consumerCredentials['key'];
- self::$_consumerSecret = $consumerCredentials['secret'];
- self::$_verifier = $consumerCredentials['verifier'];
- self::$_consumer = $consumerCredentials['consumer'];
- self::$_token = $consumerCredentials['token'];
- }
- protected function tearDown()
- {
- parent::tearDown();
- $this->_oAuthClients = [];
- if (isset(self::$_consumer)) {
- self::$_consumer->delete();
- self::$_token->delete();
- }
- }
- public function testGetRequestToken()
- {
- /** @var $oAuthClient \Magento\TestFramework\Authentication\Rest\OauthClient */
- $oAuthClient = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $requestToken = $oAuthClient->requestRequestToken();
- $this->assertNotEmpty($requestToken->getRequestToken(), "Request token value is not set");
- $this->assertNotEmpty($requestToken->getRequestTokenSecret(), "Request token secret is not set");
- $this->assertEquals(
- \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN,
- strlen($requestToken->getRequestToken()),
- "Request token value length should be " . \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN
- );
- $this->assertEquals(
- \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN_SECRET,
- strlen($requestToken->getRequestTokenSecret()),
- "Request token secret length should be " . \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN_SECRET
- );
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage 401 Unauthorized
- */
- public function testGetRequestTokenExpiredConsumer()
- {
- $this::consumerFixture('2012-01-01 00:00:00');
- $this::$_consumer->setUpdatedAt('2012-01-01 00:00:00');
- $this::$_consumer->save();
- /** @var $oAuthClient \Magento\TestFramework\Authentication\Rest\OauthClient */
- $oAuthClient = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $oAuthClient->requestRequestToken();
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage 401 Unauthorized
- */
- public function testGetRequestTokenInvalidConsumerKey()
- {
- $oAuthClient = $this->_getOauthClient('invalid_key', self::$_consumerSecret);
- $oAuthClient->requestRequestToken();
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage 401 Unauthorized
- */
- public function testGetRequestTokenInvalidConsumerSecret()
- {
- $oAuthClient = $this->_getOauthClient(self::$_consumerKey, 'invalid_secret');
- $oAuthClient->requestRequestToken();
- }
- public function testGetAccessToken()
- {
- $oAuthClient = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $requestToken = $oAuthClient->requestRequestToken();
- $accessToken = $oAuthClient->requestAccessToken(
- $requestToken->getRequestToken(),
- self::$_verifier,
- $requestToken->getRequestTokenSecret()
- );
- $this->assertNotEmpty($accessToken->getAccessToken(), "Access token value is not set.");
- $this->assertNotEmpty($accessToken->getAccessTokenSecret(), "Access token secret is not set.");
- $this->assertEquals(
- \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN,
- strlen($accessToken->getAccessToken()),
- "Access token value length should be " . \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN
- );
- $this->assertEquals(
- \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN_SECRET,
- strlen($accessToken->getAccessTokenSecret()),
- "Access token secret length should be " . \Magento\Framework\Oauth\Helper\Oauth::LENGTH_TOKEN_SECRET
- );
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage 401 Unauthorized
- */
- public function testGetAccessTokenInvalidVerifier()
- {
- $oAuthClient = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $requestToken = $oAuthClient->requestRequestToken();
- $oAuthClient->requestAccessToken(
- $requestToken->getRequestToken(),
- 'invalid verifier',
- $requestToken->getRequestTokenSecret()
- );
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage 401 Unauthorized
- */
- public function testGetAccessTokenConsumerMismatch()
- {
- $oAuthClientA = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $requestTokenA = $oAuthClientA->requestRequestToken();
- $oauthVerifierA = self::$_verifier;
- self::consumerFixture();
- $oAuthClientB = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $oAuthClientB->requestRequestToken();
- $oAuthClientB->requestAccessToken(
- $requestTokenA->getRequestToken(),
- $oauthVerifierA,
- $requestTokenA->getRequestTokenSecret()
- );
- }
- /**
- * @expectedException \Exception
- * @expectedExceptionMessage 400 Bad Request
- */
- public function testAccessApiInvalidAccessToken()
- {
- $oAuthClient = $this->_getOauthClient(self::$_consumerKey, self::$_consumerSecret);
- $requestToken = $oAuthClient->requestRequestToken();
- $accessToken = $oAuthClient->requestAccessToken(
- $requestToken->getRequestToken(),
- self::$_verifier,
- $requestToken->getRequestTokenSecret()
- );
- $accessToken->setAccessToken('invalid');
- $oAuthClient->validateAccessToken($accessToken);
- }
- protected function _getOauthClient($consumerKey, $consumerSecret)
- {
- if (!isset($this->_oAuthClients[$consumerKey])) {
- $credentials = new \OAuth\Common\Consumer\Credentials($consumerKey, $consumerSecret, TESTS_BASE_URL);
- $this->_oAuthClients[$consumerKey] = new \Magento\TestFramework\Authentication\Rest\OauthClient(
- $credentials
- );
- }
- return $this->_oAuthClients[$consumerKey];
- }
- }
|