使用OAuth2客户端凭据流保护用PHP编写的REST API

12

我正在使用Symfony2的PHP编写REST API,这个API旨在被各个网站使用以访问数据,并且这将由客户端库完成。

然而,我需要保护这个API,这证明有点令人困惑。我做了一些研究,据我所知,一个好的方法似乎是使用OAuth2和客户端凭据流(请参阅RFC草案)。我必须承认,我还不太清楚它的详细工作原理,但我不断地阅读它是如此简单。所以,我的第一个问题是:这是正确的方法吗?我是否走错了方向?我是否应该使用其他方法来验证客户端?请记住,我需要身份识别、认证和授权。

如果是的话,OAuth2使用客户端凭据是正确的方式,那么我想问:在PHP中实现这个的最佳方法是什么?是否有人真正做过这个?到目前为止,我一直在尝试使用oauth2-php,以及一个bundle,但没有太多的运气。那个包似乎专注于三条腿的身份验证,虽然我不太确定。我想知道最好的做法是否是手动使用oauth2-php包完成?

非常感谢任何关于此事的信息。提前致谢!


我一直成功地使用FOSOAuthServerBundle和客户端凭据授权类型。你遇到了什么问题? - AdrienBrault
谢谢回复。我想我主要是困惑于每个部分的作用和工作原理。据我所知,我必须创建自己的身份验证机制(API密钥+密钥),客户端可以使用它来登录并访问/oauth/v2/auth,在那里获取令牌。一旦该令牌过期,它可以使用刷新令牌从/oauth/v2/token获取新令牌。这样做对吗?如果您有任何提示,我将不胜感激,至少知道这是可能的! - user1325320
1个回答

4

Heidar,

我目前正在处理一个类似的项目,以下是我所了解到的。

Oauth通常用于将网站授权给网络上的其他资源,Facebook发现授权和身份验证完全分开对其开发人员基础来说太过混乱,因此开始同时使用Oauth进行两者。由于它是主要的参与者,开发人员已经跟随并采用它。

尽管我不是很确定您在声明中提到"Identity"部分的意思是什么,即您需要“身份、认证和授权”。

您可以使用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?

至于三方身份验证的部分,请参见这里的答案(它非常详尽,但解释得很清楚):OAuth 2.0: Benefits and use cases — why?

请记住,我仍在努力实际实现这一点。


2
嗨Willem,感谢您的回复。最终我们决定不使用OAuth2,因为对我们来说不值得麻烦。现在看到标准的发展情况,我认为我们没有选择它是正确的。我们现在将使用简单的密钥+秘密身份验证来推出API,一旦可以,我们可能会实施OAuth1或比密钥+秘密更复杂的东西,因为它会让我们面临一些安全问题。最终你用OAuth2做得怎么样了? - user1325320
2
嗨,Heidar,谢谢你的提问。在这里情况不太好,我们已经在 PHP 中通过 OAuth2-php 实现了 OAuth 2,但是我们还没有时间在我们的 REST 框架中实际应用它。然而,毫无疑问 OAuth2 是必要的(我认真地不会选择 OAuth 1a,2 将成为标准,并且已经被广泛接受和实施)。如果你要实现什么东西,最好做得很好,对吧?祝好运! - Willem de Vries

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接