无法从OAuth 2.0授权代码流中获取访问令牌

时间:2016-06-11 06:04:22

标签: oauth-2.0 openid azure-active-directory openid-connect adal

我正在尝试在多租户应用程序中实现OAuth 2.0 Authorization Code Flow

我首先要求login.microsoftonline.com/organizations/oauth2/v2.0/authorize授权“openid个人资料电子邮件”范围 然后使用我获得的代码 grant_type=authorization_code的访问令牌的login.microsoftonline.com/organizations/oauth2/v2.0/token client_id client_secret redirect_uri

我收到的回复仅包含id_tokentoken_type=Bearer。为什么我没有给出access_tokenexpired_at字段?

我尝试在令牌调用时再次提供范围,但响应返回相同。 spec表示它应该包含访问令牌。我也试过/共同的端点,但事情是一样的。

1 个答案:

答案 0 :(得分:1)

您正在使用Azure AD v2.0端点。您可以通过您的网址中包含 v2.0 的事实来判断这一点。

在v2.0端点中,如果您只询问id_token中包含的范围(即openid配置文件电子邮件)并且不要求任何其他范围(即https://outlook.office.com/contacts.read),您将只返回一个id_token。这是因为您基本上告诉Azure AD您只需要配置文件信息并且不与任何api通信,因此不需要访问令牌。

另一方面,如果你包含一个api的范围(即https://outlook.office.com/contacts.read),你将获得一个access_code。