通常情况下,使用AcquireTokenSilent方法时,调用方应该已经知道用户的标识或登录凭据,以便自动获取访问令牌。然而,如果用户没有登录或已登录的会话过期,传递登录提示参数将是必要的。
以下是一个示例,在AcquireTokenSilent方法中传递登录提示参数的方式:
// 获取缓存的用户标识
string userId = ClaimsPrincipal.Current.FindFirst(System.IdentityModel.Claims.ClaimTypes.NameIdentifier).Value;
// 创建MsalClient实例
IPublicClientApplication clientapp = PublicClientApplicationBuilder.Create(ClientId).WithB2CAuthority(Authority).Build();
// 指定缓存作为令牌提供者
TokenCacheHelper.FillCache(clientapp.UserTokenCache, ClaimsPrincipal.Current);
// 创建AuthenticationResult实例
AuthenticationResult result = await clientapp.AcquireTokenSilent(scopes, clientapp.GetAccountsAsync(userId).Result.FirstOrDefault())
.WithB2CAuthority(Authority)
.WithClaims(extractedClaims => { })
.ExecuteAsync();
在此示例中,我们首先从当前用户的身份声明中提取了用户标识。然后,创建了MsalClient实例来获取访问令牌。使用GetAccountsAsync方法获得指定用户的帐户实例,如果帐户实例存在,则会使用AcquireTokenSilent方法自动获取访问令牌。而在标识过期或未登录的情况下,将使用传递给AcquireTokenSilent方法的登录提示参数来强制重新登录。