关键问题:
在请求response_type=id_token+token
并且用户未登录时,期望成功的响应是否有效?还是我必须先获得id_token
,然后再请求access_token
吗? (从而修补angular2-oauth2-oidc。)
一些背景和期望:
请注意,只要用户已经与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
其他说明:
Microsoft's page on the topic表示支持id_token+token
,但是sample URL仅使用id_token
。