Как можно защитить свой АПИ в SPA или SSR приложение?
Если хотите защититься от того что-бы кто-то во фронте использовал ваше API, то можно использовать https://developer.mozilla.org/ru/docs/Web/HTTP/CORS.
Если хотите защититься от чьего-то бекэнда - то тут намного сложнее, почти невозможно. Скорее всего это отслеживать и банить. Или при какой-то плотности запросов выдавать запрос на капчу.
Для yii2 есть штатный механизм токенов - bearer token
В своем проекте я создал BaseController наследуемый от ActiveController и в нем методpublic function behaviors()
	{
		$arBehaviors = parent::behaviors();

		$arBehaviors['authenticator'] = [
			'class' => HttpBearerAuth::class,
		];

		$arBehaviors['contentNegotiator'] = [
			'class' => ContentNegotiator::class,
			'formats' => [
				'application/json' => Response::FORMAT_JSON,
			],
		];

		return $arBehaviors;
	}
Во vue отправляется ajax запрос на back с логином/паролем. На back'е примерно такой actionpublic function actionLogin()
	{
		$model = new LoginForm();

		if ($model->load(Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {
			$oUser = User::findOne(Yii::$app->user->id);
			$oUser->generateAuthKey();
			$oUser->save();

			$userData = $oUser->toArray();
			unset($userData['password_hash']);
			unset($userData['password_reset_token']);
			return ['access_token' => $oUser->getAuthKey(), 'user' => $userData];
		}
		else {
			$model->validate();
			return $model;
		}
	}