4

我有一个 Django 应用程序,我正在尝试添加 Okta 身份验证。我目前创建了一个自定义后端,它利用 Okta API 对用户进行身份验证:

class OKTABackend(ModelBackend):

  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)

  def authenticate(self, username=None, password=None):
    headers = {
      'Authorization': 'SSWS {}'.format(<my OKTA API token>),
      'Accept': 'application/json',
      'Content-type': 'application/json'
    }
    authentication_payload = {
      'username': username,
      'password': password
    }
    r = requests.post(
          <my OKTA app address>,
          headers=headers,
          data=json.dumps(authentication_payload)
    )

    try:
      r.raise_for_status()
      # code that finds/creates and returns user
    except:
      return None

我有一个登录页面,其中包含一个获取用户名和密码并将信息传递到该后端进行身份验证的表单。所有这些都在起作用。但是当我访问 OKTA 站点并单击我的应用程序时,我希望它能够登录到应用程序。目前它只是重定向到我的登录页面。如何启用从 OKTA 站点登录到我的应用程序?

4

3 回答 3

11

您现在不必自己实现它。只需使用开箱即用的解决方案: https ://github.com/fangli/django-saml2-auth

它可以与 okta 顺利配合使用。

PS我是这个插件的作者。

于 2016-04-12T09:14:10.830 回答
1

我建议使用 Python Social Auth: http: //psa.matiasaguirre.net/ 它有一个可以使用的通用 SAML 后端。 http://psa.matiasaguirre.net/docs/backends/saml.html 文档很好,扩展也很简单。在我自己的项目中,我们对其进行了扩展以从数据库中提取 SAML IdP 信息,以便我们可以让用户自助输入该数据。

于 2015-11-19T20:33:11.253 回答
0

您将需要实施 Okta 支持的单点登录技术。对于 Python,最好的方法是 SAML,因为有多个 Python SAML 库可供使用。我建议阅读 SAML 以及它是如何工作的,以便全面了解。在这里查看更多信息。

当您启用 SAML 应用程序时,您的应用程序将向 Okta 发送 SAML 请求以进行身份​​验证。如果您还没有 Okta 会话,系统会要求您登录。成功登录后,Okta 会向您的应用程序发送 SAML 响应以允许您登录。如果您确实有 Okta 会话,Okta 只会将 SAML 响应返回给应用程序,而不提示登录。

Okta 中的每个应用程序也可以有自己的登录页面,这样当 SAML 请求进入 Okta 时,您仍然可以使用自己的登录页面而不是默认的 Okta 登录页面。

于 2015-09-24T16:05:42.740 回答