private async Task InvokeIosBrokerAsync(Dictionary <string, string> brokerPayload) { s_brokerResponseReady = new SemaphoreSlim(0); if (brokerPayload.ContainsKey(BrokerParameter.BrokerInstallUrl)) { _logger.Info(iOSBrokerConstants.BrokerPayloadContainsInstallUrl); string appLink = brokerPayload[BrokerParameter.BrokerInstallUrl]; DispatchQueue.MainQueue.DispatchAsync(() => UIApplication.SharedApplication.OpenUrl(new NSUrl(appLink))); throw new MsalClientException( MsalError.BrokerApplicationRequired, MsalErrorMessage.BrokerApplicationRequired); } else { _logger.Info(iOSBrokerConstants.InvokeTheIosBroker); NSUrl url = new NSUrl(iOSBrokerConstants.InvokeV2Broker + brokerPayload.ToQueryParameter()); _logger.VerbosePii( iOSBrokerConstants.BrokerPayloadPii + brokerPayload.ToQueryParameter(), iOSBrokerConstants.BrokerPayloadNoPii + brokerPayload.Count); DispatchQueue.MainQueue.DispatchAsync(() => UIApplication.SharedApplication.OpenUrl(url)); } await s_brokerResponseReady.WaitAsync().ConfigureAwait(false); }
public InstanceDiscoveryMetadataEntry GetMetadata( string environment, IEnumerable <string> existingEnvironmentsInCache, ICoreLogger logger) { if (existingEnvironmentsInCache == null) { existingEnvironmentsInCache = Enumerable.Empty <string>(); } bool canUseProvider = existingEnvironmentsInCache.All(e => s_knownEnvironments.ContainsOrdinalIgnoreCase(e)); if (canUseProvider) { s_knownEntries.TryGetValue(environment, out InstanceDiscoveryMetadataEntry entry); logger.Verbose($"[Instance Discovery] Tried to use known metadata provider for {environment}. Success? {entry != null}"); return(entry); } logger.VerbosePii( $"[Instance Discovery] Could not use known metadata provider because at least one environment in the cache is not known. Environments in cache: {string.Join(" ", existingEnvironmentsInCache)} ", $"[Instance Discovery] Could not use known metadata provider because at least one environment in the cache is not known"); return(null); }
private async Task InvokeIosBrokerAsync(Dictionary <string, string> brokerPayload) { s_brokerResponseReady = new SemaphoreSlim(0); _logger.Info(iOSBrokerConstants.InvokeTheIosBroker); NSUrl url = new NSUrl(iOSBrokerConstants.InvokeV2Broker + brokerPayload.ToQueryParameter()); _logger.VerbosePii( iOSBrokerConstants.BrokerPayloadPii + brokerPayload.ToQueryParameter(), iOSBrokerConstants.BrokerPayloadNoPii + brokerPayload.Count); DispatchQueue.MainQueue.DispatchAsync(() => UIApplication.SharedApplication.OpenUrl(url)); using (_logger.LogBlockDuration("waiting for broker response")) { await s_brokerResponseReady.WaitAsync().ConfigureAwait(false); } }
private async Task InvokeIosBrokerAsync(Dictionary <string, string> brokerPayload) { s_brokerResponseReady = new SemaphoreSlim(0); if (brokerPayload.ContainsKey(BrokerParameter.BrokerInstallUrl)) { _logger.Info(iOSBrokerConstants.BrokerPayloadContainsInstallUrl); string url = brokerPayload[BrokerParameter.BrokerInstallUrl]; Uri uri = new Uri(url); string query = uri.Query; if (query.StartsWith("?", StringComparison.OrdinalIgnoreCase)) { query = query.Substring(1); } _logger.Info(iOSBrokerConstants.InvokeIosBrokerAppLink); Dictionary <string, string> keyPair = CoreHelpers.ParseKeyValueList(query, '&', true, false, null); _logger.Info(iOSBrokerConstants.StartingActionViewActivity + iOSBrokerConstants.AppLink); DispatchQueue.MainQueue.DispatchAsync(() => UIApplication.SharedApplication.OpenUrl(new NSUrl(keyPair[iOSBrokerConstants.AppLink]))); throw new MsalClientException(MsalErrorIOSEx.BrokerApplicationRequired, MsalErrorMessageIOSEx.BrokerApplicationRequired); } else { _logger.Info(iOSBrokerConstants.InvokeTheIosBroker); NSUrl url = new NSUrl(iOSBrokerConstants.InvokeBroker + brokerPayload.ToQueryParameter()); _logger.VerbosePii(iOSBrokerConstants.BrokerPayloadPii + brokerPayload.ToQueryParameter(), iOSBrokerConstants.BrokerPayloadNoPii + brokerPayload.Count); DispatchQueue.MainQueue.DispatchAsync(() => UIApplication.SharedApplication.OpenUrl(url)); } await s_brokerResponseReady.WaitAsync().ConfigureAwait(false); }
public async Task <IWebTokenRequestResultWrapper> GetTokenSilentlyAsync(WebAccount webAccount, WebTokenRequest webTokenRequest) { using (_logger.LogBlockDuration("WAM:GetTokenSilentlyAsync:webAccount")) { if (_logger.IsLoggingEnabled(LogLevel.Verbose)) { _logger.VerbosePii(webTokenRequest.ToLogString(true), webTokenRequest.ToLogString(false)); _logger.VerbosePii(webAccount.ToLogString(true), webAccount.ToLogString(false)); } var wamResult = await WebAuthenticationCoreManager.GetTokenSilentlyAsync(webTokenRequest, webAccount); return(new WebTokenRequestResultWrapper(wamResult)); } }
private async Task <Account> ConvertToMsalAccountOrNullAsync( string clientId, WebAccount webAccount, InstanceDiscoveryMetadataEntry envMetadata, ICacheSessionManager cacheManager, IEnumerable <IAccount> accountsFromCache) { webAccount.Properties.TryGetValue("TenantId", out string realm); if (!_wamProxy.TryGetAccountProperty(webAccount, "Authority", out string accountAuthority)) { _logger.WarningPii( $"[WAM AAD Provider] Could not convert the WAM account {webAccount.UserName} (id: {webAccount.Id}) to an MSAL account because the Authority could not be found", $"[WAM AAD Provider] Could not convert the WAM account {webAccount.Id} to an MSAL account because the Authority could not be found"); return(null); } string accountEnv = (new Uri(accountAuthority)).Host; if (!envMetadata.Aliases.ContainsOrdinalIgnoreCase(accountEnv)) { _logger.InfoPii( $"[WAM AAD Provider] Account {webAccount.UserName} enviroment {accountEnv} does not match input authority env {envMetadata.PreferredNetwork} or an alias", $"[WAM AAD Provider] Account enviroment {accountEnv} does not match input authority env {envMetadata.PreferredNetwork}"); return(null); } if (MatchCacheAccount(webAccount, accountsFromCache, out AccountId homeAccountId)) { _logger.VerbosePii( $"[WAM AAD Provider] ConvertToMsalAccountOrNullAsync account {webAccount.UserName} matched a cached account", $"[WAM AAD Provider] Account matched a cache account"); return(new Account( homeAccountId.Identifier, webAccount.UserName, envMetadata.PreferredNetwork, new Dictionary <string, string>() { { clientId, webAccount.Id } })); } return(await GetIdFromWebResponseAsync(clientId, webAccount, envMetadata, cacheManager).ConfigureAwait(false)); }
#pragma warning disable CS1570 // XML comment has badly formed XML /// <summary> /// Example TCP response: /// /// {GET /?code=OAQABAAIAAAC5una0EUFgTIF8ElaxtWjTl5wse5YHycjcaO_qJukUUexKz660btJtJSiQKz1h4b5DalmXspKis-bS6Inu8lNs4CpoE4FITrLv00Mr3MEYEQzgrn6JiNoIwDFSl4HBzHG8Kjd4Ho65QGUMVNyTjhWyQDf_12E8Gw9sll_sbOU51FIreZlVuvsqIWBMIJ8mfmExZBSckofV6LbcKJTeEZKaqjC09x3k1dpsCNJAtYTQIus5g1DyhAW8viDpWDpQJlT55_0W4rrNKY3CSD5AhKd3Ng4_ePPd7iC6qObfmMBlCcldX688vR2IghV0GoA0qNalzwqP7lov-yf38uVZ3ir6VlDNpbzCoV-drw0zhlMKgSq6LXT7QQYmuA4RVy_7TE9gjQpW-P0_ZXUHirpgdsblaa3JUq4cXpbMU8YCLQm7I2L0oCkBTupYXKLoM2gHSYPJ5HChhj1x0pWXRzXdqbx_TPTujBLsAo4Skr_XiLQ4QPJZpkscmXezpPa5Z87gDenUBRBI9ppROhOksekMbvPataF0qBaM38QzcnzeOCFyih1OjIKsq3GeryChrEtfY9CL9lBZ6alIIQB4thD__Tc24OUmr04hX34PjMyt1Z9Qvr76Pw0r7A52JvqQLWupx8bqok6AyCwqUGfLCPjwylSLA7NYD7vScAbfkOOszfoCC3ff14Dqm3IAB1tUJfCZoab61c6Mozls74c2Ujr3roHw4NdPuo-re5fbpSw5RVu8MffWYwXrO3GdmgcvIMkli2uperucLldNVIp6Pc3MatMYSBeAikuhtaZiZAhhl3uQxzoMhU-MO9WXuG2oIkqSvKjghxi1NUhfTK4-du7I5h1r0lFh9b3h8kvE1WBhAIxLdSAA&state=b380f309-7d24-4793-b938-e4a512b2c7f6&session_state=a442c3cd-a25e-4b88-8b33-36d194ba11b2 HTTP/1.1 /// Host: localhost:9001 /// Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,ro;q=0.7,fr;q=0.6 /// Connection: keep-alive /// Upgrade-Insecure-Requests: 1 /// User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 /// Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 /// Accept-Encoding: gzip, deflate, br /// </summary> /// <returns>http://localhost:9001/?code=foo&session_state=bar</returns> #pragma warning restore CS1570 // XML comment has badly formed XML public static Uri ExtractUriFromHttpRequest(string httpRequest, ICoreLogger logger) { string getQuery = ExtractQuery(httpRequest, logger); string host = ExtractHost(httpRequest, logger); var hostParts = host.Split(':'); logger.VerbosePii("Host:" + host + "Query: " + getQuery, "Host: " + host); var uriBuilder = new UriBuilder(); if (hostParts.Count() == 2) { uriBuilder.Host = hostParts[0]; uriBuilder.Port = int.Parse(hostParts[1], CultureInfo.InvariantCulture); } else { uriBuilder.Host = host; } uriBuilder.Query = getQuery; return(uriBuilder.Uri); }