Installation
composer.json:
"require": {
"da/auth-common-bundle": "dev-master",
"da/api-server-bundle": "dev-master"
}
composer update (or composer.phar update on Linux).AppKernel.php:
new Da\ApiServerBundle\DaApiServerBundle(),
Basic Configuration
security.yml to enable API token validation:
security:
firewalls:
api:
pattern: ^/api
da_api: true
stateless: true
X-API-Security-Token header is sent with requests.First Use Case
Da\ApiServerBundle\Controller\ApiController:
use Da\ApiServerBundle\Controller\ApiController;
class MyApiController extends ApiController {
public function getAction() {
return $this->json(['data' => 'Hello, API!']);
}
}
routing.yml:
my_api:
path: /api/hello
defaults: { _controller: MyBundle:MyApi:get }
Token-Based Authentication
X-API-Security-Token for stateless API authentication.security.yml firewall configuration.Da\ApiServerBundle\Security\ApiTokenAuthenticator for custom logic.OAuth2 Support
Authorization: Bearer <token> in security.yml:
api:
pattern: ^/api/oauth
da_api: true
stateless: true
oauth: true
league/oauth2-server).Resource Controllers
ApiController for CRUD operations:
class UserApiController extends ApiController {
public function getUserAction($id) {
$user = $this->getDoctrine()->getRepository('App:User')->find($id);
return $this->json($user);
}
}
json() for responses and getRequest() for input validation.Middleware Integration
kernel.request):
$event->getResponse()->headers->set('X-API-Version', '1.0');
EntityManager via dependency injection:
public function __construct(EntityManagerInterface $em) {
$this->em = $em;
}
Validator component:
$errors = $this->get('validator')->validate($data);
$response->headers->set('Access-Control-Allow-Origin', '*');
Deprecated Dependencies
da/auth-common-bundle (unmaintained since 2014). Fork or replace with modern alternatives (e.g., lexik/jwt-authentication-bundle).Security Quirks
# security.yml
api:
pattern: ^/api
da_api: true
stateless: true
ip_whitelist: [192.168.1.0/24] # Custom extension
monolog for logging failed token attempts.Routing Conflicts
/api to avoid clashes with frontend routes.php bin/console debug:router to verify routes.OAuth2 Limitations
league/oauth2-server alongside.Token Validation Failures
X-API-Security-Token header presence and security.yml config.APP_DEBUG=true) for detailed errors.403 Forbidden Errors
da_api firewall is correctly applied to the route pattern.stateless: true setting for API endpoints.Custom Authenticators
Da\ApiServerBundle\Security\ApiTokenAuthenticator:
class CustomAuthenticator extends ApiTokenAuthenticator {
public function authenticateToken($token) {
// Custom logic (e.g., DB lookup)
return $user;
}
}
security.yml:
api:
pattern: ^/api
da_api: true
stateless: true
authenticator: your.bundle.custom_authenticator
Response Transformers
Da\ApiServerBundle\Response\JsonResponse for custom serialization:
class CustomJsonResponse extends JsonResponse {
public function setData($data, $status = 200, array $headers = []) {
$data['meta'] = ['timestamp' => time()];
parent::setData($data, $status, $headers);
}
}
Event Listeners
api.security.token.validated:
$eventDispatcher->addListener('api.security.token.validated', function ($event) {
$event->getUser()->addRole('API_USER');
});
X-API-Security-Token (exact case). Use strtoupper() if needed:
$token = strtoupper($request->headers->get('x-api-security-token'));
symfony/cache):
$cache = $this->get('cache.app');
$token = $cache->get('api_token_' . $tokenHash);
How can I help you explore Laravel packages today?