在MSAL中的AcquireTokenSilentAsync中使用哪个IUser

时间:2018-01-19 20:41:51

标签: azure-active-directory azure-ad-b2c msal

我在使用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">的问题是否重要?

1 个答案:

答案 0 :(得分:0)

马特,我建议您查看以下示例active-directory-b2c-xamarin-native,特别是位于UserDetailsClient/MainPage.xaml.cs#L76-L85GetUserByPolicy(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方法中