Я создал службу WCF, которая выполняет операции CRUD для Outlook, используя Graph API. он работает у меня локально, но когда я развернул его на нашем UAT-сервере, я получил 403, запрещенных в этой части:
result = _authContext.AcquireTokenAsync(resourceId,ClientId, uc).Result;
это фрагмент моего кода авторизации AD:
string authority = string.Format(CultureInfo.InvariantCulture, Instance, Tenant);
if(_authContext == null)
{
_authContext = new AuthenticationContext(authority, false, new FileCache(_cacheFile));
}
string resourceId = path to resource id;
try {
result = _authContext.AcquireTokenSilentAsync(resourceId,ClientId).Result;
accessToken = result.AccessToken;
expiresOn = result.ExpiresOn;
} catch( AggregateException exc)
{
if(ex != null && ex.ErrorCode != "failed_to_acquire_token_silently")
{
throw;
}
}
if(accessToken == null || expiresOn <= DateTimeOffset.UtcNow.AddMinutes(5))
{
UserCredential uc = new UserCredential();
uc = new UserCredential("hardcoded username for testing");
result = _authContext.AcquireTokenAsync(resourceId,ClientId, uc).Result;
accessToken = result.AccessToken;
expiresOn = result.ExpiresOn;
}
Я уже пытался жестко кодировать UserCredential, и учетная запись пула приложений в IIS имеет разрешение.
в моем web.config я добавил это:
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy bypassonlocal="True" proxyaddress="......" />
</defaultProxy>
</system.net>
Я также пытался настроить WebProxy в методе запуска приложения моего Glabal.asax, но это не помогло. Это проблема с кодом или проблема конфигурации в IIS?