我已经与 Google 合作使用了 mod_auth_openidc,并使用了 phpOIDC 的手摇版本作为我的 OP,并使用 mod_auth_openidc 作为我的身份提供商。
我的问题似乎是 Microsoft 实现中的错误。
mod_auth_openidc 是一个很棒的 mod,并且做了相当多的验证日志。
JWT 中返回的内容之一是“aud”参数,即受众。
根据 Open ID Connect 规范:
音频
必需的。此 ID token 的目标受众。它必须包含依赖方的 OAuth 2.0 client_id 作为受众值。它还可以包含其他受众的标识符。一般情况下,aud 值是区分大小写的字符串数组。在有一个观众的常见特殊情况下,aud 值可能是单个区分大小写的字符串。
我的客户ID是00000001234(不是我的真实ID,只是一个例子)。
我完成了握手,一切都很顺利,我从 Windows Live 获取随机数“代码”,然后将其交换为我的 token ,但我得到的 token 的“aud”值为:
00000000-0000-0000-0000-00000001234
mod_auth_openidc 正确检查返回 token 中的“aud”值,并响应错误,因为“aud”与配置的 cliend_id 不匹配,根据规范,这应该匹配。
我的问题是,除了不验证 token 的受众之外,是否有任何方法可以在 MS Developer 控制台中配置应用程序,以便它为返回的 token 中的“aud”值正确返回客户端 ID?
Sans,在实现过程中报告此类错误的最佳位置在哪里?
最佳答案
实际上 login.live.com
的文档中没有任何地方表明 MS Live 兼容 OpenID Connect。它确实提到它在 OAuth 2.0 之上构建了自己的 SSO 协议(protocol)。
通过反复试验,您似乎发现 MS Live 支持 OpenID Connect 的重要部分(已知位置上的发现文档、JWKS URI、openid
范围等)。 ),这对我来说本身就是新闻。但不幸的是,似乎仍然缺少一件小事...这可能也是尚未宣布 OpenID Connect 支持 MS Live ID 的原因。
Azure AD 中的 MS OpenID Connect 实现已完全兼容,但 Live ID 尚未完全兼容。我想你能做的就是bug MS。
关于oauth-2.0 - Windows Live Open ID Connect/Oauth 2.0 如何使用 Apache mod_auth_openidc 进行 SSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30928346/