dev-master
9999999-devOAuth 2.0 authentication for Mittwald SPACES
MIT
The Requires
The Development Requires
 Wallogit.com
                    
                    2017 © Pedro Peláez
                         Wallogit.com
                    
                    2017 © Pedro Peláez
                    
                    
                    
                    
                
                
            
OAuth 2.0 authentication for Mittwald SPACES
Client library to integrate an OAuth2.0 authorization flow into PHP applications., (*2)
Provide your own implementation of the Mw\Spaces\OAuth2\Context
interface:, (*3)
namespace Your\Namespace;
class Context implements \Mw\Spaces\OAuth2\Context
{
    public function getRedirectURI()
    {
        return "https://my-application.example/oauth-redir";
    }        
}
Note that the /oauth-redir path needs to point to an
application-specific OAuth2 redirection handler implemented by
you., (*4)
Create the OAuth2.0 provider:, (*5)
$ctx = new \Your\Namespace\Context(); $opts = new \Mw\Spaces\OAuth2\EnvironmentOptions($_SERVER); $provider = new \Mw\Spaces\OAuth2\SpacesProvider($opts, $ctx);
Next, retrieve the authorization URL and redirect your user there:, (*6)
$authorizationURL = $provider->getAuthorizationUrl();
$_SESSION["spaces.de/auth/csrf"] = $provider->getState();
header("Location: " . $authorizationURL);
The identity provider will prompt the user for their credentials, and - on success - will redirect the user back to your Redirect URI. When handling the redirected request, you'll need to retrieve the authorization code and check the CSRF value:, (*7)
$state = $_GET["state"];
$code  = $_GET["code"];
if ($_SESSION["spaces.de/auth/csrf"] != $state) {
    die("...");
}
After that, you can use the code to retrieve your access token:, (*8)
$accessToken = $provider->getAccessToken('authorization_code', [
    'code' => $code,
]);
Having the $accessToken, you can now (all while handling the
redirected request) use that token to load the resource owner:, (*9)
try {
    $owner = $provider->getResourceOwner($accessToken);
    $ownerID = $accessToken->getResourceOwnerId();
    // synchronize local user using $owner
} catch (\Mw\Spaces\OAuth2\Error\UserNotPresentException $err) {
    // user has no access to project
    // deny login
}
Use the data in the $owner object to construct a new local user
(or update an existing record). You can store the Resource Owner
ID for each created user to match them later on., (*10)
OAuth 2.0 authentication for Mittwald SPACES
MIT