Toto rožšíření slouží pro potřeby společnosti WITTE Nejdek, spol. s r.o., WITTE Access Technology s.r.o. a WITTE Paint Application s.r.o.
Neexistuje varianta pro přímou instalaci z packagist.org !!!
"repositories": [
{
"type": "vcs",
"url": "https://github.com/wittenejdek/sso-login"
}
],
"require-all": true,
"require": {
"wittenejdek/sso-login": "dev-master"
},
extensions:
ssoLogin: wittenejdek\ssologin\SSOLoginExtension
Vyplníme základní údaje pro identifikaci aplikace a URL adresy pro autorizační službu. Redirect URL adresa musí být totožná s URL nastavenou u autorizační služby. V neposlední řadě zaregistrujeme vlastní Authenticator a třídu uživatele.
# WITTE SSO LOGIN
ssoLogin:
applicationName: "CLIENT ID"
applicationSecret: "CLIENT SECRET"
uri:
redirect: "http://<cesta k aplikaci>/ssologin/callback"
authorize: "http://orion2.wnc.local/sso/oauth2/authorize"
accessToken: "http://orion2.wnc.local/sso/oauth2/access-token"
resourceOwnerDetails: "http://orion2.wnc.local/sso/resource"
redirectAfterLogin: ":Homepage:"
services:
authenticator:
class: wittenejdek\ssologin\Authenticator
user:
class: wittenejdek\ssologin\SSOUser
Authenticator nabízí dva callbacky, afterTokenRefresh (po obnově tokenu) a afterAuthorize (po autorizaci uživatele). Implementace callbacků je možná pomocí handlerů setAfterAuthorize a setAfterTokenRefresh.
services:
customSSOCallback: App\Model\Security\CustomSSOCallbacks
authenticator:
class: wittenejdek\ssologin\Authenticator
setup:
- setAfterAuthorize([@customSSOCallback, 'afterAuthorize'])
- setAfterTokenRefresh([@customSSOCallback, 'afterTokenRefresh'])
V těchto callbacích můžeme jednoduše nastavit identitu uživatele.
public function afterAfterAuthorize(Authenticator $sender, AccessToken $accessToken)
{
// Get resource owner data
$ssoData = $sender->getResourceOwner()->toArray();
if (array_key_exists("personnel_id", $ssoData)) {
/** @var Employee $employee */
if ($employee = $this->em->getRepository(Employee::class)->find((int)$ssoData["personnel_id"])) {
// Create identity
$identity = new Identity($employee, $ssoData["roles"], []);
// Update current identity
$this->userStorage->setIdentity($identity)->setAuthenticated(true);
return $identity;
}
}
}
use wittenejdek\ssologin\Route as SSORoute;
public static function createRouter(): Nette\Application\IRouter
{
$router = new RouteList;
$router[] = SSORoute::create(); // SSO Rozšíření
return $router;
}
Odkaz na přihlášení je pod https://cestakaplikaci/ssologin.