https://github.com/cnam/security-jwt-service-provider
Silex security jwt service provider (silex 1.x and 2.x version) allow oauth2 header
https://github.com/cnam/security-jwt-service-provider
php security-jwt silex silex-security
Last synced: 8 months ago
JSON representation
Silex security jwt service provider (silex 1.x and 2.x version) allow oauth2 header
- Host: GitHub
- URL: https://github.com/cnam/security-jwt-service-provider
- Owner: cnam
- License: gpl-2.0
- Created: 2015-01-08T13:11:13.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2017-02-16T12:01:12.000Z (over 9 years ago)
- Last Synced: 2025-04-10T01:09:36.448Z (about 1 year ago)
- Topics: php, security-jwt, silex, silex-security
- Language: PHP
- Homepage:
- Size: 76.2 KB
- Stars: 60
- Watchers: 6
- Forks: 39
- Open Issues: 8
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Silex security jwt service provider
[](https://travis-ci.org/cnam/security-jwt-service-provider)
[](https://packagist.org/packages/cnam/security-jwt-service-provider) [](https://packagist.org/packages/cnam/security-jwt-service-provider) [](https://packagist.org/packages/cnam/security-jwt-service-provider) [](https://packagist.org/packages/cnam/security-jwt-service-provider)
This provider usage with silex security
require silex
> for usage stable version silex your need used security jwt service provider version in 1.*
> for usage silex 2.0 version or not stable master your need usage version 2.*
## Installation
> composer require cnam/security-jwt-service-provider:1.*
Or add your composer.json
> require "cnam/security-jwt-service-provider":"1.*"
## Simple example
### Initialise silex application
```php
require_once __DIR__ . '/../../vendor/autoload.php';
$app = new Silex\Application(['debug' => true]);
```
### Create configuration
add config for security jwt
```php
$app['security.jwt'] = [
'secret_key' => 'Very_secret_key',
'life_time' => 86400,
'options' => [
'username_claim' => 'name', // default name, option specifying claim containing username
'header_name' => 'X-Access-Token', // default null, option for usage normal oauth2 header
'token_prefix' => 'Bearer',
]
];
```
Create users, any user provider implementing interface UserProviderInterface
```php
$app['users'] = function () use ($app) {
$users = [
'admin' => array(
'roles' => array('ROLE_ADMIN'),
// raw password is foo
'password' => '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg==',
'enabled' => true
),
];
return new InMemoryUserProvider($users);
};
```
Add config for silex security
```php
$app['security.firewalls'] = array(
'login' => [
'pattern' => 'login|register|oauth',
'anonymous' => true,
],
'secured' => array(
'pattern' => '^.*$',
'logout' => array('logout_path' => '/logout'),
'users' => $app['users'],
'jwt' => array(
'use_forward' => true,
'require_previous_session' => false,
'stateless' => true,
)
),
);
```
Register silex providers
``` php
$app->register(new Silex\Provider\SecurityServiceProvider());
$app->register(new Silex\Provider\SecurityJWTServiceProvider());
```
### Example for authorization and request for protected resources
```php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\User\InMemoryUserProvider;
use Symfony\Component\Security\Core\User\User;
$app->post('/api/login', function(Request $request) use ($app){
$vars = json_decode($request->getContent(), true);
try {
if (empty($vars['_username']) || empty($vars['_password'])) {
throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $vars['_username']));
}
/**
* @var $user User
*/
$user = $app['users']->loadUserByUsername($vars['_username']);
if (! $app['security.encoder.digest']->isPasswordValid($user->getPassword(), $vars['_password'], '')) {
throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $vars['_username']));
} else {
$response = [
'success' => true,
'token' => $app['security.jwt.encoder']->encode(['name' => $user->getUsername()]),
];
}
} catch (UsernameNotFoundException $e) {
$response = [
'success' => false,
'error' => 'Invalid credentials',
];
}
return $app->json($response, ($response['success'] == true ? Response::HTTP_OK : Response::HTTP_BAD_REQUEST));
});
$app->get('/api/protected_resource', function() use ($app){
return $app->json(['hello' => 'world']);
});
$app->run();
```
Full example in directory tests/mock/app.php
And should for tests correct work silex-security-jwt-provider