【问题标题】:SAML and forced SSLSAML 和强制 SSL
【发布时间】:2023-04-07 06:52:01
【问题描述】:

我正在我的网站上实施 SAML 支持。我在我的 Django 应用程序中使用 OneLogin's Python SAML Toolkit 来执行此操作。在我的本地机器上连接到 OneLogin 测试应用程序和 Azure 应用程序时一切正常,http://127.0.0.1:8000(完全本地)或http://192.168.x.x:800(本地网络)。一旦我在我的登台服务器上尝试这个,它强制所有 URL 到 https,事情就会失败。 IE11 根本无法在身份提供者的响应中发布任何数据,这很奇怪,通常我会从 Toolkit 中收到如下错误:

The response was received at https://dev.mysite.com:80/saml/connect/ instead of https://dev.mysite.com/saml/connect/

因此,虽然应该正确配置,但 IdP 最终会尝试在端口 80 上 POST 回我的登台服务器,这使事情变得混乱。如果我从一开始就将其全部设置为使用端口 80,Chrome 就会发疯,因为它不相信 https://...:80 是安全的。我找不到任何引用此问题的文档或 SO 问题;我所看到的只是the OneLogin Python setup instructions 中的这条注释:

Important: Ensure that your URLs begin with http, not https.

但没有解释为什么。我彻底糊涂了。

【问题讨论】:

    标签: azure ssl https saml onelogin


    【解决方案1】:

    python-saml 支持 https 或 http。

    您只需要正确设置请求的值,请使用 prepare_django_request 方法查看此演示 (https://github.com/onelogin/python-saml/blob/master/demo-django/demo/views.py#L18)

    【讨论】:

    • 我正在正确设置这些值;那不是问题。似乎 IdP 总是使用 http 回发,我的开发服务器强制升级到 https,这搞砸了。我会尽快提供更多详细信息。
    • 好吧,我承认仔细阅读该演示解决了我们的问题:# If server is behind proxys or balancers use the HTTP_X_FORWARDED fields 基本上我们需要使用request.META['HTTP_X_FORWARDED_PORT'],因为我们在 ELB 后面。 (Django 1.9 中的get_port() 对此很有用。)这就是端口 80 的来源,令人困惑。
    猜你喜欢
    • 2012-02-02
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2011-05-22
    • 2023-03-18
    相关资源
    最近更新 更多