2013-10-23 51 views
3

因此,在我开始之前,我是一位OAuth2新手,所以仍然试图围绕各种权限范围和授权进行真正的包装。没有访问令牌的OAuth2客户端

我已成功使用Laravel OAuth2 Server软件包成功实施OAuth2服务器。

我正在处理的当前网站将使用client_credentials授权类型从API中简单地进行dogfood。我已经设法成功地运行,并可以使用提供的访问令牌进行API调用。

但是,我想知道如何实现类似于Instagram,Soundcloud等的架构,他们不需要基本端点的access_token,只需要client_id。他们如何做到这一点?这是一种自定义授权类型吗?

最好,我只想在访问私人资源(如修改用户信息等)时开始需要访问令牌。据我所知,对于这些我需要使用password授予类型,这不是问题。

回答

2

您的服务器上有两个不同的资源 - a)需要一些访问检查的资源b)可公开访问的资源。

对需要访问检查的资源采取的操作应该要求用户通过请求中的OAuth标头进行标识。在Laravel的背景下 - 这将是一条路线,其中'before'键指定为Oauth。

不需要访问的操作可以通过构建您的路由来接受提供给用户相关背景的参数,从而收集关于什么用户相关的上下文。比方说,你有一个用户可以看到没有任何访问权限的配置文件。您的API的JSON表示端点可能是/ api/profile/[user_id],其中[user_id]是您希望看到的用户配置文件的ID。对于这些不关心访问的路线,您可以在路由声明中过滤之前离开oauth。

+0

我明白,但并不完全符合我的要求。 Soundcloud,Instagram等确实需要一个'client_id'作为他们基本端点的安全性,而''access_token'则需要安全端点。两者都是安全形式,后者更强大。他们不仅仅把他们的基本终点开放,这正是我期望实现的目标。这将允许我的客户端应用程序避免不断请求访问令牌,直到用户真正登录。不幸的是,您的建议会使API在基本级别上完全打开。 –

5

OAuth有一些流程,例如2-legged或3-legged,基本上告诉开发人员他需要向服务器提出多少请求才能获得他想要的资源。

例如,在2条腿的流量发送你的ID和密码(第一个请求),你回来了的access_token,并使用该令牌的请求,你可以为你想要的资源的其他请求(第二个请求)。

回想一下你的Instagram示例,你可以认为只使用client_id作为单腿OAuth流程,因为你只向服务器发出一个请求来获取你想要的资源。

您可以将此类流量用于不太敏感的资源,例如个人资料照片或用户的昵称。

单支流的实现很简单: - 如果user_id有效且应用程序不需要用户批准来访问请求的资源,请继续并显示资源。

因此实现一个单腿流程包括检查client_id是否有效并检查请求的资源是否需要用户许可。也就是说,您可以使用单腿来请求用户个人资料照片,但不能使用相同的流程来请求用户的私人消息。

您可以在The OAuth Bible中阅读更多关于每种OAuth流程的信息。

相关问题