Java 如何在不中断用户会话的情况下以静默方式登录多个web应用程序

Java 如何在不中断用户会话的情况下以静默方式登录多个web应用程序,java,c#,vbscript,Java,C#,Vbscript,我们需要登录到20-30个不同的web应用程序,并输入凭据以保持用户全天处于活动状态。这需要在用户机器的后台进行,而不会中断用户。我们在这里使用什么技术来实现这一点 我们曾考虑过使用RPA,但这是一种侵入性行为,会导致用户中断。当RPA运行时,用户将被禁止使用其计算机 我们希望这段自动代码能够一次登录到多个web应用程序,或者在一天中以并行线程(无偏好)的方式按计划登录到多个web应用程序,或者用户可以启动它。此自动化解决方案需要能够保存用户凭据,并使用户不必输入其凭据 我们可以使用C#、vbs

我们需要登录到20-30个不同的web应用程序,并输入凭据以保持用户全天处于活动状态。这需要在用户机器的后台进行,而不会中断用户。我们在这里使用什么技术来实现这一点

我们曾考虑过使用RPA,但这是一种侵入性行为,会导致用户中断。当RPA运行时,用户将被禁止使用其计算机

我们希望这段自动代码能够一次登录到多个web应用程序,或者在一天中以并行线程(无偏好)的方式按计划登录到多个web应用程序,或者用户可以启动它。此自动化解决方案需要能够保存用户凭据,并使用户不必输入其凭据


我们可以使用C#、vbscript、java或任何其他软件开发工具来完成这类工作吗?

当然这是可能的。您可能会面临的最大问题是,不同的网站可能使用不同的身份验证机制,但大多数可能是通用的

这里是一个简单的Python单线程示例,但是可以使用任何语言,也可以实现并发

import requests
import re


# Put the configuration for each website in a structure like this
websites = [
    {
        'url': 'https://example.com/login',
        'form': {'username': 'myusername', 'password': 'password123'}
        'csrf_token': {'regex': '<input type="hidden" name="csrf_token" value="(.*)">', 'post': 'csrf_token'},
        'check': 'Welcome, myusername!',
    },
    {
        'url': 'https://example2.com/login.php',
        'form': {'username': 'myotheruser', 'password': 'qwertyuiop'}
        'csrf_token': {'regex': '<input type="hidden" name="_token" value="(.*)">', 'post': '_token'},
        'check': 'My Account',
    },
    ... more websites
]

for website in websites:
    # Use sessions so cookies are preserved
    session = requests.Session()

    # If the website requires CSRF tokens, we need to fetch the login page first to extract the token
    if website.get('csrf_token'):
        r = session.get(website['url'])
        csrf_token = re.search(website['csrf_token']['regex'], r.text).group(1)
        # Update post params with CSRF token value
        website['form'][website['csrf_token']['post']] = csrf_token
    r = session.post(website['url'], data=website['form'])

    # Check if login worked
    if website['check'] in r.text:
        print("Successfully logged in to:", website['url'])
    else:
        print("Failed to log in to:", website['url'])



导入请求
进口稀土
#将每个网站的配置放在如下结构中
网站=[
{
“url”:”https://example.com/login',
'form':{'username':'myusername','password':'password123'}
'csrf_-token':{'regex':'','post':'csrf_-token'},
“检查”:“欢迎光临,我的用户名!”,
},
{
“url”:”https://example2.com/login.php',
'form':{'username':'myotheruser','password':'qwertyuiop'}
'csrf_-token':{'regex':''post':'u-token'},
“支票”:“我的账户”,
},
…更多网站
]
对于网站中的网站:
#使用会话以保留cookie
会话=请求。会话()
#如果网站需要CSRF令牌,我们需要首先获取登录页面以提取令牌
如果网站.get('csrf_令牌'):
r=session.get(网站['url'])
csrf_token=re.search(网站['csrf_token']['regex'],r.text)。组(1)
#使用CSRF令牌值更新post参数
网站['form'][网站['csrf_代币]['post']]=csrf_代币
r=session.post(网站['url'],数据=网站['form'])
#检查登录是否有效
如果r.text中的网站['check']:
打印(“已成功登录:”,网站['url'])
其他:
打印(“登录到:,网站['url']失败”)

注意,这个例子对CSRF令牌做了一些天真的假设,也没有实现错误处理。希望这能给你一个想法。

考虑问一下你考虑过硒吗?@RaceYouAnytime-我从未使用过硒,我很想知道更多关于它的信息以及如何实施解决方案。你知道这有多划算吗?@DavidBrossard:这可能是离题的:要么被视为与安全无关(即离题),要么被视为试图以会话超时的形式绕过现有的安全措施(也离题)对我来说,这项要求还不完全清楚:如果这项要求必须防止会话超时,以便用户可以随时继续而无需再次登录,那么它可能必须在用户浏览器中运行,以访问cookie、本地存储、,具有相同的浏览器指纹等。它可能还需要适应特定的web应用程序。巨大的响应@multithr3at3d!非常感谢你。我会试试这个,让你知道它是怎么回事。