gpt4 book ai didi

java - 为什么spring-security-oauth oauth 2.0实现中需要scope参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:45 24 4
gpt4 key购买 nike

我正在使用 spring security oauth 为公司的 REST API 实现 OAuth 2.0 提供程序。
由于某种原因,当使用 token 端点时,spring security oauth 要求客户端将其所需的范围作为请求参数发送(这发生在 ClientCredentialsChecker.validateScope 方法中)。
据我了解有关 Access Token Scope 的规范部分范围参数是可选的,但如果不存在范围,提供者可以决定授权请求失败。
我的问题是:

  • 我是否正确理解该规范允许提供商强制执行范围?
  • 有人知道为什么 spring security oauth 选择实现更严格的规范解释而不允许对其进行配置吗?

谢谢

最佳答案

我认为这里的问题实际上归结为范围绑定(bind)的概念。规范指出范围参数是可选的,这是对的,但是否必须在实现 OAuth 2 的服务中定义范围实际上取决于实现者(在本例中为 Spring)。

现在介绍范围绑定(bind)的概念。在实现范围或您希望能够从用户访问的信息时,您有两种基本类型 - 绑定(bind)范围和未绑定(bind)范围。使用绑定(bind)范围时,需要在创建应用程序并获取 OAuth key 和 secret 时定义范围。如果实现未绑定(bind)范围(如 Spring),则需要在第一次重定向调用期间定义范围以使用户进行身份验证。在许多情况下,当未定义范围时,实现未绑定(bind)范围的服务将使用您可以访问的一组默认用户详细信息。看来在 Spring 的情况下,范围是必需的。

免责声明:我之前没有使用过 Spring security OAuth 实现。

只是为了让您直观地了解绑定(bind)和未绑定(bind)之间的区别,这里有一些示例:

Facebook 使用未绑定(bind)范围来请求用户数据,因此其初始重定向请求可能如下所示:

//construct Facebook auth URI
$auth_url = sprintf("%s?redirect_uri=%s&client_id=%s&scope=email,publish_stream",
$authorization_endpoint,
$callback_url,
$key);

就 Gowalla 而言(当 Gowalla 仍然可用时),他们使用绑定(bind)到 OAuth key 的范围,因此当您发出初始请求时,不需要定义范围,给您一个看起来更像这样的请求(注意缺少范围参数):

//construct Gowalla auth URI
$auth_url = sprintf("%s?redirect_uri=%s&client_id=%s",
$authorization_endpoint,
$callback_url,
$key);

希望对您有所帮助,

乔恩

关于java - 为什么spring-security-oauth oauth 2.0实现中需要scope参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com