我在使用Azure AD B2C的移动(Xamarin)应用程序的上下文中提出这个问题。
tl; dr;这是:在调用IUser
时,我是否应始终使用从“登录/注册”政策获得的PublicClientApplication.AcquireTokenSilentAsync
?
现在让我解释一下情景。
用户尝试使用应用,但需要立即重置密码。
使用MSAL库,调用PublicClientApplication.AcquireTokenAsync
来调用“重置密码”策略。
假设呼叫成功,IUser
对象将放置在PublicClientApplication.Users
集合中。
此外,来自该函数的AuthenticationResult
中返回的令牌足以让用户访问需要AD B2C令牌的资源。
这意味着以后对PublicClientApplication.AcquireTokenSilentAsync
的任何调用都将使用与“重置密码”政策相关联的IUser
。
它会起作用......但这是最佳做法吗?
或者应用程序应立即提示用户登录,从而调用“注册/登录”政策&因此,将IUser
与该政策相关联的PublicClientApplication.Users
添加到AcquireTokenSilentAsync
集合中。然后,只要调用IUser
,就可以将特定的IUser
传递给它? (而不是“重置密码”政策中的那个。)
每当调用“配置文件编辑”策略时,都可以询问相同的问题。系统会添加一个新的IUser
,并假设用户之前已登录过,AcquireTokenSilentAsync
发送给<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
的问题是否重要?
答案 0 :(得分:0)
马特,我建议您查看以下示例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
方法中