MSAL需要用户同意每次登录WPF桌面应用程序

问题描述 投票:2回答:1

我在WPF应用程序中使用MSAL.NET库,使用交互式令牌获取工作流获取MSA帐户的访问令牌。以下是令牌获取的相关代码:

PublicClientApplication PublicClientApp = new PublicClientApplication("The-Application-Id", "https://login.microsoftonline.com/consumers/", TokenCacheHelper.GetUserCache());
var authResult = await publicClientApplication.AcquireTokenAsync(new string[] { "email" });

TokenCacheHelper取自documentation。这工作正常,我能够在结果中获取访问令牌和ID令牌。但是,如果我下次使用同一帐户登录时,我又需要同意配置文件和电子邮件范围。无论我登录并提供同意的次数,它仍然要求我同意。我在account.live上查看了我当前的状态,并表示已经为上述申请提供了同意。我经历了多次文件但没有运气。有人可以提供任何指示吗?

Image describing repeated consent prompt for same user

附:以上是支持本机的融合应用程序以及我不使用AcquireTokenSilentAsync的原因是因为我希望多个MSA帐户能够登录安装在同一设备上的应用程序。

编辑:我尝试使用没有令牌缓存的PublicClientApplication(因此使用库默认值),但仍然观察到相同的行为。为了进一步了解这种行为,我使用MSAL在MSA登录期间捕获了Fiddler跟踪。从下面的跟踪中,观察到/同意/更新的调用,这是导致在每次登录时请求同意的原因。知道怎么关掉这个吗?

enter image description here

c# wpf authentication azure-active-directory msal
1个回答
0
投票

来自MSA团队的开发人员和PO确认这是预期的行为。他们updated文档,以反映这些信息。以下是该文件的相关部分:

enter image description here

总而言之,如果您的用户使用的应用程序每个设备只有一个MSA帐户,那么推荐的MSAL使用模式将确保仅向用户询问一次[除非以某种方式删除缓存]。如果您的用户通过每个设备的多个MSA帐户进行操作,则可以利用公共客户端应用程序(使用现有令牌缓存实例化)来获取缓存令牌的MSA帐户列表。使用自定义UI,您可以向用户提供帐户列表,并根据他/她的选择,以静默方式获取访问令牌,从而阻止同意屏幕。请注意,只有令牌缓存仍然存在,才能制定同意。删除令牌缓存文件将强制用户在同意的情况下重新登录。

© www.soinside.com 2019 - 2024. All rights reserved.