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;
    }
  • .netcore 3.1
  • 镀铬/边缘 V95
  • 硒 4.0.1

有什么见解吗?谢谢。

4

0 回答 0