Как расширить токен в MS Dynamics - PullRequest
0 голосов
/ 20 сентября 2018

Я аутентифицируюсь в Dynamics, используя следующий код:

public async Task<String> GetAuthenticationToken(string uri, string clientId, string clientSecret)
{
AuthenticationParameters ap = 
AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(uri)).Result;
var creds = new ClientCredential(clientId, clientSecret);
AuthenticationContext authContext = new AuthenticationContext(ap.Authority);
AuthenticationResult result = await 
authContext.AcquireTokenAsync(ap.Resource, creds);
return result.AccessToken;
}

Он отлично работает и возвращает AuthenticationResult, который включает в себя:

AccessToken: The usual long string
AccessTokenType : Bearer
ExpiresOn : DateTime 1 hour from now
ExtendedExpiresOn : Datetime 3 days from now
Authority : A login.microsoft.com URL

Проблема в том, что я незнать, как обновить токен, чтобы я мог продолжить работу.Можно ли сделать простой звонок, который продлит его еще на час?

1 Ответ

0 голосов
/ 21 сентября 2018

Вы могли бы сделать что-то подобное, не на 100% уверенный в коде, не протестировал

 private static string GetToken(TraceWriter log)
    {
        lock (tokenlock)
        {
            if (DateTime.UtcNow >= ExpireDate)
            {

                var clientcred = new ClientCredential(clientId, clientSecret);
                AuthenticationContext authContext = new AuthenticationContext(aadInstance, false);
                AuthenticationResult result = authContext.AcquireToken(organizationUrl, clientcred);
                token = result.AccessToken;
                ExpireDate = result.ExpiresOn.DateTime;
                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
            }
            return token;
        }
    }
...