Laravel 5.5 - 使用Laravel Passport正确授权类型?

时间:2018-03-19 09:23:09

标签: laravel api authentication oauth-2.0 laravel-passport

我有一个应用程序,用户可以通过该网站正常注册并发布职位空缺。

我希望注册用户能够通过第三方多工作发布应用程序使用我的api发布空缺,即用户在第三方网站上注册,他们会看到一个表格,该表格会发布到我网站上的api端点。

现在我的问题是如何使用Laravel Passport实现这一点。

以下是否正确:

  1. 我为第三方应用程序创建了一个护照客户端?

  2. 向第三方应用程序提供其客户端ID和客户端密钥。

  3. 当用户在第三方网站上提交表单时,他们会将其用户名(电子邮件)和密码以及其余表单数据包括在内。

  4. 第三方应用程序使用密码授予方法向(http://my-app.com/oauth/token)发出请求,以使用其客户端ID,客户端密钥,用户电子邮件和密码来请求访问令牌。

  5. 如果返回有效的访问令牌,则使用该令牌和表单数据向(http://my-app.com/api/jobs/add)端点发出第二个请求。

  6. 有人可以告知这是否是正确的授权类型,或者注册用户是否不安全地提供第三方应用程序登录凭据以获取访问令牌?

    用于上述用例的正确授权类型是什么?

    如果我要使用authorization_grant方法,谁将负责创建客户端 - my-app.com的管理员或my-app.com的注册用户?

    如果它是my-app.com的注册用户那么这意味着每个注册用户都必须在my-app.com上为同一个第三方应用创建一个客户端,因为第三方应用程序会有意义最终有多个客户端ID,那么他们将如何实现回调网址?

    这非常令人困惑。

1 个答案:

答案 0 :(得分:1)

除了第3点,你或多或少都在轨道上。

将您的用户凭据访问第三方系统并不是一个好主意,甚至可能在法律上不可接受。 而是提供一个url,可以在弹出窗口中打开以进行身份​​验证,并将auth令牌返回给window.opener

您可以为父窗口(window.opener)提供一个函数,它接受在登录成功/错误时调用的回调:

var popup = window.open("/someUrl");
popup.onload = function(){
   popup.onLogin(onLoginSuccessCallback, onLoginErrorCallback);
};

或父窗口可以有一个可以在弹出窗口中调用的函数:

window.opener.loginCallback(token);