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
方法
这可以很好地验证客户端和用户,但这是问题所在。我不知道我在哪里设置 scope
或 state
这是回复
"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的主要内容,如果未能解决你的问题,请参考以下文章