/// <summary> /// 重新获取新 Cookies,如果是第一次调用本方法,会同时启用定时检测计时器 /// </summary> public async Task Refresh() { if (!_checkTimer.Enabled) { _logger.Info($"#{BotSequenceNumber} Cookies check timer started."); _checkTimer.Start(); } if (string.IsNullOrWhiteSpace(WebApiUserNonce)) { return; } // generate an AES session key var sessionKey = CryptoHelper.GenerateRandomBlock(32); // RSA encrypt it with the public key for the universe we're on byte[] encryptedSessionKey; using (var rsa = new RSACrypto(KeyDictionary.GetPublicKey(ConnectedUniverse))) { encryptedSessionKey = rsa.Encrypt(sessionKey); } var loginKey = new byte[20]; Array.Copy(Encoding.ASCII.GetBytes(WebApiUserNonce), loginKey, WebApiUserNonce.Length); // AES encrypt the loginkey with our session key var encryptedLoginKey = CryptoHelper.SymmetricEncrypt(loginKey, sessionKey); try { await _retryPolicy.ExecuteAsync(async() => { using (dynamic userAuth = WebAPI.GetAsyncInterface("ISteamUserAuth")) { KeyValue authResult = await userAuth.AuthenticateUser(steamid: SteamId.ConvertToUInt64(), sessionkey: HttpUtility.UrlEncode(encryptedSessionKey), encrypted_loginkey: HttpUtility.UrlEncode(encryptedLoginKey), method: "POST", secure: true); _cookieContainer.Add(new Cookie("sessionid", Convert.ToBase64String(Encoding.UTF8.GetBytes(LoginKeyUniqueId.ToString())), string.Empty, "steamcommunity.com")); _cookieContainer.Add(new Cookie("steamLogin", authResult["token"].AsString(), string.Empty, "steamcommunity.com")); _cookieContainer.Add(new Cookie("steamLoginSecure", authResult["tokensecure"].AsString(), string.Empty, "steamcommunity.com")); _logger.Info($"#{BotSequenceNumber} Cookies refreshed."); } }); } catch (Exception e) { _logger.Warn($"#{BotSequenceNumber} Cookies refresh failed.", e); } }