是否可以仅请求用户已在 Azure AD OAuth2 隐式流中授予同意的范围的子集?
Is it possible to request only a subset of the scopes for which a user has granted consent in Azure AD OAuth2 implicit flow?
我创建了一个应用程序注册,我们称它为 API,应用程序 ID URI = api://dummyapi,具有读写范围。
在另一个应用程序注册的初始请求中,我们称之为客户端,在用户同意令牌的 scp(scope) =“读写”后,我使用以下请求获得了令牌:
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id={client app id}
&response_type=token
&redirect_uri=http://localhost
&scope=api://dummyapi/read api://dummyapi/write
&response_mode=fragment
对于未来的访问令牌请求,是否可以请求具有仅读取范围的令牌?
在以只读方式测试以下请求时,我得到了一个带有 scp = "read write" 的访问令牌。
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id={client app id}
&response_type=token
&redirect_uri=http://localhost
&scope=api://dummyapi/read
&response_mode=fragment
我在考虑一个场景,其中 UI 客户端应用程序具有只读和读写模式,它可以使用 scp=read 为只读模式请求令牌。
目前,Azure AD 将颁发一个访问令牌,其中包含代表登录用户授予的所请求资源的所有已授予委派权限。
The only exception to this 是如果客户端应用程序动态请求权限,并且 未 请求的授予权限之一是触发条件访问质询。
(此答案的其余部分只是关于该异常的其他详细信息。)
为了更好地理解此异常,请考虑一个示例,其中某个应用已被分级 User.Read、Mail.Read 和 Files.Read.All,并且客户的条件访问策略要求多访问邮件时(而不是访问文件时)进行身份验证,并且用户尚未执行 MFA:
- 如果应用请求
scope=.default
,则条件访问 将被强制执行 ,并且 User.Read、Mail.Read 和 Files.Read 将包含在令牌中。
- 如果应用程序使用
scope=User.Read Mail.Read
,则再次强制执行条件访问,并且令牌将再次包含所有三个权限。请注意,Files.Read.All 没有被明确请求,但它被授予并且包括它不会触发任何额外的条件访问挑战。
- 如果应用程序请求
scope=User.Read
,则 MFA 将 不需要 ,令牌将仅包含 User.Read 和 Files.Read.All。请注意,Mail.Read 未包含 ,因为未明确请求它并且包含它会触发条件访问质询。还要注意 Files.Read.All 被 包括在内,因为虽然没有明确要求,但它已被授予并且包括它不会触发额外的挑战。
我创建了一个应用程序注册,我们称它为 API,应用程序 ID URI = api://dummyapi,具有读写范围。 在另一个应用程序注册的初始请求中,我们称之为客户端,在用户同意令牌的 scp(scope) =“读写”后,我使用以下请求获得了令牌:
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id={client app id}
&response_type=token
&redirect_uri=http://localhost
&scope=api://dummyapi/read api://dummyapi/write
&response_mode=fragment
对于未来的访问令牌请求,是否可以请求具有仅读取范围的令牌? 在以只读方式测试以下请求时,我得到了一个带有 scp = "read write" 的访问令牌。
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id={client app id}
&response_type=token
&redirect_uri=http://localhost
&scope=api://dummyapi/read
&response_mode=fragment
我在考虑一个场景,其中 UI 客户端应用程序具有只读和读写模式,它可以使用 scp=read 为只读模式请求令牌。
目前,Azure AD 将颁发一个访问令牌,其中包含代表登录用户授予的所请求资源的所有已授予委派权限。
The only exception to this 是如果客户端应用程序动态请求权限,并且 未 请求的授予权限之一是触发条件访问质询。
(此答案的其余部分只是关于该异常的其他详细信息。)
为了更好地理解此异常,请考虑一个示例,其中某个应用已被分级 User.Read、Mail.Read 和 Files.Read.All,并且客户的条件访问策略要求多访问邮件时(而不是访问文件时)进行身份验证,并且用户尚未执行 MFA:
- 如果应用请求
scope=.default
,则条件访问 将被强制执行 ,并且 User.Read、Mail.Read 和 Files.Read 将包含在令牌中。 - 如果应用程序使用
scope=User.Read Mail.Read
,则再次强制执行条件访问,并且令牌将再次包含所有三个权限。请注意,Files.Read.All 没有被明确请求,但它被授予并且包括它不会触发任何额外的条件访问挑战。 - 如果应用程序请求
scope=User.Read
,则 MFA 将 不需要 ,令牌将仅包含 User.Read 和 Files.Read.All。请注意,Mail.Read 未包含 ,因为未明确请求它并且包含它会触发条件访问质询。还要注意 Files.Read.All 被 包括在内,因为虽然没有明确要求,但它已被授予并且包括它不会触发额外的挑战。