接口自动化,sso单点登陆不支持通过接口返回token,其他请求又需要token。解决方式,使用UI自动化的selenium框架登陆获取token

Posted lara1798

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口自动化,sso单点登陆不支持通过接口返回token,其他请求又需要token。解决方式,使用UI自动化的selenium框架登陆获取token相关的知识,希望对你有一定的参考价值。

找解决方案,找了好久,终于找到了, 其他博客给了我思路

F12后切换到Application,然后看token是存储在localStorage还是sessionStorage

技术图片

 

 

 

 

 

实现代码:

LoginUrl,usename,password我都自己封装在cfg.py文件中了
import time
from selenium import  webdriver
from cfg import LoginUrl,usename,password
class GetToken():
    def __init__(self):
        self.driver=webdriver.Chrome()
    def loginUI(self):
        self.driver.get(LoginUrl)
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        # 登录输入用户名,密码
        self.driver.find_element_by_id(LoginForm_username).send_keys(usename)
        self.driver.find_element_by_id(LoginForm_password).send_keys(password)
        self.driver.find_element_by_id(loginSubmit).click()
        # 强制等待5秒,待session和token都成功返回并存到浏览器中
        time.sleep(5)

    # 获取token
    def get_token(self):
        # 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中
        # window.sessionStorage和直接写sessionStorage是等效的
        # 一定要使用return,不然获取到的一直是None
        # get的Item不一定就叫token,得具体看目标系统把token存到哪个变量中
        token = self.driver.execute_script(return localStorage.getItem("token");)
        # print(‘token:‘,token)
        return token

    #关闭浏览器
    def close_browser(self):
        self.driver.quit()

if __name__ == __main__:
    gt = GetToken()
    gt.loginUI()
    ret_token=gt.get_token()
    print(获取到的token:,ret_token)
    gt.close_browser()

结果如下:

技术图片

 

以上是关于接口自动化,sso单点登陆不支持通过接口返回token,其他请求又需要token。解决方式,使用UI自动化的selenium框架登陆获取token的主要内容,如果未能解决你的问题,请参考以下文章

php 怎么实现单点登录?

单点接入方案总结

SpringBoot实现用户统一管理与单点登陆

认证和SSO-基于OAuth2单点登陆基本架构

sso单点登陆

单点登录系统