用户未登录时,带有response_type = id_token + token的AzureAD OIDC隐式流失败

时间:2019-01-31 07:24:12

标签: azure-active-directory oidc

关键问题:

在请求response_type=id_token+token并且用户未登录时,期望成功的响应是否有效?还是我必须先获得id_token,然后再请求access_token吗? (从而修补angular2-oauth2-oidc。)

一些背景和期望:

  • 我有一个定义了企业应用程序的AzureAD租户。
  • 该应用已启用隐式流,并且同时启用了id_token和token的权限。
  • 我已经定义了一个特定于应用的范围。
  • 该应用程序专用于我的租户(因此不使用/ common授权端点)。
  • 该用户具有Azure ID,并已被授予访问该应用的权限。

请注意,只要用户已经与Azure / Microsoft进行了活动会话(例如,他们以前登录过login.microsoftonline.com),一切都很好。

问题是用户没有活动会话时。我希望Azure可以登录它们,然后发出id_token和access_token。这个期望合理吗?

三个测试用例:

当我请求一个id_token时,仅提示用户登录,并向我发出ID_token。

https://login.microsoftonline.com/a3fbb27a-68f7-42bf-a757-8b3849e72df5/oauth2/v2.0/authorize?client_id=2b58c4c9-22df-4e50-9abf-1d721cf694b0&response_type=id_token&redirect_uri=http%3A%2F%2Flocalhost%3A4200&scope=openid&nonce=678910

当我请求令牌时,仅提示用户登录,并向我发出一个access_token。

https://login.microsoftonline.com/a3fbb27a-68f7-42bf-a757-8b3849e72df5/oauth2/v2.0/authorize?client_id=2b58c4c9-22df-4e50-9abf-1d721cf694b0&response_type=token&redirect_uri=http%3A%2F%2Flocalhost%3A4200&scope=api%3A%2F%2F2b58c4c9-22df-4e50-9abf-1d721cf694b0%2fdostuff&nonce=678910

当我同时请求id_token和令牌(request_type = id_token%20token)时,我得到一个server_error:  error_description=AADSTS50000%3a+There+was+an+error+issuing+a+token.

https://login.microsoftonline.com/a3fbb27a-68f7-42bf-a757-8b3849e72df5/oauth2/v2.0/authorize?client_id=2b58c4c9-22df-4e50-9abf-1d721cf694b0&response_type=id_token%20token&redirect_uri=http%3A%2F%2Flocalhost%3A4200&scope=openid%20api%3A%2F%2F2b58c4c9-22df-4e50-9abf-1d721cf694b0%2fdostuff&nonce=678910

其他说明:

  • 上面的GUID是伪造的,但在三个样本中是一致的。
  • 最终该应用程序是angular2 +(v6.1.10),我正在使用angular2-oauth2-oidc。
  • 在仅id_token的情况下,angular2-oauth2-oidc无法“验证令牌”,并且不进行第二次往返以获取access_token。
  • 在仅使用令牌的情况下,angular2-oauth2-oidc会持续重定向回授权服务器(大概是获取id_token)。
  • 在使用id_token + token的情况下,会收到上述错误。
  • 上面的测试是在浏览器中手动/不带应用/直接复制的。
  • 关于AADSTS50000的其他帖子似乎无关。

Microsoft's page on the topic表示支持id_token+token,但是sample URL仅使用id_token

0 个答案:

没有答案