[英]Symfony 2.8 Guard AbstractGuardAuthenticator, how to return a real token?
我正在使用Symfony 2.8中新增的相对较新的Guard
子系统中的AbstractGuardAuthenticator
。
我的设置非常简单。 我将请求发送到受保护的URL,该URL采用用户名:密码base64编码。 它会针对数据库进行检查,并应返回一个令牌。
认证成功的方法:
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
//If login successful, return token
return new Response($this->tokenStorage->getToken());
}
它返回的是:
PostAuthenticationGuardToken(user="test", authenticated=true, roles="ROLE_ADVANCED,
ROLE_USER")
现在,考虑到AbstractGuardAuthenticator
完全像这样定义创建此令牌的方法,这就是我所期望的。
public function createAuthenticatedToken(UserInterface $user, $providerKey)
{
return new PostAuthenticationGuardToken(
$user,
$providerKey,
$user->getRoles()
);
}
更新1.1:
现在,我使用LexikJWTAuthenticationBundle
尝试在应用程序的AbstractGuardAuthenticator中实现Json Web令牌。 Lexik捆绑包提供成功和失败处理程序: lexik_jwt_authentication.handler.authentication_success
和lexik_jwt_authentication.handler.authentication_failure
指向指向将某些JWT变量注入到其中的类。 如何将它们挂接到AbstractGuardAuthenticator
的成功和失败处理程序中?
crud:
anonymous: ~
guard:
authenticators:
- app.token_authenticator
pattern: ^/database/
和Guard
成败的方法
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
if ($token = $request->headers->get('X-AUTH-TOKEN')) {
//on success, let the request continue
} else {
//If login successful, return token
return new Response($this->tokenStorage->getToken());
}
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
$data = array(
'message' => strtr($exception->getMessageKey(), $exception->getMessageData())
// or to translate this message
// $this->translator->trans($exception->getMessageKey(), $exception->getMessageData())
);
return new JsonResponse($data, 403);
}
我目前正在扩展JWTTokenAuthenticator
与我自己的令牌认证器(而不是AbstractGuardAuthenticator
合并,因为两者都实现了GuardAuthenticatorInterface
。
我想知道如何返回真实的令牌,该令牌可用于验证用户身份,而不是每次都发送username:password。
Symfony Guard组件
Guard旨在简化身份验证子系统。
在加入Guard之前,设置自定义身份验证还有很多工作。 您需要创建多个零件/类并使它们一起工作。 它很灵活,您可以创建所需的任何身份验证系统,但需要一些努力。 使用Guard,它变得更加容易,同时又保持了所有的灵活性。
这不是您要查找的组件。
Symfony安全令牌
在阅读有关Guard Component的文档中的“令牌”一词时,所指的是TokenInterface的实现。 Symfony使用这些实现来跟踪身份验证状态。 这些实现永远不会离开您的应用程序,这是内部的事情。
这不是您要查找的令牌。
JSON Web令牌
您正在谈论的“令牌”是客户端可以用来进行身份验证的信息的某种形式。 这可以是随机字符串,例如OAuth 2.0协议的“访问令牌”,也可以是一组独立且经过签名的信息,例如JSON Web令牌 (JWT)。
恕我直言,JWT将是目前最具前瞻性的代币。 熟悉JWT可以很好地阅读JSON Web令牌剖析 。
有几个捆绑包可以轻松地将JWT集成到您的Symfony项目中。 LexikJWTAuthenticationBundle是目前最流行的一种。 我建议你看看:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.