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 。
错误此捕获示例22:MSAL始终发送范围'openid profile offline_access'。它们无法被抑制,因为它们是库运行所必需的。请勿在scope参数中包含任何这些范围。
答案 0 :(得分:1)
这个问题并不是真正地表达为一个问题,但是如果您的问题确实是“是否可以对不需要附加作用域的应用程序进行身份验证”,那么我发现了一种变通方法,它肯定是一个hack,并且可能永远不会工作。我无法抛出任何占位符范围来使客户端API满意,因为服务器拒绝了它们。但是发送空格会使API关闭,并且似乎丝毫不影响应用程序。
string[] scopes = new[] {" "};