我正在尝试在多租户应用程序中实现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_token
和token_type=Bearer
。为什么我没有给出access_token
和expired_at
字段?
我尝试在令牌调用时再次提供范围,但响应返回相同。 spec表示它应该包含访问令牌。我也试过/共同的端点,但事情是一样的。
答案 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。