$server->setAuthCodeStorage(new Storage\AuthCodeStorage());
$authCodeGrant = new \League\OAuth2\Server\Grant\AuthCodeGrant();
$server->addGrantType($authCodeGrant);
$refrehTokenGrant = new \League\OAuth2\Server\Grant\RefreshTokenGrant();
$server->addGrantType($refrehTokenGrant);
// Routing setup
$request = (new Request())->createFromGlobals();
$router = new \Orno\Route\RouteCollection();
$router->get('/authorize', function (Request $request) use($server) {
    // First ensure the parameters in the query string are correct
    try {
        $authParams = $server->getGrantType('authorization_code')->checkAuthorizeParams();
    } catch (\Exception $e) {
        return new Response(json_encode(['error' => $e->errorType, 'message' => $e->getMessage()]), $e->httpStatusCode, $e->getHttpHeaders());
    }
    // Normally at this point you would show the user a sign-in screen and ask them to authorize the requested scopes
    // ...
    // ...
    // ...
    // Create a new authorize request which will respond with a redirect URI that the user will be redirected to
    $redirectUri = $server->getGrantType('authorization_code')->newAuthorizeRequest('user', 1, $authParams);
    $response = new Response('', 200, ['Location' => $redirectUri]);
    return $response;
});
$router->post('/access_token', function (Request $request) use($server) {
    try {
        $response = $server->issueAccessToken();
        return new Response(json_encode($response), 200);
    } catch (\Exception $e) {
        return new Response(json_encode(['error' => $e->errorType, 'message' => $e->getMessage()]), $e->httpStatusCode, $e->getHttpHeaders());
    }
});
Esempio n. 2
0
use RelationalExample\Model;
use RelationalExample\Storage;
include __DIR__ . '/vendor/autoload.php';
// Set up the OAuth 2.0 resource server
$sessionStorage = new Storage\SessionStorage();
$accessTokenStorage = new Storage\AccessTokenStorage();
$clientStorage = new Storage\ClientStorage();
$scopeStorage = new Storage\ScopeStorage();
$server = new ResourceServer($sessionStorage, $accessTokenStorage, $clientStorage, $scopeStorage);
// Routing setup
$request = (new Request())->createFromGlobals();
$router = new \Orno\Route\RouteCollection();
// GET /tokeninfo
$router->get('/tokeninfo', function (Request $request) use($server) {
    $accessToken = $server->getAccessToken();
    $session = $server->getSessionStorage()->getByAccessToken($accessToken);
    $token = ['owner_id' => $session->getOwnerId(), 'owner_type' => $session->getOwnerType(), 'access_token' => $accessToken, 'client_id' => $session->getClient()->getId(), 'scopes' => $accessToken->getScopes()];
    return new Response(json_encode($token));
});
// GET /users
$router->get('/users', function (Request $request) use($server) {
    $results = (new Model\Users())->get();
    $users = [];
    foreach ($results as $result) {
        $user = ['username' => $result['username'], 'name' => $result['name']];
        if ($server->getAccessToken()->hasScope('email')) {
            $user['email'] = $result['email'];
        }
        if ($server->getAccessToken()->hasScope('photo')) {
            $user['photo'] = $result['photo'];
        }
        $users[] = $user;