MSAL范围(openid profile offline_access)。基本的简单配置文件可能无法实现?

时间:2017-11-21 15:24:47

标签: azure-ad-b2c msal

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参数中包含任何这些范围。

1 个答案:

答案 0 :(得分:1)

这个问题并不是真正地表达为一个问题,但是如果您的问题确实是“是否可以对不需要附加作用域的应用程序进行身份验证”,那么我发现了一种变通方法,它肯定是一个hack,并且可能永远不会工作。我无法抛出任何占位符范围来使客户端API满意,因为服务器拒绝了它们。但是发送空格会使API关闭,并且似乎丝毫不影响应用程序。

string[] scopes = new[] {" "};