在没有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
- 您需要知道要登录的应用程序的“嵌入”链接,并将其作为connect_to()的参数传递。
完成后只需关闭会话。
my_session.okta_session.close()
它也可以执行,但这主要是一个概念的证明,因为它只是打印原始内容。 我可能会在将来的某个时候把那部分去掉。
使用
构建许可证
这个项目是在麻省理工学院的许可下授权的-详细信息请参见LICENSE.md文件