/*Constructor for use when providing an aad access token to be exchanged for an acr refresh token. Note that token expiration will require manually * providing new aad tokens. This model assumes the client is able to do this authentication themselves for AAD tokens. A callback can be provided to * be executed once the ACR refresh token expires and can no longer be renewed as the provided Aad Token has expired.*/ public AcrClientCredentials(string aadAccessToken, string loginUrl, string tenant = null, string LoginUri = null, CancellationToken cancellationToken = default, AuthToken.acquireCallback acquireNewAad = null) { AcrScopes = new Dictionary <string, string>(); AcrAccessTokens = new Dictionary <string, AcrAccessToken>(); Mode = LoginMode.TokenAad; LoginUrl = loginUrl; RequestCancellationToken = cancellationToken; AadAccess = new AuthToken(aadAccessToken, acquireNewAad); AcrRefresh = new AcrRefreshToken(AadAccess, LoginUrl); Tenant = tenant; }
public AcrAccessToken(AcrRefreshToken acrRefresh, string scope, string loginUrl) { Scope = scope; authClient = new AzureContainerRegistryClient(new TokenCredentials()) { LoginUri = "https://" + loginUrl }; RefreshFn = () => { acrRefresh.CheckAndRefresh(); return(authClient.GetAccessTokenAsync(loginUrl, scope, acrRefresh.Value).GetAwaiter().GetResult().AccessTokenProperty); }; Refresh(); }