首页 > 解决方案 > pysaml2 - AuthnContextClassRef,PasswordProtectedTransport

问题描述

我正在努力了解如何配置 pysaml2 并在我的请求中添加 AuthnContext。我有一个 SP,当客户端执行登录请求时,我需要添加以下请求:

<samlp:RequestedAuthnContext> 
<saml:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml:AuthnContextClassRef> 
</samlp:RequestedAuthnContext>

我很挣扎,因为我尽我所能,我相信可以在我的请求中添加它,因为在这里https://github.com/IdentityPython/pysaml2/blob/master/src/saml2/samlp.py

我可以看到:

AUTHN_PASSWORD = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"
AUTHN_PASSWORD_PROTECTED = \
    "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"

我只是不知道如何引用它。我有一个简单的配置,如下所示:

"service": {
        "sp": {
            "name": "BLABLA",
            "allow_unsolicited": true,
            "want_response_signed": false,
            "logout_requests_signed": true,
            "endpoints": {
                "assertion_consumer_service": ["https://mywebste..."],
                "single_logout_service": [["https://mywebste...", "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"]]
            },
            "requestedAuthnContext" : true
        }
    }

有人知道如何添加上述配置吗?即使通过阅读他们的文档,我也很难理解如何构建配置字典。有任何想法吗?如果配置不允许,我很乐意直接在代码中添加“PasswordProtectedTransport”。但我不知道该怎么做。

谢谢,R

标签: pythonsaml

解决方案


在某些时候,您的客户会致电create_authn_request(...) (或prepare_for_authenticate(...),或prepare_for_negotiated_authenticate(...))。您应该传递额外的 arg requested_authn_context

是一个包含想要requested_authn_context的类型的对象。saml2.samlp.RequestedAuthnContextAuthnContextClassRef

...

from saml2.saml import AUTHN_PASSWORD_PROTECTED
from saml2.saml import AuthnContextClassRef
from saml2.samlp import RequestedAuthnContext


requested_authn_context = RequestedAuthnContext(
    authn_context_class_ref=[
        AuthnContextClassRef(AUTHN_PASSWORD_PROTECTED),
    ],
    comparison="exact",
)
req_id, request = create_authn_request(
    ...,
    requested_authn_context=requested_authn_context,
)

推荐阅读