django的pysaml2集成

djangosaml2的Python项目详细描述


==
djangosaml2
==


图片::https://travis-ci.org/knaperek/djangosaml2.svg?branch=master
:target:https://travis ci.org/knaperek/djangosaml2
:align:left



djangosaml2是一个django应用程序,它将pysaml2库集成到您的项目中。这意味着您可以使用基于pysaml的服务提供商来保护基于django的项目。通过这种方式,它将与允许您使用此身份验证机制的身份提供商讨论saml2。
本文档将指导您完成几个简单的步骤来实现这一目标。

内容:

installation
=最终可执行文件安装在哪里并不重要,因为
您需要在配置阶段设置它的完整路径。

_ xmlsec1:http://www.aleksey.com/xmlsec/

这也将自动安装pysaml2及其依赖项。




configuration
==



要使djangosaml2在
django项目中工作,需要设置三件事:

1。**settings.py**如您所知,它是主django
配置文件。
2。**urls.py**是包含djangosaml2 url的文件。
3。**pysaml2**特定文件,如属性映射目录和
证书。




settings.py文件中的更改
--------------------------
首先需要将"djangosaml2"添加到
已安装应用的列表中::

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'djangosaml2',新应用程序

因为djangosaml2不包含任何数据模型,所以是必需的。我们包含它的唯一原因是能够从我们的项目中运行
djangosaml2测试套件,您应该始终这样做以确保它与您的django版本和环境兼容。注意:

完成配置后,可以运行djangosaml2测试套件,就像运行任何其他django应用程序测试套件一样。只需键入"python manage.py
test djangosaml2`.

测试。


然后必须将"djangosaml2.backends.saml2backend`
身份验证后端添加到身份验证后端列表中。
默认情况下,只配置django中包含的modelbackend。
典型配置如下:


身份验证后端=(
'django.contrib.auth.backends.modelbackend',
'djangosaml2.backends.saml2backend',


。注意:

djangosaml2 0.5.0之前,djangosaml2自动添加了此身份验证后端。结果证明这是一个坏主意,因为有些应用程序希望使用自己的自定义策略进行授权,而身份验证后端是定义此策略的好地方。从
django saml2 0.5.0开始,现在可以定义这样的
后端。

如果用户之前未对
进行身份验证,则需要经过身份验证的
用户的视图应将用户浏览器重定向到该url。我们还告诉用户,当用户关闭其浏览器时,会话应该终止。这我在saml2
不总是可用注销协议的联合中很有用。

…注意:

作为示例,登录url以`/saml2/`'开头,但如果需要,可以更改该值。查看"url.py"文件中有关更改的部分以获取更多信息。

ed logout binding
——
使用以下设置为sp启动的注销请求选择首选绑定::


例如::


import saml2
saml_logout_request_preferred_binding=saml2.binding_http戆u post

----------


下一步需要做的是在
main``urls.py``模块中包含``djangosaml2.urls``模块::


/>(r"^saml2/",include('djangosaml2.url'),

请随意使用您自己的前缀,但要与您在login_url参数中放入的"settings.py"文件中的内容保持一致。





保护django项目的配置:

#你的实体ID,通常是你的子域加上元数据视图的URL
"entityID":"http://localhost:8000/saml2/metadata/",

"属性映射目录
"属性映射目录":path.join(basedir,"属性映射"),

"此块说明什么服务s我们提供
"服务":{
"我们只是一个孤独的sp
"sp":{
"name":"federed django sample sp",
"name id"格式:saml2.saml.nameid"格式"持久,
"端点":{
"url并绑定到资产"离子消费者服务视图
不要更改绑定或服务名称
"断言消费者服务":[
('http://localhost:8000/saml2/acs/',
saml2.binding\u http\u post),
],
#URL和绑定到单一注销服务视图
('http://localhost:8000/saml2/ls/post',
saml2.binding\u http\u post),
],
},

可能有用但不需要
"可选属性":["edupersonaffliation"],

e这里只定义了一个idp。这个idp应该
出现在我们的元数据中

inding_http戡u redirect:'https://localhost/simplesaml/saml2/idp/ssoservice.php',
},
‘单一登录服务’:{
saml2.binding戡u http戡u redirect:'https://localhost/simplesamml/saml2/idp/single logout service.php',
},
},
},
},
},


信息
"调试":1,

Y撸u encryption撸u key.key'),撸private part
"cert撸file":path.join(basedir,"my撸u encryption撸u cert.pem"),撸public part
}],


自己的元数据设置aco sistemas,
电子邮件地址:'lgs@yaco.es',
联系人类型:'technical'},
{给定名称:'angel',
用户名:'fernandez',
公司名称:'yaco sistemas',
电子邮件地址:'angel@yaco.es',
联系人类型:'admi管理'},
],
您可以在这里设置多语言信息
组织:{
名称:[('yaco sistemas','es'),('yaco systems','en'),
显示名称:[('yaco','es'),('yaco','en'),
'url':[('http://www.yaco.es','es'),('http:'http:'//www.yaco.com","en")],
},
‘有效期:24,我们的元数据有效期是多久
}


…注意:

有关这些和其他配置选项的详细信息,请查看"pysaml2文档"。_` pysaml2文档`:http://pysaml2.readthedocs.io/en/latest/


根据此配置,您必须创建几个外部文件和目录。


在这里,在
配置部分,您只需要将完整路径放到xmlsec1,这样pysaml2
就可以根据需要调用它。

通常
只需复制源发行版的
``tests/attribute maps``目录中的默认pysaml2属性映射就安全了。

``metadata``选项是一个字典,您可以在其中为远程实体定义多种类型的
元数据。通常最简单的类型是"local",其中
只需将本地xml文件的名称与远程
实体元数据的内容放在一起。此XML文件应采用saml2元数据格式。


"密钥文件"和"证书文件"选项引用标准X509证书的两部分。你需要它来签署你的元数据。对于断言
加密/解密支持,请配置另一组"密钥文件"和
"证书文件",但作为"加密密钥对"选项的内部属性。

。注意:

查看OpenSSL文档以生成测试证书,但不要忘记在投入生产时订购一个真正的证书。




………

默认情况下,djangosaml2从
saml_配置设置读取pysaml2配置选项,但有时您希望从
其他位置(如文件或数据库)读取此信息。有时您甚至希望这个
配置根据请求而有所不同。

从djangosaml2 0.5.0开始,您可以定义自己的配置
加载程序,它是一个可调用的程序,接受请求参数并返回一个saml2.config.spconfig对象。为此,您可以设置以下
设置:

saml_config_loader='python.path.to.your.callable'



成功进行
身份验证后的ER(SP)。此断言包含有关已通过身份验证的用户的属性。这取决于idp配置,具体的
属性被发送到它可以与之交谈的每个sp。


当在django端接收到这样的断言时,它被用来查找django
用户并为其创建会话。默认情况下,djangosaml2将使用username\field属性对
用户模型进行查询,但您可以将其更改为用户模型的任何
其他属性。例如,您可以使用
"email"属性进行此查找。为此,应设置以下设置:


…_用户名字段:https://docs.djangoproject.com/en/dev/topics/auth/customization/django.contrib.auth.models.customuser.username\u字段请在设置此选项时使用唯一属性。否则,身份验证过程可能会失败,因为djangosaml2将不知道它应该选择哪个django用户。


如果您的主属性本质上不区分大小写(例如
电子邮件地址),则可以设置::


(这只是附加到主属性名中,以形成django
查询。您的主属性必须是唯一的,即使进行了此查找。)

另一个选项是使用saml2 name id作为用户名,方法是设置:


saml_use_name_id_as_username=true

很可能您不希望允许数据库中尚未
的用户。为此,可以在settings.py文件中设置另一个选项:


默认情况下,此设置为true。


此设置允许您指定用于af重定向的url验证成功后。当您只计划使用
idp启动的登录并且idp没有配置的relastate
参数时,特别有用。默认值是``/`.


您可能需要配置的另一件事是将
saml2用户属性映射到django用户属性。默认情况下,仅映射
user.username属性,但您可以添加更多属性或更改该属性。为此,您需要更改设置中的
saml_attribute_mapping选项。py:

'uid':('username',),
'mail':('email',),
'cn':('first_name',),
'sn':('last_name',),
}

f此字典是saml用户属性,值
是django用户属性。

对于每个(键、值)对,djangosaml2将尝试在用户模型中存储
属性(如果该模型中有匹配的字段)。
否则它将尝试对配置文件自定义模型执行相同的操作。对于
多值属性只有第一个值分配给目标字段。

在这种情况下,djangosaml2调用每个方法,
传递从<;saml:attributevalue>;元素中提取的属性值的完整列表。除其他用途外,这是处理多值属性(如用户组名称列表)的有用方法。


例如:

>saml断言片段::

<;saml:attribute name="groups"name format="urn:oasis:names:tc:saml:2.0:attrname format:basic">;
<;saml:attributeValue>;group1<;/saml:attributeValue>;
<;saml:attributeValue>;group2<;/saml:attributeValue>;
<;saml:attributeValue>;group3<;/saml:attributeValue>;
<;/saml:attribute>;


自定义用户对象::

django.contrib.auth。模型导入abstractuser

类用户(abstractuser):

///参数"groups"中的组名的进程列表
pass;


settings.py:

saml_attribute_mapping={
"groups":("process_groups",),
}



有关django配置文件模型的详细信息,请访问:




有时需要使用特殊逻辑来更新用户对象
,具体取决于saml2属性和映射de上面的说明是远远不够的。对于这些情况,djangosaml2提供了一个django
信号,您可以收听该信号。为此,您可以在应用程序中添加以下代码:


handler将收到user对象、saml属性列表
,以及一个标志,告诉您是否已经修改了用户,并且需要在执行handler之后保存
。如果处理程序
修改用户对象,则应返回true。否则应返回false。这样djangosaml2就知道它是否应该保存用户对象,这样您就不需要这样做,也就不需要再调用save方法了。




idp setup
=将此新SP的实体ID和元数据添加到
idp管理员,以便他们可以将其添加到受信任的服务列表中。

如果在不同的url前缀下包含了djangosaml2 url,则需要更正此
url。


simplesamlpp问题
----
从simplesamlpp1.8.2开始,如果在
sp配置中指定属性,则会出现问题。当simplesamlphp元数据解析器将
xml转换为其自定义php格式时,它会放入以下选项:


'attributes.nameformat'=>;'urn:oasis:names:tc:saml:2.0:attrname format:uri'

,但它需要替换为此格式::

'attributename format'=>;'urn:oasis:names:tc:saml:2.0:attrname format:uri'


否则,从idp发送到sp的断言将有一个错误的
属性名格式,pysaml2将被混淆。


此外,如果在simplesamlpph配置中有attributelimit筛选器,则需要在前面启用另一个属性过滤器以确保attributeLimit不会从身份验证源中删除属性。您需要添加的筛选器是一个属性emap
这样的过滤器:

>10=>;数组(
'class'=>;'core:attributemap','name2oid'
),


测试
==



检查一切是否按预期工作的一种方法是启用以下URL:

",
这里有很多url定义

(r'^saml2/',包括('djangosaml2.url'),
(r'^test/','djangosaml2.views.echo\attributes'),

更多url定义




以及
执行全局注销的链接。



…_` tox`:http://pypi.python.org/pypi/tox

===

**为什么saml不能实现为django身份验证后端?**

好吧,saml身份验证并不像一组凭证那么简单,您可以将它们放在登录表单上并得到响应。实际上,用户密码根本没有提供给服务提供商。这是故意的。必须将身份验证任务委托给idp,然后从idp获得异步响应。


django中间件类中的东西,让我们的生活更轻松?**

是的,这是我评估过的一个选项,但在最后,当前的设计获胜。在我看来,将此逻辑放入中间件中有一个优点
使其更易于配置,但有两个缺点:首先,
中间件需要检查请求路径是否是每个请求的
saml端点之一。第二,它太神奇了,在
出现问题的情况下,调试起来会困难得多。

**为什么不像其他许多django应用程序那样调用这个包django saml?**

按照该模式,我应该使用
import saml导入应用程序,但不幸的是,模块名已在pysaml2中使用。




更改
==


0.17.2(2018-08-29)
--
-将pysaml2依赖项升级到4.6.0版本,该版本修复了se安全问题。

g,mhindery,vkurup,peppelinux

0.16.11(2017-12-25)
——
——取消了python<;2.7和django<;1.8的兼容性。
——添加了一个干净的属性挂钩,允许后端重新构造从saml响应中提取的属性。
——当saml中缺少字段时记录响应。
-当属性映射映射到不存在的用户字段时记录。
-多个兼容性修复和其他小改进以及代码清理

rnal重构。
-添加了对自定义用户模型上自定义用户名字段的支持。非常感谢FrancoisFreitag.

0.16.9(2017-09-19)
----
-错误修复和小改进。感谢goetzk和ambientlighter。
-添加了saml_logout_request_preferred_binding选项
-添加了django 1.11到tox。

>0.16.4(2017-09-11)
----
-添加了对sha-256签名的支持。感谢Webspider。
-错误修复。感谢justinsg和charn。
-错误处理使其更具扩展性。这将在下一版本中得到进一步改进。

0.16.1(2017-07-15)
----------
-错误修复。感谢canni、ambientlighter、cranti和logston。
-请求现在传递到身份验证后端(在django 1.11中引入)。感谢terite。


0.16.0(2017-04-14)
----
-将pysaml2依赖项升级到4.4.0版本,该版本修复了一些序列化问题。感谢nakato提供的报告。
-添加了对带有签名身份验证请求的http重定向绑定的支持。非常感谢liquidpele提供了此功能和其他相关重构。
-删除了custom permission_denied.html模板,以支持标准permissiondenied异常。感谢mhindery.

0.15.0(2016-12-18)
----
-python 3.5支持。感谢timheap。
-增加了对可调用用户属性的支持。感谢andy miracl和joetsoi。
-安全改进:"下一个"url现在被选中。感谢flupzor。
-提高了可测试性。感谢flupzor。
-其他错误修复和小改进。感谢Jamalskarlett、WS0W、Jaywink和Liquidpele。


0.14.5(2016-09-19)
----
-django 1.10支持。感谢诱导器。
-各种修复和小改进。感谢Ajsmiltin、Ganiserb、归纳剂、Grunichev、Liquidpele和Darbula


0.14.4(2016-03-29)
----
-修复与Pysaml2-4.0.3+的兼容性问题。感谢jimr和astoltz。
-在模板中修复django 1.9兼容性问题。感谢Nikoskal。

0.14.3(2016-03-18)
----
-升级到Pysaml2-4.0.5。
-添加了"ACS默认重定向URL"设置,用于成功验证后的默认重定向。感谢Ganiserb。

0.14.2(2016-03-11)
----
-以原始"djangosaml2"包名称发布;放弃djangosaml2 knaperek fork。


0.14.1(2016-03-09)
----
-升级到pysaml2-4.0.4。

0.14.0(2016-01-28)
---———————————————————————————————————————————————————————————————————————感谢kviktor
-django 1.9支持。感谢jordi gutiérrez hermoso

0.13.2(2015-06-24)
---------
-改进了标准python日志记录的使用。


0.13.1(2015-06-05)
---------
-添加了对saml嫒u用户模型设置定义的djangosaml2特定用户模型的支持

0.13.0(2015-02-12)
----
-django 1.7支架。感谢Kamei Toshimitsu的支持。感谢erick tryzelaar

0.11.0(2014-06-15)
----
-django 1.5自定义用户模型支持。感谢jos van velzen
-django 1.5兼容性url模板标记。感谢bula
-支持django 1.5和1.6。感谢david evans和justin quick

0.10.0(2013-05-05)
————————————————————————————————————————————————————————————————————————————感谢Sam Bull报告此问题。
-在全局注销过程中,会话丢失时,向用户报告错误
消息并执行本地注销。

0.9.2(2013-04-19)
----
-升级到pysaml2-0.4.3。

0.9.1(2013-01-29)
-—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————身份验证后端。

0.8.1(2012-10-29)
———————————————————————————————————————————————————————————————————————————————————————这将修复MySQL的故障。

0.8.0(2012-10-25)
----
-允许使用"用户名"之外的其他属性来查找现有用户。


0.7.0(2012-10-19)
----
-添加一个设置以决定是否应将用户重定向到
下一个视图或当用户尝试
登录两次时显示授权错误。


0.6.1(2012-09-03)
----
-从依赖项中删除django
-还原对django 1.3的支持


0.6.0(2012-08-29)
----
-添加tox支持配置red使用python 2.6和2.7运行测试-修复一些依赖项和sdist生成。lorenzo gil
-允许在设置中定义注销重定向url。lorenzo gil
-添加一些日志调用以改进调试。lorenzo gil
-添加对自定义配置加载功能的支持。sam bull.
-当djangosaml2包含在django项目中时,使测试更加健壮和易于运行。sam bull.
-保存配置文件之前,请确保它不是none。由
leif johansson

0.5.0(2012-05-22)报告的错误
----
-允许定义自定义配置加载程序。它们可以是动态的,这取决于
请求。
-不要自动添加身份验证后端。通过这种方式,我们允许其他人添加自己的后端。
-支持其他属性,而不是映射到用户模型中的属性。这些属性存储在用户配置文件模型中。

0.4.2(2012-03-23)
————————————————————————————————————————————————————————————————————————————————2对0.4.1版的依赖性

-14)
----
-冻结pysaml2的版本,因为我们还没有(还没有!)兼容
0.4.0版

0.3.2(2011-12-13)
----
-读取映射到django的saml属性时避免崩溃
username


0.3.1(2011-12-01)
----
-在idplist templatetag的呈现方法中加载配置使其更加灵活和可重入。


0.3.0(2011-11-30)
----
-获取可用idp列表的模板标记。
-允许将同一saml属性映射到多个django字段。


0.2.4(2011-11-29)
----
-修复重新构造的文本使PYPI页面看起来很糟糕的错误。

0.2.3(2011-06-14)
----
-第一次创建用户时设置不可用的密码


0.2.2(2011-06-07)
----
-在转到/saml2/login/endpoint和用户时防止无限循环
已登录,且设置为。login_redirect_url(错误)指向/saml2/login。


0.2.1(2011-05-09)
----
-如果登录视图未提供下一个参数,请使用
设置。login_redirect_url作为默认值

<0.2.0(2011-04-26)
--——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-创建新用户时更改默认行为。现在它们的属性
第一次被填充
-允许在注销后设置下一页


0.1.0(2011-03-16)
----
-从pysaml包中解放出来




欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我下载的图像不会出现在我应用程序的屏幕上   Netbeans 8.2 Java多行注释使用键盘快捷键添加用户/日期时间   FORKJOIN分支中节点的java jbpm并发执行   Java/Oracle连接性能问题   访问数组元素时发生Java字符串越界异常   java NumberFormat不适用于ModelAndView和HandlerInterceptorAdapter   使用JUNIT的java Android文件操作测试   java有没有一种方法可以将系统关闭按钮设置为javafx按钮?   java如何计算字符串中的大小写字母?   解析Java CSV文件操作   postgresql在MAC上安装PL/Java   带有FlowLayout的java JPanel可以调整自身大小   java Lucene外部文档Id偏离内部索引docId   java如何停止Spring的默认输出?   java使用json库从文本文件中读取多个json对象   java Spring启动时出现MyBatis@MapperScan错误