在没有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 Jgit对于给定的存储库,我们如何确定新提交的列表,以及每个提交来自哪个分支?   从MS Access数据库添加java ComboBoxItem   如何禁止Java列表中不同类的实例?   java在没有Web的JAXR上使用Shiro过滤器。xml   由于java原因,无法在Ubuntu上安装Netbeans 8.2。awt。未找到恐怖和辅助技术   java JUnit对RuntimeException的处理(特别是)   java空集合在Apache CXF服务(JAXWS)中被转换为null   java CannotAcquireLockException问题   sql如何在数据库中对(Java)枚举建模(使用SQL92)   安卓在Java中获取友好url后面的文件名   java如何访问数组名以获取列表?   javascript Java Nashorn longBitsToDouble   java控制台<init>错误   java将一个LinkedList追加/连接到另一个LinkedList的最有效方式是什么?   Java for正在跳过的循环   java帮助创建带有动画的复杂Swing GUI   java Android编辑文本。setHint在片段中不工作