当前位置: 首页 > 知识库问答 >
问题:

通过第三方REST API进行Symfony2身份验证

陶琦
2023-03-14

我正在使用Symfony2编写一个应用程序,它将与Wordnik REST API接口

目前,WordnikAPI不提供OAuth功能,因此我必须接受用户名和密码,然后将其透明地传递给API接口。

我想将此API身份验证集成到Symfony2的安全系统中,但到目前为止,我还无法确定最佳的实现路线。

我认为自定义用户提供程序不正确,因为密码没有存储在我的系统中。所有关于自定义身份验证提供程序的示例似乎都涉及到将应用程序的一部分作为API进行安全保护,而不是针对REST API。

我也不清楚FOSUserBundle在多大程度上帮助解决了这个问题。

理想的流量:

  • 用户提供凭据
  • 凭据将传递给第三方REST API
  • 如果凭据正确:
    • 我的应用程序将创建一个对应的“第三方用户”实体(如果它不存在)
    • 使用此“第三方用户”实体对用户进行身份验证

    在Symfony2安全上下文中实现这一点的最佳方法是什么?

    谢谢!

    相关问题:

    • 在Symfony2上通过外部API配置用户身份验证时出现问题

共有1个答案

白弘伟
2023-03-14

您必须实现自定义身份验证提供程序,如中所述:http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html

我不能告诉你最好的方法是什么,只是为了帮助你开始:你创建一个监听器、一个令牌、一个提供者和一个工厂。

侦听器的尝试身份验证方法获取用户提供的凭据,并使用该输入创建新的Token。在方法的末尾,您将添加一个:返回$this-

您的提供商将在authenticate方法中使用此令牌发送API请求。

对于不存在的用户,您有两个选项:-在API调用之后在authenticate方法中创建一个用户,并在您检查它是否已经存在之后(我认为这不是他们的做法)-创建您自己的身份验证失败处理程序,如下所示https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Http/Authentication/DefaultAuthenticationFailureHandler.php但是在onAuthenticationFailure方法的顶部,您添加了if($exception instanceof UsernameNotFoundException)

这只是它的基本原理...我在IRC上,昵称是hacfi——如果你需要进一步的指导,请告诉我

 类似资料:
  • 当我通过登录路径中定义的登录表单登录时,我的防火墙配置工作正常。我想要的是登录时不查看或进入登录路径,而是直接发送用户名和密码参数来检查路径。 当我用用户名和密码向check_路径发出post请求时,symfony2似乎需要一个cookie,它是由smyfony2自己在login_路径中创建的。 有没有办法通过发送用户名和密码直接检查路径来登录?

  • 问题: 我们有一个spring的基于MVC的RESTful API,它包含敏感信息。API应该是安全的,但是不希望在每个请求中发送用户的凭据(User/Pass组合)。根据REST指南(和内部业务需求),服务器必须保持无状态。API将由另一台服务器以混搭方式使用。 要求: > 客户端请求使用凭据(不受保护的URL);服务器返回一个安全令牌,该令牌包含足够的信息,供服务器验证未来的请求并保持无状态。

  • 我是全新的RestTemboard和基本上在REST API也。我想通过Jira REST API检索我的应用程序中的一些数据,但取回401未经授权。在jira rest api留档上找到并发表文章,但不知道如何将其重写为java,因为示例使用curl的命令行方式。我将感谢任何建议或建议如何重写: 进入java使用SpringRest模板。其中ZnJlZDpmcmVk是用户名:密码的Bas64编码

  • 问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如https://user:pass@host/)的子资源请求被阻止。有关更多详细信息,请参见https://www.chromestatus.com/feature/5669008342777856。 在标记的链接中提到该

  • (我曾在SO上回顾过类似的问题,但没有一个建议对我有效) 我有一个API服务,运行在Google App Engine上(在Google云平台上)。我需要通过谷歌管理目录API的身份验证,以便我可以在我们的GSuite域上创建组。 我最初尝试了隐式授权,遵循指南,以手动获取和提供服务帐户凭据,但我认为这可能仅限于在Google App Engine上运行的应用程序之间的通信。我的理解是,在App

  • 问题内容: 注销HTTP身份验证受保护的文件夹的 正确 方法是什么? 有一些解决方法可以实现这一目标,但是它们可能会带来危险,因为它们可能有故障或在某些情况下/浏览器中无法使用。这就是为什么我要寻找正确和清洁的解决方案。 问题答案: 亩。 没有正确的方法 ,甚至没有跨浏览器一致的方法。 这是来自HTTP规范(第15.6节)的问题: 现有的HTTP客户端和用户代理通常会无限期地保留身份验证信息。HT