【发布时间】:2023-04-06 17:32:01
【问题描述】:
MSAL 的行为就好像它的 API 库层有一个硬编码的 catch 22,当我使用它时这似乎不合逻辑。
string[] scopesArrayNonNullWORKS = new string[] { "email" };
string[] scopesArrayAlreadyThereInMsalCalls_FAILS = new string[] { "openid" };
string[] scopesArrayNoExtraScopesNeeded_FAILS = new string[0];
Microsoft.Identity.Client.ConfidentialClientApplication myCliApp;
myCliApp.AcquireTokenByAuthorizationCodeAsync(code, scopesArray);
MSAL 在每次调用时都内置并硬编码了这些范围:openid、profile、offline_access。
这很好,对我有用。我不需要任何额外的范围。
但是,我不能使用 null 或空范围列表。就像 MSAL 库层迫使我要求我不需要或不想要的范围。如果我包含电子邮件(我不需要),那么库层会对非空 Scopes 参数感到满意,并且一切正常。
如果我使用我需要的一个范围 openid,那么库层会出错,因为我已经包含了一个重复的范围 openid。
这似乎是一个陷阱 22,并且周期性地不合逻辑。我不能使用我需要的范围,或者因为它们是预定义的而出错。我不能传入一个空的范围列表(并使用预定义的),否则会出错。如果我传入一个我不想要或不需要的非空范围,那么它就可以工作。
我一定遗漏了一个重要的概念细节。
我想使用这 3 个,并且只有这 3 个作用域... openid 、 profile 、offline_access 。
此 catch 22 的错误示例:MSAL 始终发送范围“openid profile offline_access”。它们不能被抑制,因为它们是库运行所必需的。不要在范围参数中包含任何这些范围。
【问题讨论】:
标签: azure-ad-b2c msal