在 MSAL 的 AcquireTokenSilentAsync 中使用哪个 IUser

Which IUser to Use in AcquireTokenSilentAsync in MSAL

我是在使用 Azure AD B2C 的移动 (Xamarin) 应用程序的上下文中问这个问题的。

tl;博士;其中一个是: 我是否应该在调用 PublicClientApplication.AcquireTokenSilentAsync 时始终使用从“登录/注册”策略获得的 IUser

现在让我解释一下场景。

用户尝试使用应用程序,但需要立即重置密码。

使用 MSAL 库,调用 PublicClientApplication.AcquireTokenAsync 调用 "reset password" 策略。

假设调用成功,IUser 对象被放置在 PublicClientApplication.Users 集合中。

此外,从该函数 AuthenticationResult 中返回的令牌足以让用户访问需要 AD B2C 令牌的资源。

这意味着以后对 PublicClientApplication.AcquireTokenSilentAsync 的任何调用都将使用与 "reset-password" 策略关联的 IUser

它会起作用...但这是最佳做法吗?

或者应用程序是否应该立即提示用户登录,从而调用 "sign-up/sign-in" 策略,然后将与该策略关联的 IUser 添加到 PublicClientApplication.Users 集合中。那么每当 AcquireTokenSilentAsync 被调用时,那个特定的 IUser 可以传递给它吗? (而不是 "reset password" 政策中的一项。)

每当调用 "profile editing" 策略时,都可以询问相同的问题。一个新的 IUser 被添加到集合中,假设用户之前已经登录,那么哪个 IUser 被发送到 AcquireTokenSilentAsync 有关系吗?

马特,我建议你看看下面的示例 active-directory-b2c-xamarin-native, and it particular the GetUserByPolicy(IEnumerable<User> users, string policy) method located in UserDetailsClient/MainPage.xaml.cs#L76-L85。此方法检索权限 IUser 以使用给定的策略。

foreach (var user in users) { string userIdentifier = Base64UrlDecode(user.Identifier.Split('.')[0]); if (userIdentifier.EndsWith(policy.ToLower())) return user; }

它的用法在UserDetailsClient/MainPage.xaml.cs#L116

中的OnCallApi方法中也有体现