Symfony 3 根据远程 API 对用户进行身份验证

2024-03-16

我有一个应用程序,其中后端和前端由不同的主机提供服务,并且是两个不同的应用程序(均基于 Symfony 3)。

其中之一(后端ofc)处理业务逻辑并将用户及其角色保存在其数据库中。后端提供REST API供前端使用。我无法修改后端代码,因为它不是我的项目 - 我只想为其创建一个前端。

目前,我正在尝试在 Symfony 3 中创建前端应用程序,但我不确定如何使前端应用程序针对远程 API 进行身份验证,并且不保留用户数据(或尽可能少)。

通过 REST API 将凭据传递到后端后,令牌将发送到前端应用程序并遵循 API 请求(例如,前端应用程序将向用户呈现的数据将与成功身份验证后收到的令牌一起发送)。

我的问题又来了:如何针对来自 Symfony 3 的远程自定义(非 OAuth)API 进行身份验证?

另外:后续如何正确处理token?(在身份验证成功后发出每个请求时必须使用它)。实现这一目标的最简单方法是什么?


我一直在努力寻找合适的信息(也许是教程?)我是 Symfony 的菜鸟:(

大多数文章描述提供一个允许客户端连接到它的 API,而不是在 Symfony 中制作客户端应用程序。

我发现了什么:通过第 3 方 REST API 进行 Symfony2 身份验证 https://stackoverflow.com/questions/14928514/symfony2-authentication-via-3rd-party-rest-api- 最相关,尽管它描述了 Symfony 2 的流程,并且接受的答案只是简单地描述了应该做什么

https://blog.vandenbrand.org/2012/06/19/symfony2-authentication-provider-authenticate-against-webservice/ https://blog.vandenbrand.org/2012/06/19/symfony2-authentication-provider-authenticate-against-webservice/- 关于 Symfony 2

http://symfony.com/doc/current/security/custom_authentication_provider.html http://symfony.com/doc/current/security/custom_authentication_provider.html- 可能是最热门的话题,但是,我不明白应用程序将在哪里保留其用户(在此示例中是否需要编写自定义用户提供程序?)


您已经找到了问题的答案。那是自定义身份验证提供商 http://symfony.com/doc/current/security/custom_authentication_provider.html。您可以将令牌保留在前端应用程序存储中,然后对它们进行身份验证。登录时,您应该通过请求后端应用程序创建令牌,将其保存在令牌存储中,仅此而已。然后您只需要对令牌进行身份验证(只需查看身份验证提供程序的示例)。

关于将用户数据保存在前端应用程序中,这取决于您。您不必保留任何数据,因此如果您想显示一些详细信息(即用户名等),您也必须存储该详细信息(或在每个请求中检索它 - 但这会影响性能)。至少你可以使用缓存来实现这一点。

所以可能的做法是:

  1. 登录时(使用登录表单或其他地方),只需在登录处理程序中对用户进行身份验证(按照描述创建您自己的身份验证提供程序there https://blog.vandenbrand.org/2012/06/19/symfony2-authentication-provider-authenticate-against-webservice/- 不用担心 Symfony 2,安全组件几乎相同 - 有一些不兼容,但方向是正确的)。身份验证成功后,将令牌存储在前端存储中(您也可以存储一些您需要的用户详细信息,例如姓名等)。
  2. 对于每个请求,使用前端应用程序存储中保存的令牌(这是另一个身份验证提供程序)对用户进行身份验证 - 您不需要将请求发送到后端应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 3 根据远程 API 对用户进行身份验证 的相关文章

  • IdentityServer4 客户端 - 刷新 CookieAuthenticationEvents 上的访问令牌

    我试图在访问令牌过期时使用刷新令牌 类似的问题已回答here https stackoverflow com a 41557598 3501052 And 更新令牌的示例代码 https stackoverflow com question
  • Symfony 3新建项目报错

    我开始编写有关 Symfony 3 的教程 在使用以下命令创建新项目时遇到问题 php symfony phar new Symfony 我有这个错误 GuzzleHttp Exception RequestException Error
  • 对不存在的资源进行 GET 的 REST 标准

    资源 user 12345 不存在 假设消费者随机尝试不同的 id 没有授权 任何用户都可以查看任何用户 从更广泛的意义上来说 我的问题是 如果对不存在的资源执行 GET 操作 您应该返回什么 我应该为不存在的 id 返回空用户 还是应该返
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 415 不支持的媒体类型; Angular2 到 API

    我是 Angular 2 的新手 我面临着一个无法找到解决方案的问题 当我尝试从 Angular 2 发布到 API 时 我得到 415 不支持的媒体类型 角度2代码 onSubmit value any console log value
  • 防止 Twig 函数扩展中的输出转义

    我创建了一个 Twig 扩展 image image png 200 嗨 我知道我可以做 image image png 200 raw 但我更喜欢使用 PHP 代码 这样所有内容 来自这个 图像 扩展 都不会被转义 我看不出这可能 我知道
  • 从 Kubernetes Python 客户端登录到 GitLab 存储库

    我有一个 Django 应用程序 它使用python 的官方 Kubernetes 客户端 https github com kubernetes client python并且工作正常 但它只部署 正确 公共注册表 有没有办法执行登录后让
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap
  • 如何在之前的 Facebook 身份验证后自动安全地让用户登录?

    用户抱怨他们必须过于频繁地登录 如果身份验证完全基于 Facebook OAuth 那么用户如何在下次访问该页面时自动登录 用户流程示例 用户点击 使用 Facebook 登录 用户通过 Facebook 进行身份验证并被重定向回网站 用户
  • 在 Rails 3 中选择性地关闭 Devise 的 Flash 通知

    Devise 身份验证框架在各处都使用 Flash 通知 这使得与应用程序集成变得很容易 但有时会导致用户体验不佳 我想知道有什么简单的方法可以有选择地关闭 Rails 3 应用程序中的一些 Devise flash 通知 特别是 我想摆脱
  • 瞬态 REST 表示

    假设我有一个 RESTful 超文本驱动的服务 用于模拟冰淇淋店 为了帮助更好地管理我的商店 我希望能够显示每日报告 列出所售每种冰淇淋的数量和美元价值 看来这种报告功能可以作为名为 DailyReport 的资源公开 DailyRepor
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • Twitter 的推文按钮有回调吗?

    有没有办法在 Twitter 的推文按钮上注册回调 我希望能够跟踪我网站上的哪些特定用户在 Twitter 上发布了链接 我无法添加 onClick 事件 因为它是跨域 iFrame 还有其他想法吗 我见过一种方法 https stacko
  • 将自定义参数传递给 Symfony2 中的自定义 ValidationConstraint

    我正在 Symfony2 中创建一个表单 表格只包含一个book字段允许用户在列表中进行选择Books实体 我需要检查是否选择了Book属于Author我的控制器里有 public class MyFormType extends Abst
  • 从 FilterControllerEvent 监听器重定向到另一个 Symfony 路由

    我正在尝试设置一个 kernel controller 侦听器 以便在函数返回 true 时重定向到另一个路由 我有可用的路线 但无法使用此路线设置控制器 event gt setController 我收到以下错误 FilterContr
  • Booking.com酒店管理API

    我拥有一家酒店 并在 booking com 上查看了 API 因为我想创建自己的前端界面来更新我的酒店房价 房间数 以及通过该 API 上传图片 更新酒店描述 然而 我唯一能找到的是一个 API 供联营公司以一定的价格获取特定位置的酒店等
  • 运行 Composer 返回:“无法打开输入文件:composer.phar”

    我是 symfony2 和阅读新手symblog http tutorial symblog co uk tutorial parts 在第三章中 在尝试使用数据装置时 我尝试了以下命令 php composer phar update 但
  • Web 服务应该是事务性的吗?

    我正在研究为应用程序编写网络服务 在此应用程序中 我们在事务中执行所有操作 因为 工作单元 通常不是单个实体 而是跨越多个表的多个实体 在某些情况下 我们想要 全有或全无 而交易是非常有意义的 然而 我不太确定如何在网络服务中执行此操作 也
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户

随机推荐

  • libVLCSharp 无法创建 MediaList

    我正在玩 libVLCSharp 发现了一个有线行为 实际上 我创建媒体并使用 MediaPlayer 播放它没有任何问题 但是 当我尝试从 MediaList 创建媒体时 它会中断并显示以下消息 无法在本机端执行实例化 确保你 在您的系统
  • WIF 中的主动和被动联合

    我试图了解 WIF 中主动联合和被动联合之间的区别 如果依赖方 RP 是 WCF 服务而不是 ASP NET 应用程序 则似乎可以使用主动联合 如果 RP 是 ASP NET 应用程序 则可以使用被动联合 这准确吗 因此 在 ASP NET
  • Django 中不同应用程序的不同数据库[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我的 Django 站点中有多个应用
  • 组织 Javascript 库和 CSS 文件夹结构的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何在 Web 应用程序中组织 js 和 css 文件夹 我当前的项目结构是这样的 root assets js lib css img ind
  • Apache Commons JCI 重新加载类加载器

    有人有使用 Apache Commons JCI API 的 ReloadingClassLoader 的经验吗 唯一的使用示例可以在以下页面中找到 http commons apache org jci usage html http c
  • 如何在 UIWebview 中保存本地加载的 HTML 文件

    我正在使用 UIWebView 编写一个富文本编辑器 为此 我使用了一个模板文件作为启动器 然后 当用户完成编辑但尚未发布时 我想将当前内容保存到备份 html 文件中 以防应用程序损坏 我怎么做 给你 伙计 NSFileHandle fi
  • 有没有办法阻止 HTML access key="" 被激活?

    I tried preventDefault 但我还没有成功 我缺少什么吗 如果可能的话 我会尝试全局禁用它 例如在window 似乎没有办法阻止事件触发 唯一的选择似乎是在您不希望它们工作时暂时删除 accesskey 属性 就是这样jQ
  • csproj 文件中 元素的用途是什么

    当我编辑 Web 应用程序项目时 Visual Studio 2017 15 3 1 添加
  • Angular 4 setTimeout() 具有可变延迟和等待

    我有一个事件列表timestamp 我想要的是根据timestamp 添加延迟 delay timestamp t 1 timstamp t 我知道这不太适合setTimeout 但是有一个解决方法 如果超时是恒定的 但在我的情况下不是 是
  • 创建 Openstreetmap 提取的 mbtiles 文件的最简单方法?

    我正在创建一个使用在线和离线地图的 iPhone 旅行应用程序 对于离线地图 我希望允许用户下载他们感兴趣的区域 例如伦敦 的 mbtiles 文件 该地图应包含已在 OpenStreetmap 中找到的道路等信息 我知道以下网站http
  • pandas groupby 根据条件替换

    我有一个数据集结构如下 index country city Data 0 AU Sydney 23 1 AU Sydney 45 2 AU Unknown 2 3 CA Toronto 56 4 CA Toronto 2 5 CA Ott
  • Flutter:升级Play商店版本号

    我已经使用 flutter 在 Play 商店上发布了一个应用程序 现在我想上传该应用程序的新版本 我正在尝试更改版本代码 flutter 构建 apk build name 1 0 2 build number 3 或像这样更改 loca
  • 如何在 Java 中检查文件权限(独立于操作系统)

    我有以下代码片段 public class ExampleClass public static void main String args throws FileNotFoundException String filePath args
  • 加载 word2vec 时出现 UnicodeDecodeError 错误

    详细描述 我开始使用词嵌入 并发现了大量有关它的信息 到目前为止 我知道我可以训练自己的词向量或使用以前训练过的词向量 例如 Google 或 Wikipedia 的词向量 这些向量可用于英语 但对我来说没有用 因为我正在处理以下语言中的文
  • WSO2 Identity Server 5.1.0 未在 SAML 响应中返回用户声明

    在尝试新版本的 WSO2 Identity Server 5 1 0 时 我在返回 SAML 响应中的声明时遇到问题 虽然这在 WSO2 IS 5 0 0 SP1 中有效 我已经映射了所需的声明并将它们添加到我的 SP 此外我还配置了 SP
  • 使用 go 处理文件上传

    我最近才开始玩围棋 所以我还是个菜鸟 如果我犯了太多错误 抱歉 我已经尝试解决这个问题很长时间了 但我只是不明白发生了什么 在我的 main go 文件中 我有一个主要函数 func main http HandleFunc handler
  • 使用 FactoryGirl 时不断收到 record_invalid

    很多时候 当我在规范中使用 FactoryGirl 时 我不断收到如下错误 Failure Error f FactoryGirl build my model ActiveRecord RecordInvalid translation
  • 使用“sort”命令按多列对 CSV 文件进行排序

    我有一个类似 CSV 的文件 我想按列优先级对其进行排序 例如SQL 中的 ORDER BY https dev mysql com doc refman 8 0 en sorting rows html 例如 给定以下行 3 1 2 1
  • 如何使用 python urllib 忽略 Windows 代理设置?

    我希望 Python 在使用时忽略 Windows 代理设置urllib 我设法做到这一点的唯一方法是禁用 Internet Explorer 上的所有代理设置 有什么程序化的方式吗 os environ no proxy 不是一个好的选择
  • Symfony 3 根据远程 API 对用户进行身份验证

    我有一个应用程序 其中后端和前端由不同的主机提供服务 并且是两个不同的应用程序 均基于 Symfony 3 其中之一 后端ofc 处理业务逻辑并将用户及其角色保存在其数据库中 后端提供REST API供前端使用 我无法修改后端代码 因为它不