【问题标题】:Access token does not have the openid scope访问令牌没有 openid 范围
【发布时间】:2016-09-18 04:23:58
【问题描述】:

我正在做 sso sample(travelocity.com) 示例。当我尝试使用此命令使用 oauth 访问令牌访问用户信息时,

curl -k -H "授权:承载 b68ba941c9da3d2644d8a63154d28" https://localhost:9443/oauth2/userinfo?schema=openid

我收到以下错误

{"error":"insufficient_scope","error_description":"访问令牌没有 没有 openid 范围"}

请帮忙,谢谢

【问题讨论】:

  • 嗨,我也面临同样的问题。我可以知道您是如何解决的吗?

标签: oauth wso2 wso2is


【解决方案1】:

默认情况下,travelocity.com sso 示例 Web 应用程序不会在其访问令牌请求中发送 openid 范围。这就是您遇到错误的原因。

为了在 travelocity 示例中发送 openid 范围和访问令牌请求,您可以尝试以下操作,

  1. 在示例 Web 应用程序中打开 travelocity.properties[1] 文件(您可以在 travelocity.com/WEB-INF/classe 中找到它)
  2. 取消注释并编辑文件[1]中的QueryParams属性,如下所示

    QueryParams=scope=openid

  3. 保存属性文件并重新部署 Web 应用程序并立即尝试在 userinfo 端点上生成的访问令牌 :)

[1]https://github.com/wso2/product-is/blob/master/modules/samples/sso/sso-agent-sample/src/main/resources/travelocity.properties


更新

看起来在 QueryParams 中设置范围不起作用, 有一个解决方法

你能改变以下 travelocity.propeties 中的 OAuth2.TokenURL 并尝试一下吗?我在本地对此进行了测试,应该可以工作。

#OAuth2 令牌端点 URL

OAuth2.TokenURL=https://localhost:9443/oauth2/token?scope=openid

【讨论】:

  • 感谢您的回复,我按照您的说法更改了我的 travelocity.property,但我仍然遇到同样的错误。你能告诉我有没有其他方法可以从承载访问令牌访问用户信息。
  • 你是在 web 应用中更改它还是在源代码中更改它然后构建 web 应用?
  • 我改了源码然后部署了。
  • 仍然出现同样的错误,我认为 OAuth2.TokenURL 没有在代码中的任何地方使用。
  • 它由负责发送令牌请求的 sso 代理在内部使用。顺便说一句,您正在尝试哪个版本的 IS?
【解决方案2】:

当您向授权端点发出第一个请求时,您必须在scope 请求参数中包含openidOpenID Connect Core 1.0, 3.1.2.1. Authentication Request 如下。

范围

必填。 OpenID Connect 请求必须包含 openid 范围值。如果openid 范围值不存在,则行为完全未指定。可能存在其他范围值。应用程序不理解的范围值应该被忽略。有关本规范定义的其他范围值,请参阅第 5.4 节和第 11 节。

【讨论】:

  • 效果很好,谢谢! (https://.../oauth2/authorize?scope=openid)
猜你喜欢
  • 2020-04-25
  • 2023-03-23
  • 1970-01-01
  • 2020-10-05
  • 2018-04-16
  • 2021-08-26
  • 2014-03-05
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多