首页 > 解决方案 > AcquireTokenSilentAsync 不起作用

问题描述

我有以下设置:

var authContext = new AuthenticationContext("https://login.microsoftonline.com/common");
string redirectUri = Url.Action("Authorize", "Planner", null, Request.Url.Scheme);

Uri authUri = authContext.GetAuthorizationRequestURL("https://graph.microsoft.com/", SettingsHelper.ClientId,
                                                      new Uri(redirectUri), UserIdentifier.AnyUser, null);
// Redirect the browser to the Azure signin page
return Redirect(authUri.ToString());

这将带您:

// Get the 'code' parameter from the Azure redirect
string authCode = Request.Params["code"];

// The same url we specified in the auth code request
string redirectUri = Url.Action("Authorize", "Planner", null, Request.Url.Scheme);

// Use client ID and secret to establish app identity
ClientCredential credential = new ClientCredential(SettingsHelper.ClientId, SettingsHelper.ClientSecret);

//FileTokenCache at specific location
TokenCache fileTokenCache = new FilesBasedAdalV3TokenCache("C:\\temp\\justin.bin");
AuthenticationContext authContext = new AuthenticationContext(SettingsHelper.AzureADAuthorityTenantID, fileTokenCache);

AuthenticationResult authResult = null;
try
{
     // Get the token silently first
     authResult = await authContext.AcquireTokenSilentAsync(SettingsHelper.O365UnifiedResource, credential, UserIdentifier.AnyUser);   
}
catch (AdalException ex)
{
     authContext = new AuthenticationContext(SettingsHelper.AzureADAuthority, fileTokenCache);

     authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(authCode, new Uri(redirectUri), credential, SettingsHelper.O365UnifiedResource);

}

令牌已成功保存在文件中,并且似乎也已成功检索。然而,静默令牌获取仍然会给出一个例外,即首先使用非静默函数获取令牌。请问我错过了什么?

请注意,O365UnifiedResource 设置为https://graph.microsoft.com/

标签: access-tokenazure-ad-graph-api

解决方案


通过使用解决了这个问题

new UserIdentifier("<email address used to login microsoft apps>", UserIdentifierType.RequiredDisplayableId)

代替

UserIdentifier.AnyUser

并将客户端 ID 固定为应用程序注册中指定的 APP ID


推荐阅读