当前位置: 首页 > 知识库问答 >
问题:

使用 SAML 的 Dropbox 和 Django SSO

冀崇凛
2023-03-14

摘要
我希望通过使用来自Django站点的身份验证来使用Dropbox SSO功能。请注意,我不希望使用SAML作为我的Django站点的后端。

资源
1)Dropbox自定义SSO帮助页面:https://www.dropbox.com/en/help/1921#custom
2)创建SAML响应:https://robinelvin.wordpress.com/2009/09/04/saml-with-django/
3)努力从Google中找到任何执行此类SSO的示例。许多关于人们使用SAML作为Django后端的链接。

问题
在dropbox管理设置中,我可以添加我的X509证书和登录链接。这意味着,当您尝试使用SSO登录Dropbox时,它会使用一个GET请求将您很好地转发到my Django站点的登录页面,查询字符串中有一个SAMLRequest。

但是,我的理解是,一旦用户在Django网站上通过身份验证,我现在需要在他们的SAML登录链接处发出POST请求,并在帖子数据中显示SAMLResponse。使用上面的第二个资源,我相信我可以创建SAMLResponse xml,但我不确定如何将用户重定向到Dropbox SAML登录链接,其中包含Django视图中的SAML数据。

任何帮助都非常感谢。

共有1个答案

萧英睿
2023-03-14

设法使用django-saml2-idp获得我需要的功能https://github.com/peopledoc/django-saml2-idp

有关在此处安装的良好文档:https://github.com/peopledoc/django-saml2-idp/blob/master/doc/INSTALL.txt

Dropbox管理控制台中的设置需要X509证书,然后将登录url设置为:https://****.com/idp/login

请注意,我在安装M2Crypto依赖项时遇到了问题,所以使用了Ubuntu包,方法是:< br > < code > sudo apt-get install python-m2 crypto

此外,我正在使用Django 1.9.6,因此需要对<code>视图进行重写。py,URL。py注册表。py文件以使其兼容(需要更新各种导入语句,URL更改为新的列表格式,而不是使用模式)。

按如下方式创建了 Dropbox 处理器:

import base64
import zlib
from saml2idp import base
from saml2idp.xml_render import _get_assertion_xml

def get_assertion_dropbox_xml(parameters, signed=False):
    return _get_assertion_xml(ASSERTION_DROPBOX, parameters, signed)

ASSERTION_DROPBOX = (
    '<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" '
            'ID="${ASSERTION_ID}" '
            'IssueInstant="${ISSUE_INSTANT}" '
            'Version="2.0">'
        '<saml:Issuer>${ISSUER}</saml:Issuer>'
        '${ASSERTION_SIGNATURE}'
        '${SUBJECT_STATEMENT}'
        '<saml:Conditions NotBefore="${NOT_BEFORE}" NotOnOrAfter="${NOT_ON_OR_AFTER}">'
            '<saml:AudienceRestriction>'
                '<saml:Audience>${AUDIENCE}</saml:Audience>'
            '</saml:AudienceRestriction>'
        '</saml:Conditions>'
        '<saml:AuthnStatement AuthnInstant="${AUTH_INSTANT}"'
            '>'
            '<saml:AuthnContext>'
                '<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>'
            '</saml:AuthnContext>'
        '</saml:AuthnStatement>'
        '${ATTRIBUTE_STATEMENT}'
    '</saml:Assertion>'
)


class Processor(base.Processor):

    def _decode_request(self):
        """
        Decodes _request_xml from _saml_request.
        """
        self._request_xml = zlib.decompress(base64.b64decode(self._saml_request), -15)

    def _format_assertion(self):
        self._assertion_xml = get_assertion_dropbox_xml(self._assertion_params, signed=False)

您可以在<code>设置中注册。py文件如下:

SAML2IDP_CONFIG = {
    'autosubmit': True,
    'certificate_file': '/****/certificate.pem',
    'private_key_file': '/****/private-key.pem',
    'issuer': 'https://www.****.com',
    'signing': True,
}

sampleSpConfig = {
    'acs_url': 'https://www.dropbox.com/saml_login',
    'processor': 'dropbox.Processor',
}

SAML2IDP_REMOTES = {
    'sample': sampleSpConfig,
}

像梦一样工作。希望这能帮助外面的人。

 类似资料:
  • 本文向大家介绍Dropbox API 使用Dropbox .NET库上传文件,包括了Dropbox API 使用Dropbox .NET库上传文件的使用技巧和注意事项,需要的朋友参考一下 示例 本示例使用Dropbox .NET库将文件上传到Dropbox帐户,并使用较大文件的上传会话:            

  • 如何使用SAML协议中的RelayState指定IdP启动的SSO中SP的登录页? 我在IdP和SP之间设置了一个IdP发起的SSO流程。它可以工作,但是它位于root_path。我需要这个登陆RelayState URL。 我正在使用device。在我的控制器下面找到:

  • 我正在试验使用 Azure AD 作为 IDP 的 Java Web 应用程序中的 SAML 2.0 SSO。 我修改了样本 - https://github.com/Azure-Samples/active-directory-java-webapp-openidconnect 以生成SAML请求。 但是我得到以下错误- AADSTS75005:请求不是有效的Saml2协议消息 我尝试使用Ope

  • Dropbox 为你提供跨平台的文件在线存储、同步及分享解决方案。目前用户可以获得 2G 存储容量空间。Linux 平台要求 GTK 2.12、GLib 2.14、Nautilus 2.16、Libnotify 0.4.4、Wget 1.10 等包(或这些包的更高版本)。 Dropbox ”在 Linux 下的表现是一个 Nautilus plug-in,在你的主目录下生成一个虚拟目录,把需要同步

  • 我正在尝试使用Python 3.4在dropbox中上传文件。我可以成功地将文件上传到dropbox。但我需要知道如何读取Dropbox文件夹中的文件。例如:如果dropbox文件夹中有文本和csv文件,那么我需要使用Python dropbox API v2读取这些文件的内容?

  • 我知道如何将dropbox API与dropbox core SDK一起使用: 但是,在不使用SDK的情况下,有没有可能做到这一点呢?