<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden in .NET Maps SDK Questions</title>
    <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525930#M12992</link>
    <description>&lt;P&gt;Here's an example using WebView2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public class OAuthAuthorizeHandlerWpf : IOAuthAuthorizeHandler
{
    // Embedded Browser: Use a System.Windows.Window to host the sign-in UI provided by the server.
    private Window? authWindow;

    // Use a TaskCompletionSource to track the completion of the authorization.
    private TaskCompletionSource&amp;lt;IDictionary&amp;lt;string, string&amp;gt;&amp;gt;? taskCompletionSource;
    
    // URL for the authorization callback result (the redirect URI configured for your application).
    private string? redirectUrl;

    // Function to initiate an authorization request.
    // It takes the URIs for: the secured service, the authorization endpoint, and the redirect URI.
    public Task&amp;lt;IDictionary&amp;lt;string, string&amp;gt;&amp;gt; AuthorizeAsync(Uri serviceUri, Uri authorizeUri, Uri redirectUri)
    {
        // Don't start an authorization request if one is still in progress.
        if (taskCompletionSource != null &amp;amp;&amp;amp; !taskCompletionSource.Task.IsCompleted)
        { throw new Exception("Authentication request already in progress."); }

        // Instantiate the TaskCompletionSource to track the completion of the authorization.
        taskCompletionSource = new TaskCompletionSource&amp;lt;IDictionary&amp;lt;string, string&amp;gt;&amp;gt;();

        // Store the authorization and redirect URLs.
        redirectUrl = redirectUri.AbsoluteUri;

        // Show the sign-in page (schedule to be run on the main UI thread).
        Dispatcher? dispatcher = Application.Current.Dispatcher;
        if (dispatcher == null || dispatcher.CheckAccess())
        {
            // Currently on the UI thread, no need to dispatch.
            ShowLoginWindow(authorizeUri);
        }
        else
        {
            // AuthorizeAsync was called on a separate thread, dispatch to the UI thread.
            Action? authorizeOnUIAction = () =&amp;gt; ShowLoginWindow(authorizeUri);
            dispatcher.BeginInvoke(authorizeOnUIAction);
        }

        // Return the task associated with the TaskCompletionSource.
        return taskCompletionSource.Task;
    }

    // A function to show a sign-in page hosted at the specified Url.
    private void ShowLoginWindow(Uri authorizeUri)
    {
        // Instantiate a Microsoft Edge (Chromium) WebView2 control.
        // See: https://learn.microsoft.com/en-us/microsoft-edge/webview2/
        // Note: When releasing an app that uses Microsoft Edge WebView2, you need distribute the WebView2 Runtime, either:
        // - By distributing the automatically updated Evergreen Runtime or;
        // - By distributing a Fixed Version of the Runtime.
        // See-also: https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution
        WebView2? webView2 = new();

        // Display the web browser in a new window.
        authWindow = new Window
        {
            Icon = null,
            Title = authorizeUri.Authority,
            Content = webView2,
            Width = 400,
            Height = 500,
            WindowStartupLocation = WindowStartupLocation.CenterOwner
        };

        // Set the app as the owner of the authentication dialog window.
        if (Application.Current != null &amp;amp;&amp;amp; Application.Current.MainWindow != null)
        {
            authWindow.Owner = Application.Current.MainWindow;
        }

        // Handle the window closed event.
        authWindow.Closed += OnWindowClosed;

        // Set the Source property of the WebView2 to the Authorize URI (e.g. {https://www.arcgis.com/sharing/oauth2/authorize?response_type=code...).
        webView2.Source = authorizeUri;

        // Handle the WebView2 NavigationStarting event in which we'll check if the destination URL is our Redirect URI and then process.
        webView2.NavigationStarting += WebView2_NavigationStarting;

        // Show the dialog to the user.
        authWindow.ShowDialog();
    }

    private void WebView2_NavigationStarting(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationStartingEventArgs e)
    {
        // Check for nulls/empties.
        if (sender == null || sender is not WebView2 || string.IsNullOrEmpty(e.Uri))
            return;

        if (redirectUrl != null)
        {
            // Check if browser was redirected to the Redirect URI (indicates successful authentication).
            if (new Uri(e.Uri).AbsoluteUri.StartsWith(redirectUrl))
            {
                // Cancel the page navigation.
                e.Cancel = true;

                // Call a function to parse key/value pairs from the response URI and set the result for the task completion source with the returned dictionary.
                taskCompletionSource?.SetResult(DecodeParameters(new Uri(e.Uri)));

                // Close the window.
                authWindow?.Close();
            }
        }
    }

    // A function to parse key/value pairs from the provided URI.
    private static Dictionary&amp;lt;string, string&amp;gt; DecodeParameters(Uri uri)
    {
        string? str = string.Empty;
        if (!string.IsNullOrEmpty(uri.Fragment))
            str = uri.Fragment[1..];
        else if (!string.IsNullOrEmpty(uri.Query))
            str = uri.Query[1..]; ;

        // Create new dictionary of key value string pairs to hold the return values.
        Dictionary&amp;lt;string, string&amp;gt; keyValueDictionary = [];

        /*
            * .NET 6 and above includes convenient HttpUtility class.
            */
        // Parse the URI query string into a collection.
        NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(str);
        foreach (string key in nameValueCollection.Keys)
        {
            keyValueDictionary[key] = nameValueCollection[key] ?? string.Empty;
        }

        /*
            * Use .NET Framework compatible pattern.
            */
        // Parse parameters into key / value pairs.
        //string[] keysAndValues = str.Split(new[] { '&amp;amp;' }, StringSplitOptions.RemoveEmptyEntries);
        //foreach (string kvString in keysAndValues)
        //{
        //    string[] pair = kvString.Split('=');
        //    string? key = pair[0];
        //    string? value = string.Empty;
        //    if (key.Length &amp;gt; 1)
        //    {
        //        value = Uri.UnescapeDataString(pair[1]);
        //    }

        //    keyValueDictionary.Add(key, value);
        //}

        return keyValueDictionary;
    }

    // Handle the browser window closing.
    private void OnWindowClosed(object? sender, EventArgs? e)
    {
        // If the browser window closes, return the focus to the main window.
        if (authWindow != null &amp;amp;&amp;amp; authWindow.Owner != null)
        {
            authWindow.Owner.Focus();
        }

        // If the task wasn't completed, the user must have closed the window without logging in.
        if (taskCompletionSource != null &amp;amp;&amp;amp; !taskCompletionSource.Task.IsCompleted)
        {
            // Set the task completion source exception to indicate a canceled operation.
            taskCompletionSource.SetCanceled();
        }

        authWindow = null;
    }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 22 Aug 2024 16:42:35 GMT</pubDate>
    <dc:creator>MichaelBranscomb</dc:creator>
    <dc:date>2024-08-22T16:42:35Z</dc:date>
    <item>
      <title>oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525739#M12987</link>
      <description>&lt;P&gt;We&amp;lt;re building a WPF windows app with ArcGIS Maps SDK .Net. First thing we did was put in place oAuth2 authentification for our partal and our ArcGIS Online. That was working fine for the last 10 months till yeaterday. Then this morning, when we try to login to our arcGIS Online the login window appear and javascript error message pops over it. Then the call to&amp;nbsp;AuthenticationManager.Current.GenerateCredentialAsync(info.ServiceUri); fails...&lt;BR /&gt;&lt;BR /&gt;When we connect to our portal (the ArcGIS server that we host on our server) it works fine.&lt;BR /&gt;&lt;BR /&gt;What changed between yesterday and today?&lt;/P&gt;&lt;P&gt;Please help.&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 14:17:38 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525739#M12987</guid>
      <dc:creator>PierreMasson</dc:creator>
      <dc:date>2024-08-22T14:17:38Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525827#M12988</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm not aware of &lt;A href="https://status.arcgis.com/" target="_blank" rel="noopener"&gt;any current issues ArcGIS Online&lt;/A&gt;, and having just tried the OAuth workflow with ArcGIS Online in a WPF app, it worked as expected.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can you share more info about your setup/project?&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Is it reproducible on multiple machines in your team/company?&lt;/LI&gt;&lt;LI&gt;What version of the SDK are you referencing?&lt;/LI&gt;&lt;LI&gt;Are you targeting .NET or .NET Framework?&lt;/LI&gt;&lt;LI&gt;What version of the .NET platform/runtime you're using is on the machines where you see the issue?&lt;/LI&gt;&lt;LI&gt;What embedded browser control are you using in your OAuth dialog?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 15:14:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525827#M12988</guid>
      <dc:creator>MichaelBranscomb</dc:creator>
      <dc:date>2024-08-22T15:14:58Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525868#M12989</link>
      <description>&lt;P&gt;I can reproduce the issue. Looks like the oauth dialog made a change making it incompatible with WPF's default Internet Explorer browser.&lt;BR /&gt;I've started an issue internally to see if we can't get that fixed.&lt;/P&gt;&lt;P&gt;You could look into using &lt;A href="https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/wpf" target="_self"&gt;WebView2&lt;/A&gt; instead of the default browser control which doesn't seem to be affected.&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 15:42:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525868#M12989</guid>
      <dc:creator>dotMorten_esri</dc:creator>
      <dc:date>2024-08-22T15:42:27Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525908#M12991</link>
      <description>&lt;P&gt;Thanks, hope they will resolve this soon. Meanwhile do you have a sample of the WebView2 use?&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 16:24:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525908#M12991</guid>
      <dc:creator>PierreMasson</dc:creator>
      <dc:date>2024-08-22T16:24:58Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525930#M12992</link>
      <description>&lt;P&gt;Here's an example using WebView2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public class OAuthAuthorizeHandlerWpf : IOAuthAuthorizeHandler
{
    // Embedded Browser: Use a System.Windows.Window to host the sign-in UI provided by the server.
    private Window? authWindow;

    // Use a TaskCompletionSource to track the completion of the authorization.
    private TaskCompletionSource&amp;lt;IDictionary&amp;lt;string, string&amp;gt;&amp;gt;? taskCompletionSource;
    
    // URL for the authorization callback result (the redirect URI configured for your application).
    private string? redirectUrl;

    // Function to initiate an authorization request.
    // It takes the URIs for: the secured service, the authorization endpoint, and the redirect URI.
    public Task&amp;lt;IDictionary&amp;lt;string, string&amp;gt;&amp;gt; AuthorizeAsync(Uri serviceUri, Uri authorizeUri, Uri redirectUri)
    {
        // Don't start an authorization request if one is still in progress.
        if (taskCompletionSource != null &amp;amp;&amp;amp; !taskCompletionSource.Task.IsCompleted)
        { throw new Exception("Authentication request already in progress."); }

        // Instantiate the TaskCompletionSource to track the completion of the authorization.
        taskCompletionSource = new TaskCompletionSource&amp;lt;IDictionary&amp;lt;string, string&amp;gt;&amp;gt;();

        // Store the authorization and redirect URLs.
        redirectUrl = redirectUri.AbsoluteUri;

        // Show the sign-in page (schedule to be run on the main UI thread).
        Dispatcher? dispatcher = Application.Current.Dispatcher;
        if (dispatcher == null || dispatcher.CheckAccess())
        {
            // Currently on the UI thread, no need to dispatch.
            ShowLoginWindow(authorizeUri);
        }
        else
        {
            // AuthorizeAsync was called on a separate thread, dispatch to the UI thread.
            Action? authorizeOnUIAction = () =&amp;gt; ShowLoginWindow(authorizeUri);
            dispatcher.BeginInvoke(authorizeOnUIAction);
        }

        // Return the task associated with the TaskCompletionSource.
        return taskCompletionSource.Task;
    }

    // A function to show a sign-in page hosted at the specified Url.
    private void ShowLoginWindow(Uri authorizeUri)
    {
        // Instantiate a Microsoft Edge (Chromium) WebView2 control.
        // See: https://learn.microsoft.com/en-us/microsoft-edge/webview2/
        // Note: When releasing an app that uses Microsoft Edge WebView2, you need distribute the WebView2 Runtime, either:
        // - By distributing the automatically updated Evergreen Runtime or;
        // - By distributing a Fixed Version of the Runtime.
        // See-also: https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution
        WebView2? webView2 = new();

        // Display the web browser in a new window.
        authWindow = new Window
        {
            Icon = null,
            Title = authorizeUri.Authority,
            Content = webView2,
            Width = 400,
            Height = 500,
            WindowStartupLocation = WindowStartupLocation.CenterOwner
        };

        // Set the app as the owner of the authentication dialog window.
        if (Application.Current != null &amp;amp;&amp;amp; Application.Current.MainWindow != null)
        {
            authWindow.Owner = Application.Current.MainWindow;
        }

        // Handle the window closed event.
        authWindow.Closed += OnWindowClosed;

        // Set the Source property of the WebView2 to the Authorize URI (e.g. {https://www.arcgis.com/sharing/oauth2/authorize?response_type=code...).
        webView2.Source = authorizeUri;

        // Handle the WebView2 NavigationStarting event in which we'll check if the destination URL is our Redirect URI and then process.
        webView2.NavigationStarting += WebView2_NavigationStarting;

        // Show the dialog to the user.
        authWindow.ShowDialog();
    }

    private void WebView2_NavigationStarting(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationStartingEventArgs e)
    {
        // Check for nulls/empties.
        if (sender == null || sender is not WebView2 || string.IsNullOrEmpty(e.Uri))
            return;

        if (redirectUrl != null)
        {
            // Check if browser was redirected to the Redirect URI (indicates successful authentication).
            if (new Uri(e.Uri).AbsoluteUri.StartsWith(redirectUrl))
            {
                // Cancel the page navigation.
                e.Cancel = true;

                // Call a function to parse key/value pairs from the response URI and set the result for the task completion source with the returned dictionary.
                taskCompletionSource?.SetResult(DecodeParameters(new Uri(e.Uri)));

                // Close the window.
                authWindow?.Close();
            }
        }
    }

    // A function to parse key/value pairs from the provided URI.
    private static Dictionary&amp;lt;string, string&amp;gt; DecodeParameters(Uri uri)
    {
        string? str = string.Empty;
        if (!string.IsNullOrEmpty(uri.Fragment))
            str = uri.Fragment[1..];
        else if (!string.IsNullOrEmpty(uri.Query))
            str = uri.Query[1..]; ;

        // Create new dictionary of key value string pairs to hold the return values.
        Dictionary&amp;lt;string, string&amp;gt; keyValueDictionary = [];

        /*
            * .NET 6 and above includes convenient HttpUtility class.
            */
        // Parse the URI query string into a collection.
        NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(str);
        foreach (string key in nameValueCollection.Keys)
        {
            keyValueDictionary[key] = nameValueCollection[key] ?? string.Empty;
        }

        /*
            * Use .NET Framework compatible pattern.
            */
        // Parse parameters into key / value pairs.
        //string[] keysAndValues = str.Split(new[] { '&amp;amp;' }, StringSplitOptions.RemoveEmptyEntries);
        //foreach (string kvString in keysAndValues)
        //{
        //    string[] pair = kvString.Split('=');
        //    string? key = pair[0];
        //    string? value = string.Empty;
        //    if (key.Length &amp;gt; 1)
        //    {
        //        value = Uri.UnescapeDataString(pair[1]);
        //    }

        //    keyValueDictionary.Add(key, value);
        //}

        return keyValueDictionary;
    }

    // Handle the browser window closing.
    private void OnWindowClosed(object? sender, EventArgs? e)
    {
        // If the browser window closes, return the focus to the main window.
        if (authWindow != null &amp;amp;&amp;amp; authWindow.Owner != null)
        {
            authWindow.Owner.Focus();
        }

        // If the task wasn't completed, the user must have closed the window without logging in.
        if (taskCompletionSource != null &amp;amp;&amp;amp; !taskCompletionSource.Task.IsCompleted)
        {
            // Set the task completion source exception to indicate a canceled operation.
            taskCompletionSource.SetCanceled();
        }

        authWindow = null;
    }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 16:42:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525930#M12992</guid>
      <dc:creator>MichaelBranscomb</dc:creator>
      <dc:date>2024-08-22T16:42:35Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525933#M12993</link>
      <description>&lt;P&gt;Attached a runnable sample. I left the "old" WebBrowser class in there too so you can compare the differences. They are mostly pretty minor&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 16:44:55 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1525933#M12993</guid>
      <dc:creator>dotMorten_esri</dc:creator>
      <dc:date>2024-08-22T16:44:55Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1526178#M12994</link>
      <description>&lt;P&gt;ArcGIS Online has made a fix and it will be published soon.&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2024 21:31:57 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1526178#M12994</guid>
      <dc:creator>dotMorten_esri</dc:creator>
      <dc:date>2024-08-22T21:31:57Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1526720#M12996</link>
      <description>&lt;P&gt;The fix is now live. Thank you for reporting this!&lt;/P&gt;</description>
      <pubDate>Sat, 24 Aug 2024 00:08:54 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1526720#M12996</guid>
      <dc:creator>dotMorten_esri</dc:creator>
      <dc:date>2024-08-24T00:08:54Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1526728#M12997</link>
      <description>&lt;P&gt;Thanks. It's working now. Saved me from having to install WebView2.&lt;/P&gt;</description>
      <pubDate>Sat, 24 Aug 2024 01:16:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1526728#M12997</guid>
      <dc:creator>ArvindsDevadas</dc:creator>
      <dc:date>2024-08-24T01:16:03Z</dc:date>
    </item>
    <item>
      <title>Re: oAuth2 GenerateCredentialAsync for ArcGIS Online throws javascript errors all of a sudden</title>
      <link>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1529058#M13009</link>
      <description>&lt;P&gt;I found the WebView2 looks much better with the newer API&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.esri.com/t5/net-maps-sdk-questions/oauth-dialog-sizing-wpf-4-7-2/m-p/1412288#M12641" target="_self"&gt;OAuth dialog sizing (WPF 4.7.2)&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 28 Aug 2024 22:07:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/net-maps-sdk-questions/oauth2-generatecredentialasync-for-arcgis-online/m-p/1529058#M13009</guid>
      <dc:creator>JoeHershman</dc:creator>
      <dc:date>2024-08-28T22:07:11Z</dc:date>
    </item>
  </channel>
</rss>

