Contributte Oauth2-server
# Content
# Prologue
Contributte/OAuth2Server
brings League/OAuth2Server
to your Nette applications.
Please take a look at official documentation: https://oauth2.thephpleague.com/ (opens new window)
# Setup
composer require contributte/oauth2-server
You also need to generate public and private key and an encryption key, for more information how to do it check
out League/OAuth2Server
documentation: https://oauth2.thephpleague.com/installation/ (opens new window).
extensions:
oauth2.server: Contributte\OAuth2Server\DI\OAuth2ServerExtension
2
# Configuration
Do not forget to change the permissions on your public and private key (chmod 0600 public.key private.key
)
Or you can turn off the permission check in configuration (permissionCheck
) - not recommended.
oauth2.server:
encryptionKey: "encryption key"
privateKey:
path: "/path/to/private.key"
passPhrase: "foo"
permissionCheck: true
publicKey:
path: "/path/to/public.key"
passPhrase:
permissionCheck: true
grants:
authCode: true
clientCredentials: true
implicit: true
password: true
refreshToken: true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
For encryption key, you can use Defuse\Crypt\Key::loadFromAsciiSafeString($string)
or key in a string form.
oauth2.server:
encryptionKey: Defuse\Crypto\Key::loadFromAsciiSafeString('keyInStringForm')
# ...
2
3
Do not forget to register repositories as a services!
For more information about The PHP League's OAuth2 server, check out it's documentation (opens new window). This package provides tiny wrappaper and integration into Nette framework.
# Example
<?php declare(strict_types = 1);
namespace App\Presenters;
use Contributte\OAuth2Server\Http\Oauth2Response;
use Contributte\Psr7\Psr7ResponseFactory;
use Contributte\Psr7\Psr7ServerRequestFactory;
use GuzzleHttp\Psr7\Utils;
use League\OAuth2\Server\AuthorizationServer;
use League\OAuth2\Server\Exception\OAuthServerException;
use Nette\Application\UI\Presenter;
use Nette\Http\IResponse;
use Nette\Http\IRequest;
use Throwable;
class OAuth2Presenter extends Presenter
{
/** @var AuthorizationServer @inject */
public $authorizationServer;
public function actionEndpoint(): void
{
/** @var IRequest $request */
$request = $this->getHttpRequest();
$psr7Request = Psr7ServerRequestFactory::fromNette($request);
/** @var IResponse $response */
$response = $this->gethttpResponse();
$psr7Response = Psr7ResponseFactory::fromNette($response);
try {
$reply = $this->authorizationServer->respondToAccessTokenRequest($psr7Request, $psr7Response);
} catch (OAuthServerException $exception) {
$reply = $exception->generateHttpResponse($psr7Response);
} catch (Throwable $exception) {
$body = Utils::streamFor('php://temp');
$body->write($exception->getMessage());
$reply = $psr7Response->withStatus(500)->withBody($body);
}
$this->sendResponse(new Oauth2Response($reply));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44