我有mod_auth_openidc与谷歌合作,并将 phpOIDC 的手动版本作为我的 OP,mod_auth_openidc作为我的身份提供者。
我的问题似乎是Microsoft实现中的错误。
mod_auth_openidc是一个很棒的模组,并且进行了相当多的验证日志。
JWT 中返回的一件事是"aud"参数,即受众。
根据 Open ID Connect 规范:
aud
REQUIRED. Audience(s) that this ID Token is intended for. It MUST contain the OAuth 2.0 client_id of the Relying Party as an audience value. It MAY also contain identifiers for other audiences. In the general case, the aud value is an array of case sensitive strings. In the common special case when there is one audience, the aud value MAY be a single case sensitive string.
我的客户端ID是00000001234(不是我的真实ID,只是一个例子)。
我通过握手完成了它,一切都很时髦,我从 Windows Live 获得我的随机数"代码",然后我用它交换我的令牌,但我得到的令牌具有"aud"值:
00000000-0000-0000-0000-00000001234mod_auth_openidc正确检查返回令牌中的"aud"值,并响应错误,因为"aud"与配置的cliend_id不匹配,根据规范,这是应该的。
我的问题是,除了不验证令牌的受众之外,还有没有办法在 MS 开发人员控制台中配置应用程序,以便它为返回的令牌中的"aud"值正确返回客户端 ID?
没有那个,在他们的实现中报告此类错误的最佳位置在哪里?
在文档中没有任何地方login.live.com
它说MS Live符合OpenID Connect标准。它确实提到它在OAuth 2.0之上构建了自己的SSO协议。
似乎您已经通过反复试验发现MS Live支持OpenID Connect的重要部分(已知位置的发现文档,JWKS URI,openid
范围等),这对我来说本身就是新闻。但不幸的是,似乎仍然缺少一件小事......这可能也是尚未宣布对MS Live ID的OpenID Connect支持的原因。
MS 在 Azure AD 中的 OpenID Connect 实现已经完全兼容,Live ID 尚未兼容。我想你所能做的就是错误MS。
在 MSA 上,00000000-0000-0000-0000-00000001234 和 00000001234 是同一应用程序的不同标识符。新应用门户 (apps.dev.microsoft.com) 首选 128 位标识符 (guid),旧应用门户 (account.live.com/developers/applications) 首选较旧的 64 位标识符。id_token将始终包含新标识符。
您可以使用新的标识符格式(即 00000000-0000-0000-0000-0000-00000001234)使请求client_id令牌"aud"声明匹配。
创建新标识符,以便 MSA 和 AAD 标识符匹配。