我正在尝试将 OpenID 集成到我的 Silex 应用程序中,但我不确定如何将其连接到Silex 的授权服务提供者中。看起来他们已经捆绑了身份验证和授权,我不太喜欢。
到目前为止我得到了什么:
首先,我使用LightOpenID生成一个 OpenID 登录 URL,并将其注入到我的 Twig 模板中:
$app['openid'] = $app->share(function (Application $app) {
$openid = new \LightOpenID($app['request']->getHttpHost());
$openid->identity = 'https://www.google.com/accounts/o8/id';
$openid->returnUrl = $app->url('check_openid', array('returnUrl' => $app['request']->get('returnUrl', $app['request']->getRequestUri())));
return $openid;
});
$app->before(function (Request $request) use ($app) {
// todo: check if user is logged in, if not generate OpenID login url
$app['twig']->addGlobal('openid', array('authUrl' => $app['openid']->authUrl()));
});
并将其渲染为我的Twig布局的一部分:
<a href="{{ openid.authUrl }}" class="btn btn-google-plus btn-xs" type="button"><i class="icon-google-plus"></i> Sign in with Google</a>
当您单击该链接时,Google会进行身份验证并将您发送回此处:
$app->get('/login/openid', function (Request $request) use ($app) {
if(!$app['openid']->mode) {
return $app->redirect($app['openid']->authUrl(), 303);
} elseif($app['openid']->mode === 'cancel') {
// TODO: redirect user back to login page w/ error message
die('User has canceled authentication!');
} elseif($app['openid']->validate()) {
// TODO: log user in (set session variables)
return $app->redirect($request->get('returnUrl', $app->path('home')), 303);
} else {
throw new Exception('User could not be validated');
}
})->bind('check_openid');
我被困在哪里:
如何登录用户以便我可以利用 Silex/Symfony 的安全“防火墙”?我想将/admin
我网站的部分限制为仅限某些用户,并且我不想自己实现整个 ACL 机制。