0

システムにあるリクエスト内の JWT を抽出しようとしています。

  • ローカルで実行しているときはうまく機能し、コードはすべてのリクエストをインターセプトします...
  • コードが Azure Pipeline によって実行されたとき、要求はインターセプトされず、空でした。
    private static void GetJwtFromRequest(WebDriver driver)
        {
            string jwt = "";
            FetchAdapter fetchAdapter = null;

            if (!Requests.Any())
                Requests = new List<Request>();

            fetchAdapter = GetBreezeNetworkRequests(driver);

            var isRequestExist = driver.GetWebDriverWait(30)
                   .Until(x =>
                   {
                       var temp = Requests;
                       return temp.Any(x => x.Headers.Any(y => y.Key == "Authorization"));
                   });

            if (isRequestExist)
                {
                    Request wantedRequest = Requests.First(x => x.Headers.Any(y => y.Key == "Authorization"));
                    jwt = wantedRequest.Headers["Authorization"].Replace("Bearer ", "");
                }

            UserFactory.CurrentUser.Jwt = jwt;
         }
  

Selenium によるネットワーク傍受:

public static List<Request> Requests = new List<Request>();

    private static FetchAdapter GetBreezeNetworkRequests(WebDriver driver)
    {
        IDevTools devTools = driver.OriginDriver as IDevTools;
        DevToolsSession session = devTools.GetDevToolsSession();

        FetchAdapter fetchAdapter = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V95.DevToolsSessionDomains>().Fetch;
        var enableCommandSettings = new OpenQA.Selenium.DevTools.V95.Fetch.EnableCommandSettings();

        var requestPattern = new OpenQA.Selenium.DevTools.V95.Fetch.RequestPattern();
        requestPattern.RequestStage = RequestStage.Request;
        requestPattern.ResourceType = ResourceType.XHR;

        enableCommandSettings.Patterns = new OpenQA.Selenium.DevTools.V95.Fetch.RequestPattern[] { requestPattern };
        fetchAdapter.Enable(enableCommandSettings);

        EventHandler<OpenQA.Selenium.DevTools.V95.Fetch.RequestPausedEventArgs> requestIntercepted = (sender, e) =>
        {
            Requests.Add(e.Request);
            fetchAdapter.ContinueRequest(new OpenQA.Selenium.DevTools.V95.Fetch.ContinueRequestCommandSettings()
            {
                RequestId = e.RequestId
            });
        };

        fetchAdapter.RequestPaused += requestIntercepted;

        return fetchAdapter;
    }
  • .ネットコア 3.1
  • クローム/エッジ V95
  • セレン 4.0.1

洞察はありますか?ありがとう。

4

0 に答える 0