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

unable to get access token from OAuth 2.0 Authorization Code Flow

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

我首先在 login.microsoftonline.com/organizations/oauth2/v2.0/authorize 申请了 "openid profile email" 范围的授权 然后使用我获得的代码 grant_type=authorization_code, client_id, client_secret, redirect_uri 用于 login.microsoftonline.com/organizations/oauth2/v2.0/token

处的访问令牌

我得到的回复只包含 id_tokentoken_type=Bearer。为什么我没有得到 access_tokenexpired_at 字段?

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

您正在使用 Azure AD v2.0 端点。您可以通过 url 中包含 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.