Azure AD 提供 refresh_token 即使我不请求并且权限没有 offline_access

Azure AD provides refresh_token even I don't request and permissions does not have offline_access

我真的很难理解发生了什么。我的 SPA 不断得到 refresh_token 即使我不请求它并且 Azure 上的权限没有 offline_access.

我该怎么做才能不得到 refresh_token?

我的请求URL(通知没有offline_access被请求)

https://login.microsoftonline.com/........./oauth2/v2.0/authorize?client_id=........&redirect_uri=........&response_type=code&scope=openid%20profile%20email%20User.Read&state=......&code_challenge=........&code_challenge_method=S256&response_mode=query

Azure 权限(无 offline_access)

同意屏幕(要求用户授予离线访问权限)

结果,我 refresh_token,在客户端上有刷新令牌不是个好主意。

这是使用 azure ad v2.0 端点时的一个已知问题,相关 post

offline_access中也提到:

This permission currently appears on all consent pages, even for flows that don't provide a refresh token (such as the implicit flow). This setup addresses scenarios where a client can begin within the implicit flow and then move to the code flow where a refresh token is expected.

但这不影响你不想获取refresh token,你用的是auth code flow v2.0, just don't include the offline_access when requesting the token,那么refresh token是不会返还的。

或者如果你真的不知道应用程序让你同意此权限,只需使用 auth code flow v1.0,然后如果你在请求 [=13= 时不包含 offline_access ], 它不会让你同意 offline_access 权限。