internal string GetValidAccessToken() { if (this.refreshableToken && DateTimeOffset.Now > this.reAcquireOn) { AadTokenHolder aadTokenHolder = AadAuthenticator.ReAcquireToken(this.refreshToken, this.authParams, this.dataSource, this.useAdalCache); this.SetValues(aadTokenHolder.accessToken, aadTokenHolder.refreshToken, aadTokenHolder.expiresOn, aadTokenHolder.authParams, aadTokenHolder.dataSource, aadTokenHolder.useAdalCache, true); } return(this.accessToken); }
internal HttpStream(Uri dataSourceUri, bool acceptCompressedResponses, DataType desiredRequestType, DataType desiredResponseType, CookieContainer cookieContainer, int timeoutMs, ConnectionInfo connectionInfo) : base(desiredRequestType, desiredResponseType) { try { this.webSite = dataSourceUri; this.hasASAzureHeaders = false; this.connectionInfo = connectionInfo; if (connectionInfo.IsInternalASAzure) { this.hasASAzureHeaders = true; } if (connectionInfo.IsAsAzure) { this.aadTokenHolder = connectionInfo.AadTokenHolder; this.xmlaServerHeader = connectionInfo.AsAzureServerName; this.hasASAzureHeaders = true; } else if (connectionInfo.IntegratedSecurity == IntegratedSecurity.Federated) { if (string.IsNullOrEmpty(connectionInfo.IdentityProvider) || string.Compare(connectionInfo.IdentityProvider, "MsoID", CultureInfo.InvariantCulture, CompareOptions.OrdinalIgnoreCase) != 0) { throw new NotSupportedException(XmlaSR.ConnectionString_InvalidIdentityProviderForIntegratedSecurityFederated); } this.authorizationHeader = "MsoID " + MsoIDAuthenticationProvider.Instance.Authenticate(connectionInfo.UserID, connectionInfo.Password); } else if (connectionInfo.UserID == null) { this.logonWindowsIdentity = WindowsIdentity.GetCurrent(); this.credentials = CredentialCache.DefaultCredentials; this.connectionSecureGroupName = this.logonWindowsIdentity.User.ToString(); } else { this.credentials = new NetworkCredential(connectionInfo.UserID, connectionInfo.Password); SHA1Managed sHA1Managed = new SHA1Managed(); byte[] bytes = sHA1Managed.ComputeHash(Encoding.UTF8.GetBytes(connectionInfo.Password)); this.connectionSecureGroupName = connectionInfo.UserID.Replace(";", ";;") + ";:" + Encoding.Default.GetString(bytes).Replace(";", ";;"); } if (!string.IsNullOrEmpty(connectionInfo.ClientCertificateThumbprint)) { this.clientCertificate = CertUtils.LoadCertificateByThumbprint(connectionInfo.ClientCertificateThumbprint, true); } this.acceptCompressedResponses = acceptCompressedResponses; this.applicationName = connectionInfo.ApplicationName; this.cookieContainer = cookieContainer; this.timeoutMs = timeoutMs; this.routingTokenAccessor = new HttpStream.RoutingTokenAccessor(connectionInfo); this.allowAutoRedirect = connectionInfo.AllowAutoRedirect; } catch (UriFormatException innerException) { throw new XmlaStreamException(innerException); } }
internal static AadTokenHolder ReAcquireToken(string refreshToken, AadAuthParams authParams, string dataSource, bool useAdalCache) { AadTokenHolder result; using (new AdalRuntimeLibrary.Usage()) { AdalRuntimeLibrary instance = AdalRuntimeLibrary.Instance; object obj = useAdalCache ? AadAuthenticator.CreateAuthenticationContextWithCache(authParams, dataSource) : Activator.CreateInstance(instance.AuthenticationContextT, new object[] { authParams.Authority }); object obj2 = instance.AcquireTokenByRefreshTokenM.Invoke(obj, new string[] { refreshToken, authParams.ApplicationId }); result = new AadTokenHolder((string)instance.AccessTokenP.GetValue(obj2, null), (string)instance.RefreshTokenP.GetValue(obj2, null), (DateTimeOffset)instance.ExpiresOnP.GetValue(obj2, null), authParams, dataSource, useAdalCache); } return(result); }
internal static AadTokenHolder AcquireToken(Uri dataSourceUri, string dataSource, string identityProvider, string userId, string password, bool useAdalCache) { if (userId == null && password != null) { return(new AadTokenHolder(password)); } AadAuthParams aadAuthParams = AadAuthParams.FindMatchingAuthParams(identityProvider, dataSourceUri); string text = string.Format("https://{0}", dataSourceUri.Host); AadTokenHolder result; using (new AdalRuntimeLibrary.Usage()) { AdalRuntimeLibrary instance = AdalRuntimeLibrary.Instance; object obj; if (useAdalCache) { obj = AadAuthenticator.CreateAuthenticationContextWithCache(aadAuthParams, dataSource); AadAuthParams aadAuthParams2; if (aadAuthParams.IsCommonTenant && AadAuthenticator.TryToUpdateTenant(aadAuthParams, obj, userId, out aadAuthParams2)) { aadAuthParams = aadAuthParams2; obj = AadAuthenticator.CreateAuthenticationContextWithCache(aadAuthParams, dataSource); } } else { obj = Activator.CreateInstance(instance.AuthenticationContextT, new object[] { aadAuthParams.Authority }); } object obj3; if (userId != null && password != null) { object obj2 = Activator.CreateInstance(instance.UserCredentialT, new object[] { userId, password }); obj3 = instance.AcquireTokenCredentialsM.Invoke(obj, new object[] { text, aadAuthParams.ApplicationId, obj2 }); } else if (userId != null) { object obj4 = Activator.CreateInstance(instance.UserIdentifierT, new object[] { userId, instance.OptionalDisplayableIdV }); obj3 = instance.AcquireTokenUserIdM.Invoke(obj, new object[] { text, aadAuthParams.ApplicationId, AadAuthenticator.RedirectUri, instance.PromptBehaviorAutoV, obj4 }); } else { obj3 = instance.AcquireTokenM.Invoke(obj, new object[] { text, aadAuthParams.ApplicationId, AadAuthenticator.RedirectUri, instance.PromptBehaviorAutoV }); } result = new AadTokenHolder((string)instance.AccessTokenP.GetValue(obj3, null), (string)instance.RefreshTokenP.GetValue(obj3, null), (DateTimeOffset)instance.ExpiresOnP.GetValue(obj3, null), aadAuthParams, dataSource, useAdalCache); } return(result); }
internal static Uri ResolveActualClusterUri(Uri dataSourceUri, string asAzureServerName, AadTokenHolder aadTokenHolder, ref TimeoutUtils.TimeLeft timeLeft, TimeoutUtils.OnTimoutAction timeoutAction) { Uri uri = ASAzureUtility.ClustersCache.GetCluster(dataSourceUri, asAzureServerName); if (uri != null) { return(uri); } try { using (new TimeoutUtils.TimeRestrictedMonitor(timeLeft, timeoutAction)) { Uri uri2 = new UriBuilder(dataSourceUri) { Path = "/webapi/clusterResolve" }.Uri; ASAzureUtility.NameResolutionRequest requestObject = new ASAzureUtility.NameResolutionRequest { ServerName = asAzureServerName }; ASAzureUtility.NameResolutionResult nameResolutionResult = ASAzureUtility.PostHttpJsonData <ASAzureUtility.NameResolutionRequest, ASAzureUtility.NameResolutionResult>(uri2, requestObject, aadTokenHolder.GetValidAccessToken(), timeLeft.TimeMs); uri = new UriBuilder(dataSourceUri) { Host = nameResolutionResult.ClusterFqdn }.Uri; ASAzureUtility.ClustersCache.AddCluster(dataSourceUri, asAzureServerName, uri); } } catch (WebException ex) { ASAzureUtility.ThrowConnectionException(ex); } return(uri); }