Oauth 2.0 Windows Live Open ID Connect/Oauth 2.0如何使用Apache mod_auth_openidc实现SSO

Oauth 2.0 Windows Live Open ID Connect/Oauth 2.0如何使用Apache mod_auth_openidc实现SSO,oauth-2.0,openid-connect,windows-live,mod-auth-openidc,Oauth 2.0,Openid Connect,Windows Live,Mod Auth Openidc,我已经让mod_auth_openidc与谷歌合作,并将一个手卷版的phpOIDC作为我的OP,mod_auth_openidc作为我的身份提供商 我的问题似乎是Microsoft实现中的错误 mod_auth_openidc是一个很好的mod,它做了大量的验证 JWT中返回的内容之一是“aud”参数,它是访问群体 根据开放ID连接规范: MBaud 必修的。此ID令牌的目标受众。它必须包含依赖方的OAuth 2.0客户端id作为受众值。它还可能包含其他受众的标识符。在一般情况下,aud值是一

我已经让mod_auth_openidc与谷歌合作,并将一个手卷版的phpOIDC作为我的OP,mod_auth_openidc作为我的身份提供商

我的问题似乎是Microsoft实现中的错误

mod_auth_openidc是一个很好的mod,它做了大量的验证

JWT中返回的内容之一是“aud”参数,它是访问群体

根据开放ID连接规范:


MBaud
必修的。此ID令牌的目标受众。它必须包含依赖方的OAuth 2.0客户端id作为受众值。它还可能包含其他受众的标识符。在一般情况下,aud值是一个区分大小写的字符串数组。在常见的特殊情况下,当有一个受众时,aud值可能是一个区分大小写的字符串。

我的客户端id是00000001234(不是我的真实id,只是一个示例)

我通过握手完成了,一切都是groovy,我从Windows Live获得了我的临时“代码”,然后我将其交换为我的令牌,但我得到的令牌的“aud”值为:

00000000-0000-0000-0000-0000000 1234

mod_auth_openidc正确检查返回令牌中的“aud”值,并响应错误,因为“aud”与配置的cliend_id不匹配,根据规范,这是应该的

我的问题是,除了不验证令牌的访问群体之外,是否有任何方法可以在MS Developer控制台中配置应用程序,以便它为返回的令牌中的“aud”值正确返回客户端ID


但是,在他们的实现中,哪里是报告此类错误的最佳位置?

实际上,在
login.live.com
的文档中没有提到MS live符合OpenID Connect。它确实提到它在OAuth 2.0之上构建了自己的SSO协议

通过反复试验,您似乎发现MS Live支持OpenID Connect的重要部分(著名位置上的发现文档、JWKS URI、
OpenID
scope等),这对我来说本身就是新闻。但不幸的是,似乎还有一件小事还没找到。。。这可能也是为什么还没有宣布对MS Live ID的OpenID Connect支持的原因


MS在Azure AD中的OpenID Connect实现已经完全兼容,但Live ID尚未兼容。我想你所能做的就是在MSA上安装bug MS。

对于同一个应用程序,00000000-0000-0000-0000-0000000 1234和0000000 1234是不同的标识符。新的应用程序门户(apps.dev.microsoft.com)首选128位标识符(guid),旧的应用程序门户(account.live.com/developers/applications)首选旧的64位标识符。id_令牌将始终包含新标识符

您可以使用新的标识符格式(即00000000-0000-0000-0000-0000000 1234),使请求客户端\u id与令牌“aud”声明匹配


已创建新标识符,以便MSA和AAD标识符匹配。

您确定使用了正确的
客户端id
?我的
客户id
看起来像:`xxxxxxxx-xxxx-xxxx-xxxx-XXXXXXXXXX“。它针对Azure AD进行身份验证,Azure AD将其发送到LIve ID,因此不直接针对LIve ID进行身份验证。也许这对你来说不一样?是的,我确定。0000000 1234显示在MS Dev站点的应用程序控制台中。如果我尝试使用JWT aud参数中返回的客户端ID,并在前面加上额外的零,那么当我将用户发送到login.live.com网站进行验证时,会出现无效的客户端ID错误,等等。您能否提供一个指向您注册客户端的门户的指针?我想自己试试,因为它显然不同于Azure广告界面。我所在的页面是:,这列出了我注册的所有应用程序。这就是我添加我的应用程序的地方,我得到了客户id,没有任何错误。该死,我相信你的答案是正确的,不是我所希望的,而是正确的。Azure广告不只是针对您自己的帐户,有点像Auth0吗?您知道Azure AD是否支持使用任何MS Windows Live帐户登录吗?是的,您可以使用Live ID注册Azure AD试用版,它将使用Live ID对您进行身份验证。试用结束后,您需要付费订阅(虽然它似乎在试用期结束后继续工作,但您可能希望通过付款来确保……)。我注册了Azure广告并进行了设置。通过Azure添加了一个应用程序,将其链接到广告,如果我的Azure广告中有用户,效果会很好。我还将Azure中的应用程序设置为使用Windows live等,但我收到以下错误。应用程序“my_clien”不支持来自外部身份提供商“live.com”的用户帐户“my_Windows live_login”t_id'。该帐户需要作为租户中的外部用户添加。请注销并使用Azure Active Directory用户帐户再次登录。“好的,因此要使Windows Live id正常工作,您必须将其作为用户添加到”目录中"并选择源于Microsoft帐户的。它将传递到Windows Live,但不允许您登录,除非您手动将用户添加到Azure AD帐户。它可以通过w/mod_auth_openidc进行身份验证。如果您知道让任何Windows Live帐户通过的方法,请告诉我。AFAICT这样做应该会更好: