实现 2-legged OAuth 以获取用户特定数据以在 Javascript 中使用

Posted

技术标签:

【中文标题】实现 2-legged OAuth 以获取用户特定数据以在 Javascript 中使用【英文标题】:Implementing 2-legged OAuth to get user specific data for use in Javascript 【发布时间】:2012-06-11 13:40:14 【问题描述】:

我正在深入研究 OAuth 2.0 以保护我的 RESTful 服务。我拥有消费者和提供者双方,因此不需要最终用户允许访问提供者上的数据。我已经尝试过客户端凭据流,但这似乎只允许我为我的整个客户端获取令牌,而不是为单个用户获取令牌。如果我在 javascript 中为我的客户端使用令牌,那么它将被提供给所有用户并且不会非常安全,因为用户可能会为所有其他用户获取数据。

有没有一种方法可以让我使用 2-legged(也称为客户端凭据)来获取可在 Ajax/Javascript 中使用的特定于用户的令牌(类似于隐式流程提供的,但无需用户批准)?

谢谢。

【问题讨论】:

请至少评论您的答案!谢谢。 【参考方案1】:

您是对的,该标准没有说明“客户端凭据授予”场景的用户凭据。但是,如果受保护的资源属于用户,则每个令牌都应与特定用户相关。根据你的问题,我认为是这样的。

如果您也正在实施 OAuth 服务器,那么您可以轻松地做到这一点。只需在“客户端凭据授予”场景中的授权请求中添加“user_id”参数即可。在服务器端处理请求,可以将令牌绑定到指定用户。您可以将其视为您自己对协议的轻微扩展。

您可能还希望完全符合标准并且不做任何非一成不变的事情,或者您可能无法访问 OAuth 服务器实现。在这种情况下,您可以尝试使用与用户无关的令牌(或您在问题中所称的“整个客户端”令牌)。但是,访问受保护资源时,您必须明确指定用户(例如,作为资源路径的一部分或在使用 HTTP 的查询参数中),因为它不能从令牌本身推导出来。

【讨论】:

这可能行得通,但我必须在某种程度上重写客户端凭据用例的预期用法。我认为自动批准某些客户端在我的场景中会更好地工作,因为客户端和提供者都使用相同的身份验证服务器(因此用户在访问提供者时不必重新登录)。【参考方案2】:

我发现了自动批准客户的能力,因此当某些客户访问他们的数据时,用户不必授权。这适用于我的场景,因为我对两个网站使用相同的单点登录机制,并且对提供程序的登录对用户是透明的。

【讨论】:

以上是关于实现 2-legged OAuth 以获取用户特定数据以在 Javascript 中使用的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 中使用 OAuth2.0 2-legged 方法访问 Jira API

2-legged oauth 在 OAuth 2.0 中如何工作?

带有 2-legged OAuth 的 Gmail atom 提要收到 401 错误

Spring-OAUTH2.0:调用 /oauth/token 时没有可用资源错误

Spring security oauth 2 和客户端凭据流

Oauth 2 - 参数排序和签名完整性