【问题标题】:Google OpenID Connect conformanceGoogle OpenID Connect 一致性
【发布时间】:2015-02-09 05:20:02
【问题描述】:

我正在尝试使用 oic 库向 Google OpenID Connect 进行身份验证,但出现错误

oic.exception.IssuerMismatch: 'https://accounts.google.com' != 'accounts.google.com'

运行时

from oic.oic.consumer import Consumer
db={}
config={}
c=Consumer(db, config)
print c.provider_config('https://accounts.google.com')

它尝试访问https://accounts.google.com/.well-known/openid-configuration,它说

"issuer": "accounts.google.com",

现在,specification 似乎表明这是不正确的:

发行人: 必需的。使用 https 方案的 URL,没有查询或片段 组件

我是否正确解释了这是 Google 的 OpenID 连接配置中的错误?我应该向哪里报告此错误?

(注意:我不是寻找解决方法,这很容易:我可以跳过提供程序配置发现并对发现的信息进行硬编码。但我想支持任意 OpenID Connect 提供商,而不仅仅是 Google)

【问题讨论】:

  • 我不一定会称其为 错误,因为它不是 100% 符合规范的过程,而oic 正在更准确地确认那个领域。 Google 的文档明确指出必须使用 HTTPS 请求,并且 HTTP 连接被阻止,这可能是他们可以不将 URI 的那部分添加到 issuer 的原因。
  • 问题是 oic 拒绝继续。它尝试验证它正在联系的服务实际上是应用程序尝试连接的服务,并发现它们是不同的服务(在字符串比较级别上)。从安全的角度来看,这听起来很明智,因为您不想将用户发送到错误的服务。依赖方应该进行此验证(在这种情况下,它是 Google 的错误未通过它),或者应用程序应该忽略 issuer 字段的实际值(在这种情况下,它会因为过于严格而成为 oic 的错误)。
  • 同意,我对“错误”和“不合规格”的看法很迂腐。我还注意到,我能找到的所有其他示例.well-known/openid-configuration(eBay、Heroku 和其他)确实issuer 中包含https://。不过,不知道你会如何向 Google 报告。

标签: google-openid openid-connect


【解决方案1】:

Google 的 OpenID Connect 实施确实不符合规范的该部分。 Google 在规范完成之前已经实施了 OpenID Connect(类似)协议,同时他们的一些 RP 已经依赖于该标识符。修改它对于那些 RP 来说将是一个重大变化,而 Google 选择不这样做,至少目前是这样。

一些 OpenID Connect 实现确实为 Google 提供了一个例外,其他一些尝试通过向 any OP 颁发者标识符添加一个“https://”前缀来概括这种行为,而不以它开头,一些甚至不检查它,因为他们没有实现与 Discovery 相关的功能。选择你最喜欢的。

【讨论】:

  • 有什么方法可以向谷歌报告,以防他们不知道?或者要求他们记录下来以防万一他们知道?还是他们已经记录在案的参考资料?
  • 他们知道,但你可以在这里碰一下:groups.google.com/forum/#!forum/openid-connect-interop
猜你喜欢
  • 2021-01-04
  • 2015-09-26
  • 2018-09-19
  • 2017-05-18
  • 2015-02-09
  • 2015-06-27
  • 2015-01-06
  • 2021-05-31
相关资源
最近更新 更多