Laravel 和 oauth 2

Posted

技术标签:

【中文标题】Laravel 和 oauth 2【英文标题】:Laravel and oauth 2 【发布时间】:2014-07-16 00:22:41 【问题描述】:

我搜索了高低,但没有找到任何有用的东西。

我对 oAuth 很陌生。

我正在使用https://github.com/lucadegasperi/oauth2-server-laravel。

我正在构建一个 REST API 服务。 The Client 将是网站。我正在使用Password Flow 进行身份验证。

我的理解,如果我错了,请纠正我。

oauth_clients 表(ID、秘密、名称)。 The Client 是网站而不是登录网站的个人用户。我将使用The Client 的 id 和 secret 以及个人用户的用户名和密码。

我正在按照上面页面上的说明进行操作。

我在http://api.domain.com/oauth/access_token?grant_type=password&client_id=BCA545A934F5F4528DA3EE567E8E4&client_secret=5184B7C4E11ED3EEF99DA1A1DD9C3&username=email@email.com&password=password&scope=scope1,scope2&state=123456789上使用POST方法

这可以很好地验证客户端和用户,但这是问题所在。我不知道我在哪里设置 scopestate

这是回复 "error": "invalid_scope", "error_description": "The requested scope is invalid, unknown, or malformed. Check the \"scope1\" scope."

我真的不知道下一步是什么,即使我设置了 Scope 或 State 下一步是什么?

谢谢。

编辑

我在范围表中添加了一个虚拟记录,并将该值添加到 to 范围中,它起作用了。

我现在确实了解范围,但我只是不知道为什么需要它。

我收到了带有访问令牌的响应。我现在实际上理解了oAuth的概念。我已经实现了登录/访问令牌系统,但我可能会摆脱它并坚持使用 oAuth。 我试图使用 oAuth 向 REST API 服务验证网站,但它看起来不像那样做。

所以现在我的下一个问题是:有没有办法将访问令牌添加到标头而不是作为 URL 参数?

【问题讨论】:

您是在尝试制作oauth 服务还是尝试使用社交身份验证服务登录用户? oAuth 服务。有没有更好的方法将 API 服务连接到网站。我想锁定 API,以便只有网站可以访问它,并有可能打开部分 API。 【参考方案1】:

使用

发布 OAuth2 服务器 configuration(如果尚未完成)
php artisan config:publish lucadegasperi/oauth2-server-laravel

打开文件app/config/packages/lucadegasperi/oauth2-server-laravel/oauth2.php

如果您不需要范围,只需将一个名为 basic 的范围添加到 oauth_scopes 表即可。

|--------------------------------------------------------------------------
    | Default Scope
    |--------------------------------------------------------------------------
    |
    | The default scope to use if not present in the query string
    |
    */
    'default_scope' => 'basic',

现在无需在 access_token 请求中添加范围参数。

Q2:有没有办法将访问令牌添加到 Header 中,而不是作为 网址参数?

是的。默认情况下,它会检查查询字符串和 http 标头。

将以下选项更改为 true 以防止在作为查询字符串提供时进行 access_token 验证

 |--------------------------------------------------------------------------
    | HTTP Header Only
    |--------------------------------------------------------------------------
    |
    | This will tell the resource server where to check for the access_token.
    | By default it checks both the query string and the http headers
    |
    */
    'http_headers_only' => false, 

【讨论】:

以上是关于Laravel 和 oauth 2的主要内容,如果未能解决你的问题,请参考以下文章

Vue 2 Laravel 5.3 Vue-router 2 设置 Vue-router 的正确方法

Laravel5.4 快速开发简书网站

Laravel 和 oauth 2

Laravel 集成 RabbitMQ 消息队列

Laravel应用Redis事务

Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)