在没有api令牌的情况下从命令行轻松登录okta

oktaloginwrapper的Python项目详细描述


okta登录包装器

为您的脚本提供一种简单的方法来访问Okta SSO解决方案背后的资源,而不需要API令牌。

先决条件

  • Python3
  • OKTA帐户

安装

Oktaloginwrapper现在可以在PYPI上使用。只需使用:

pip install oktaloginwrapper

开始

~警告~当前脚本仅在启用了“推送”、“秘密问题”或“软件令牌”作为mfa时才有效。

此脚本的主要目标是帮助您使用带有okta的sso登录到应用程序,而不需要任何api令牌。

作为另一个脚本的一部分,它允许您拥有一个okta_会话对象,从该对象可以连接到okta中分配给您的所有应用程序。

从导入模块开始,用您的okta实例/组织名称实例化一个oktasession对象。

fromoktaloginwrapperimportOktaLoginWrapperasOLWmy_session=OLW.OktaSession(okta_instance)#Where okta_instance is https://<okta_instance>.okta.com

然后,根据您要使用的多因素类型,您可以执行以下操作

  • 最基本的推送通知用法(默认)。您有60秒的时间批准手机上的连接。

    >>>my_session.okta_auth(...username='<your_username>',...password='<your_password>',...)59secondsremainingbeforetimeout.57secondsremainingbeforetimeout.55secondsremainingbeforetimeout.'You are now logged in.'
  • connect使用机密问题。

    • 您可以在身份验证期间直接提供答案。这会让你直接登录。
      >>>my_session.okta_auth(...username='<your_username>',...password='<your_password>',...answer='<your_answer>'...)'You are now logged in.'
    • 或者通过提供因子类型来使用交互方式。系统将提示您输入答案。
      >>>my_session.okta_auth(...username='<your_username>',...password='<your_password>',...factor_type='question'...)Whatwasyourdreamjobasachild>?<your_answer>'You are now logged in.'
  • 使用软件令牌连接。(当前未使用硬件令牌进行测试)

    • 您可以在身份验证期间直接提供密码。这会让你直接登录。
      >>>my_session.okta_auth(...username='<your_username>',...password='<your_password>',...passCode='<your_passCode>'...)'You are now logged in.'
    • 或者通过提供因子类型来使用交互方式。系统将提示您输入密码。
      >>>my_session.okta_auth(...username='<your_username>',...password='<your_password>',...factor_type='token'...)PleasetypeinyourOTP:>?<your_passCode>'You are now logged in.'
  • 连接分配给您的应用程序。

    • 您需要知道要登录的应用程序的“嵌入”链接,并将其作为connect_to()的参数传递。
      my_app=my_session.connect_to(<your_app_url>)

    或者,您可以使用提供的方法app_list()检索分配给您的应用程序列表及其url并从中进行连接。

    >>>my_apps=my_session.app_list()>>>my_app=None>>>app_name=<your_app_name>>>>forappinmy_apps:...ifapp.get('label')==app_name:...my_app=my_session.connect_to(app.get('linkUrl'))>>>ifnotmy_app:...print("You do not have {} assigned in Okta.".format(app_name))
    • 您还可以使用connect_from_appslist()方法获得一种交互式方法来选择您的应用程序并连接到它。
    >>>my_app=my_session.connect_from_appslist()appname:>?Slack0-Slack1-Slack-devPleaseselecttheapptoconnectto:>?0
  • 完成后只需关闭会话。

    my_session.okta_session.close()

它也可以执行,但这主要是一个概念的证明,因为它只是打印原始内容。 我可能会在将来的某个时候把那部分去掉。

使用

构建
  • Requests-对人类的python http请求
  • lxml-用于python的lxml工具包

许可证

这个项目是在麻省理工学院的许可下授权的-详细信息请参见LICENSE.md文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何反射地迭代数组字段?   java NamedQuery错误“具有给定标识符的多行:1”   java无法使用单独类中的计时器更新TextView   兼容性什么时候可以很快使用新的Java功能?   java二叉树路径和   java矩形的性能   java我想从同一个子表在主表中添加两个外键   java如何获取基于特定日期的所有数据?   java javafx、OO编程规则和写入变量类型的选择   java使用带枚举的switch语句   java异步任务生成运行时异常   java为什么JLabel不显示下划线字符?   java如何解析具有可变参数号的函数?   带有按钮的java JavaFX自定义列表单元格:未调用处理程序   java Modelmapper无法映射整个模型?   传递给持久化的java分离实体,包含LatLng列表