我正在尝试获取静默令牌请求以初始化ConfidentialClientApp
对象,如“Microsoft Graph SDK ASPNET Connect”项目中所述,并在Add sign-in with Microsoft to an ASP.NET web app中列出
我的代码镜像上面的示例,我希望我的调用将返回一个成功的结果,并且可以访问。
var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First());
return result.AccessToken;
但是,我收到一个错误,表示用户需要进行身份验证。我不确定我在其中使用的示例中缺少什么。
答案 0 :(得分:1)
如果已经为该用户提供了包含您请求的范围的缓存令牌,那么您只能静默获取该令牌(它可以包含更多,但它至少需要您提出的要求)。
这就是AcquireTokenSilentAsync
应始终包含在Try / Catch块中的原因。如果找不到匹配的令牌,则需要启动交互式流程。以下是MSAL Wiki:
AuthenticationResult result = null;
try
{
result = await app.AcquireTokenSilentAsync(scopes, app.Users.FirstOrDefault());
}
catch (MsalUiRequiredException ex)
{
// A MsalUiRequiredException happened on AcquireTokenSilentAsync.
// This indicates you need to call AcquireTokenAsync to acquire a token
System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
try
{
result = await app.AcquireTokenAsync(scopes);
}
catch (MsalException msalex)
{
ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
}
}
catch (Exception ex)
{
ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
return;
}
if (result != null)
{
string accessToken = result.AccessToken;
// Use the token
}