它不需要UserProvider自定义身份验证(Custom Authentication whic

2019-08-17 01:50发布

我看了网上对我的配置上的解决方案,但我无法找到满足我的需求。 到目前为止,我已经在这个工作满3天,我不能让它正常工作,我肯定有几件事情,我不明白。

我开发的分支2.1我的symfony应用程序。

为了使这短暂的。 我有我想要使用的身份验证的Web服务。

这就是我要实现的流程:

  1. 用户提交凭据
  2. 这些凭据(用户名和需要密码)发送到我的web服务
  3. 如果用户名/密码是正确的,web服务给人以用户名,角色的阵列,和其他一些东西,但密码。 (如果该证书是不正确的,有一个字段的阵列将是返程)
  4. 一旦Web服务给出了“大”数组,我想作为认证要考虑的用户。
  5. 在返回的角色的功能,我想Symfony的安全组件给出了相应的授权用户。
  6. 我想,以避免做出web服务的浏览每一页的呼叫。

我不知道是否有可能使这种使用Symfony的,肯定这个工作流程似乎不是更安全,但我看不到使用此WebService的另一种方式。

到结束,我并不需要有一个UserProvider因为我的身份验证的远程服务进行。 但很显然,Symfony的组件需要的用户提供(doen't不管其类型)。

我提前谢谢你

编辑:为了使其更简单,是有可能传递loadUserByUsername不仅仅是变量$ USERNAME更多的东西在UserProvider类(实现UserProviderInterface)()函数? 我需要有除了他/她的用户名,用户通过检索用户对象。

Answer 1:

使用AuthenticationProvider通常称之为UserProvider.loadUserByUsername。 在你的情况下,就没有必要调用它。 您的身份验证方法可以创建用户和回传令牌的照顾。

该认证令牌最终在会议结束。

问题是,默认情况下,当一个请求到来时,系统将获取从会话令牌/用户,然后调用UserProvider.refreshUser($用户)的,再由默认情况下,重新加载与loadUserByUsername用户。

所以,你需要创建自己的用户提供,只是有refreshUser返回相同的用户。 您将需要一个loadUserByUsername只是为了满足接口,但它不应该被调用。

如果你想定期刷新从Web服务用户,那么你将需要从会话在自己的监听器添加到加载令牌和覆盖缺省行为。



文章来源: Custom Authentication which doesn't need UserProvider