我在使用Azure AD B2C的移动(Xamarin)应用程序的上下文中提出这个问题 .
The tl;dr; of this is: 在调用 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
是否重要?
1 回答
马特,我建议你看看下面的样本active-directory-b2c-xamarin-native,特别是位于UserDetailsClient/MainPage.xaml.cs#L76-L85的
GetUserByPolicy(IEnumerable<User> users, string policy)
方法 . 此方法检索权利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
方法中