无法从 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_token
和 token_type=Bearer
。为什么我没有得到 access_token
和 expired_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.
我正在尝试在多租户应用程序中实施 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_token
和 token_type=Bearer
。为什么我没有得到 access_token
和 expired_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.