Моя проблема похожа на эту темуUnauthorize Проблема создания DiscoveryClient даже с правильными учетными данными
Unable to create Discovery Client object for Accessing Office365 calendar
Я 100% уверен, что клиентские учетные данные являются правильными, так как я получаю маркер доступа, но в процессе из DiscoveryClient Я получаю DiscoveryFailedException -> Uauthorized
public Uri discoverySer = new Uri("https://api.office.com/discovery/v1.0/me/");
public string discoveryId = "https://api.office.com/discovery/";
public string cmmAth = "https://login.windows.net/Common";
public static AuthenticationContext _authenticationContext { get; set; }
public string _settingCliID { get; set; }
public string _settingCliSec {get; set; }
public async void CreateClient()
{
NameValueCollection section = (NameValueCollection)ConfigurationManager.GetSection("appSettings");
_settingCliID = section["ida:ClientID"];
_settingCliSec = section["ida:Password"];
OutlookServicesClient outCli = await EnsureClientCreatedAsync();
var eventResults = await outCli.Me.Events.ExecuteAsync();
}
public async Task<OutlookServicesClient> EnsureClientCreatedAsync()
{
try
{
string authority = cmmAth;
_authenticationContext = new AuthenticationContext(authority);
DiscoveryClient discoCli = new DiscoveryClient(discoverySer ,async() => await GetTokenHelperAsync(_authenticationContext, discoveryId));
CapabilityDiscoveryResult discoResult = await discoCli.DiscoverCapabilityAsync("Calendar");
var outlookCli = new OutlookServicesClient(discoResult.ServiceEndpointUri, async() => await GetTokenHelperAsync(_authenticationContext, discoResult.ServiceResourceId));
return outlookCli;
}
catch (DiscoveryFailedException e)
{
if(_authenticationContext != null && _authenticationContext.TokenCache != null){
_authenticationContext.TokenCache.Clear();
}
MessageBox.Show(e.Source);
return null;
}
catch(AdalException e){
MessageBox.Show(e.ErrorCode);
return null;
}
}
public async Task<string> GetTokenHelperAsync(AuthenticationContext context, string resourceId)
{
string accessToken = null;
AuthenticationResult result = null;
ClientCredential cliCred = new ClientCredential(_settingCliID, _settingCliSec);
result = await context.AcquireTokenAsync(resourceId, cliCred);
accessToken = result.AccessToken;
return accessToken;
}
спасибо за любую помощь заранее
Maciej
Это ответ от Скрипач на этапе DiscoveryClient { «Ошибка»: { «код»: «- 2147024891, System.UnauthorizedAccessException», «сообщение»: "Доступ запрещен У вас нет разрешения на выполнение этого действия или получить доступ к этому ресурсу. "}} – Maevy
Можете ли вы декодировать токен, который вы вернетесь, и посмотреть, выглядит ли он действительным? https://github.com/jasonjoh/office365-azure-guides/blob/master/ValidatingYourToken.md –
ОК, я пропустил много пар значений ключей после декодирования. Таким образом, это недействительно, но что я могу сделать, чтобы сделать его действительным. – Maevy