问题描述
我在我工作的公司的Azure门户上注册了多个应用程序,这些应用程序具有以下可选声明:电子邮件,家庭名称,给定名称和upn。当我添加这些声明时,一切正常,没有错误或警告。已注册的应用程序用于验证ASP.NET Core 2.2应用程序。返回的ID令牌包含这些声明,我可以在我的应用程序中使用它们。
不久前,我注意到访问注册应用程序的“令牌配置”页面时开始收到此警告:
表格中的每个声明上都有一个警告图标,上面写着This claim required OpenID Connect Scopes to be configured through the API permissions page
。
如果我在不选中复选框的情况下按添加,则会在“令牌配置”页面上收到该警告,并且仅将User.Read
权限添加到API权限。如果我选中它,警告就会消失,并且会添加额外的profile
权限。
此弹出窗口和警告似乎是最近出现的,但是我没有更改那些已注册应用程序中的任何内容。无论是否存在警告,我仍然可以通过ID令牌获得声明。实际上,Microsoft documentation说:
The Microsoft Authentication Library (MSAL) currently specifies offline_access,openid,profile,and email by default in authorization and token requests. This means that,for the default case,if you specify these permissions explicitly,Azure AD may return an error.
这可以解释为什么我仍然可以得到这些要求。
因此,我有该警告,但一切正常,如果我明确指定profile
权限,则Azure AD可能会返回错误。
我对AzureAD不太了解,我不确定是否应该在选中该复选框的情况下添加声明。为什么此警告开始出现?处理此问题的最佳方法是什么?
解决方法
这可能是门户网站,文档和库团队错位的情况。如您所见,默认情况下,MSAL库将这些OIDC permissions添加到其令牌请求API中。
现在默认情况下,当MSAL请求这些权限时,为什么仍会授予您尚未在Portal上添加的权限?答案是dynamic consent-一种Azure AD机制,可让您指定旅途中所需的权限。由于该库默认情况下会请求这些权限,因此在您的情况下一切正常。
我的建议是检查您使用的特定MSAL库的文档/存储库,并查看他们是否建议显式添加它们(例如,在MSAL.js中,这留给开发人员使用,无论哪种方式都可以使用)。如果是这样,只需将它们也添加到门户网站上,并摆脱警告。