Microsoft身份平台示例中,令牌为何包含未请求的Scope?
问题解答:为什么请求单个Scope却返回两个?
这是个很常见的MSAL令牌获取疑问,我来帮你拆解清楚:
结论先行
正常情况下,你应该只看到你明确请求的access_as_user这一个Scope。出现两个的情况是因为MSAL的缓存机制或者权限配置导致额外Scope被包含进来了。
具体原因分析
1. MSAL的令牌缓存机制
MSAL(Microsoft Authentication Library)会自动缓存已经获取到的令牌。如果你之前曾经请求过包含access_as_editor和access_as_user的令牌,哪怕这次只请求了一个,MSAL会直接返回缓存中已有的、包含更多Scope的令牌,而不会向身份平台重新请求新的令牌。
2. 客户端应用已被授予多个Scope权限
如果你的客户端应用(调用TodoList Service的那个应用)在Azure AD中已经被授予了这两个Scope的权限,并且用户已经完成了权限同意,那么当你请求其中一个Scope时,身份平台可能会返回所有已授权的Scope(因为这些权限已经被用户同意过,平台认为你可以使用所有已授权的权限)。
3. 应用注册的默认权限设置
如果在TodoList Service的应用注册中,你把这两个Scope都设置成了用户默认同意的权限(或者管理员已经批量同意了这些权限),那么用户登录时会自动获得这两个权限的授权,令牌自然会包含这两个Scope。
验证与解决步骤
- 清空令牌缓存:在代码中添加
await _tokenAcquisition.RemoveAccountAsync();来清除当前用户的缓存令牌,然后重新运行程序获取新的令牌,看看是否只包含你请求的Scope。 - 检查客户端应用权限:登录Azure门户,找到你的客户端应用,查看“API权限”列表,确认是否只有
access_as_user被添加并授予了同意。如果有access_as_editor,可以移除它再测试。 - 检查默认同意设置:在TodoList Service的应用注册中,查看“公开API”里的Scope设置,确认没有开启默认同意多个Scope的配置。
内容的提问来源于stack exchange,提问作者GreyMatter
相关产品推荐
相关产品推荐

