使用 OAuth2 客户端凭据流保护用 PHP 编写的 REST API
Posted
技术标签:
【中文标题】使用 OAuth2 客户端凭据流保护用 PHP 编写的 REST API【英文标题】:Securing a REST API written in PHP with OAuth2 client credentials flow 【发布时间】:2012-07-07 06:49:38 【问题描述】:我正在使用 Symfony2 在 php 中编写一个 REST API。此 API 旨在供各个网站用于访问数据,这将由客户端库完成。
但是,我需要保护 API 的安全,事实证明这有点令人困惑。我已经做了一些研究,据我所知,一个好方法似乎是将 OAuth2 与客户端凭据流一起使用(请参阅 RFC 草案)。我不得不承认,我仍然不清楚它是如何工作的细节,但我一直在读它是如此简单。我想我的第一个问题是:这是要走的路还是我走错了方向?我应该使用其他方法来验证客户端吗?请记住,我需要身份、身份验证和授权。
如果是,使用客户端凭据的 OAuth2 是一种方法,那么我问:在 PHP 中实现这一目标的最佳方法是什么?有没有人真的这样做过?到目前为止,我一直在尝试使用oauth2-php 和bundle,但运气不佳。该捆绑包似乎专注于三足身份验证,尽管我不太确定。我想知道最好的做法是否可能是使用 oauth2-php 包手动完成?
我将不胜感激任何有关此的信息。提前致谢!
【问题讨论】:
我一直在成功使用 FOSOAuthServerBundle 和客户端凭据授予类型。你遇到了什么问题? 感谢您的回复。我想我对每个部分的作用和工作方式感到很困惑。据我了解,我必须创建自己的身份验证机制(API 密钥 + 机密),客户端可以使用它来登录并获得对 /oauth/v2/auth 的访问权限,并在那里获得一个令牌。一旦该令牌过期,它就可以使用刷新令牌从 /oauth/v2/token 获取新令牌。这看起来对吗?如果您对此有任何建议,我将不胜感激,很高兴知道这至少是可能的! 【参考方案1】:海达尔,
我目前正在从事一个类似的项目,这是我目前发现的。
Oauth 是正式授权网站与网络上的其他资源,Facebook 发现整个自动化和身份验证的分离令其开发人员感到困惑,并开始将 Oauth 用于两者。自从它成为开发人员一直关注的主要参与者。
尽管我不太确定您在声明中的身份部分是什么意思,但您需要“身份、身份验证和授权”。
您可以将 Oauth 用于其他两个,这是从所有大型互联网公司都这样做的事实中扣除的(在这方面我可以为您做最好的事情,Oauth 文档说它仅用于授权)。
Google 提供了一个维护良好的客户端库:http://code.google.com/p/google-api-php-client/wiki/OAuth2
此外,对于服务器端库,我会转向 oauth2-php,如您所指,https://github.com/quizlet/oauth2-php 但请参阅此帖子了解更多详细信息:Are there OAuth 2 server side PHP or Java implementations?
关于 3-legged 身份验证,请在此处查看答案(它非常广泛,但解释得很好)OAuth 2.0: Benefits and use cases — why?
请记住,尽管我仍在努力实现这一点。
【讨论】:
您好威廉,感谢您的回复。我们最终决定不使用 OAuth2,这对我们来说是不值得的。现在,在看到标准的发展过程中发生了什么之后,我认为我们没有采用它是件好事。我们现在将使用简单的密钥+秘密身份验证来让 API 走出门外,一旦我们可以实现 OAuth1 或比密钥+秘密更复杂的东西,因为它会让我们面临一些安全问题。您最后是如何使用 OAuth2 的? 嗨,Heidar,感谢您的提问。好吧,这里的情况不太好;-) 我通过这个 OAuth2-php 在 PHP 中实现了 OAuth 2,但我们没有时间在我们的 REST 框架中实际实现它。然而,毫无疑问 OAuth2 的必要性(我真的不会去 OAuth 1a,2 将成为标准,它已经被广泛接受和实施。)如果你实现了一些东西,最好实现它;-) 对?祝你好运!以上是关于使用 OAuth2 客户端凭据流保护用 PHP 编写的 REST API的主要内容,如果未能解决你的问题,请参考以下文章
通过 Spring Boot Keycloak 集成的 OAuth2 客户端凭据流