AcquireTokenSilentAsync 无法对用户进行身份验证
AcquireTokenSilentAsync fails to authenticate user
我正在尝试获取静默令牌请求以初始化 ConfidentialClientApp
对象,如 'Microsoft Graph SDK ASPNET Connect' 项目中所述并在 Add sign-in with Microsoft to an ASP.NET web app
中概述
我的代码反映了上面的示例,我希望我的调用将 return 成功并可以访问。
var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First());
return result.AccessToken;
但是,我收到一条错误消息,提示用户需要进行身份验证。我不确定在这些例子中我遗漏了什么。
如果该用户已经有包含您请求的范围的缓存令牌,您只能静默获取令牌(它可以有更多,但至少需要有您所请求的内容) .
这就是为什么 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
}
我正在尝试获取静默令牌请求以初始化 ConfidentialClientApp
对象,如 'Microsoft Graph SDK ASPNET Connect' 项目中所述并在 Add sign-in with Microsoft to an ASP.NET web app
我的代码反映了上面的示例,我希望我的调用将 return 成功并可以访问。
var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First());
return result.AccessToken;
但是,我收到一条错误消息,提示用户需要进行身份验证。我不确定在这些例子中我遗漏了什么。
如果该用户已经有包含您请求的范围的缓存令牌,您只能静默获取令牌(它可以有更多,但至少需要有您所请求的内容) .
这就是为什么 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
}