我已经用 Symfony2 构建了我自己的 REST API。要查询此 API,用户必须使用 OAuth 协议(三腿流)对自己进行身份验证。
现在,我将基于 Angularjs 应用程序开发前台,并且我想使用我自己的来自 angularjs 的 Rest API。从前台将用户登录到我的 api 并获取令牌的最佳方法是什么?我不希望用户必须授权我自己的应用程序。
三腿流真的适合这种情况吗?也许更好地支持使用用户名/密码登录的 xauth 身份验证?
好的,经过一些研究,似乎管理 JS 客户端和 Symfony2 后端之间的登录/身份验证的最简单方法是使用密码授予类型(感谢@ricoux),它允许用户使用用户名/密码获取令牌,如下所示:
http://host.com/oauth/v2/token?grant_type=password&username=Bat&password=test&client_id=clientidkey&client_secret=clientsecretkey
使用fosoauthserverbundle,您需要在创建客户端时设置允许的授权类型:
$clientManager = $this->container->get('fos_oauth_server.client_manager.default');
$client = $clientManager->createClient();
$client->setName('ApiTest');
$client->setRedirectUris(array('URL' => 'http://callbackurl.com'));
$client->setAllowedGrantTypes(array('token', 'authorization_code', 'password'));
我尝试做完全相同的事情:带有 symfony2 的 REST API 和带有 angularjs 的 javascript 客户端...
正如 Nisam 所说,FOSOAuthServerBundle 是在您的 symfony2 应用程序中集成 OAuth2 授权服务器的最佳捆绑包。
在您的情况下,如果您不希望用户必须授权您自己的应用程序,那么具有密码授予类型的客户端可能是解决方案。理论上,密码授权类型可用于直接将用户名和密码交换为访问令牌,但我从未使用 FOSUserBundle 进行过实验,并且我在文档中找不到任何示例。
当您准备好使用第三方捆绑软件时,FOSOAuthServerBundle是最好的解决方案之一