summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/api/authentication.rst9
-rw-r--r--src/pyramid/authentication.py295
-rw-r--r--src/pyramid/authorization.py50
3 files changed, 161 insertions, 193 deletions
diff --git a/docs/api/authentication.rst b/docs/api/authentication.rst
index 835d46de0..f3a25ee64 100644
--- a/docs/api/authentication.rst
+++ b/docs/api/authentication.rst
@@ -14,17 +14,20 @@ Helper Classes
.. autoclass:: AuthTktCookieHelper
:members:
- .. autoclass:: HTTPBasicCredentials
- :members:
-
Helper Functions
~~~~~~~~~~~~~~~~
.. autofunction:: extract_http_basic_credentials
+ .. autoclass:: HTTPBasicCredentials
+ :members:
+
Authentication Policies
~~~~~~~~~~~~~~~~~~~~~~~
+Authentication policies have been deprecated by the new security system. See
+:ref:`upgrading_auth` for more information.
+
.. autoclass:: AuthTktAuthenticationPolicy
:members:
:inherited-members:
diff --git a/src/pyramid/authentication.py b/src/pyramid/authentication.py
index aaae36c5c..de06fe955 100644
--- a/src/pyramid/authentication.py
+++ b/src/pyramid/authentication.py
@@ -428,150 +428,9 @@ class RemoteUserAuthenticationPolicy(CallbackAuthenticationPolicy):
@implementer(IAuthenticationPolicy)
class AuthTktAuthenticationPolicy(CallbackAuthenticationPolicy):
"""A :app:`Pyramid` :term:`authentication policy` which
- obtains data from a Pyramid "auth ticket" cookie.
-
- Constructor Arguments
-
- ``secret``
-
- The secret (a string) used for auth_tkt cookie signing. This value
- should be unique across all values provided to Pyramid for various
- subsystem secrets (see :ref:`admonishment_against_secret_sharing`).
- Required.
-
- ``callback``
-
- Default: ``None``. A callback passed the userid and the
- request, expected to return ``None`` if the userid doesn't
- exist or a sequence of principal identifiers (possibly empty) if
- the user does exist. If ``callback`` is ``None``, the userid
- will be assumed to exist with no principals. Optional.
-
- ``cookie_name``
-
- Default: ``auth_tkt``. The cookie name used
- (string). Optional.
-
- ``secure``
-
- Default: ``False``. Only send the cookie back over a secure
- conn. Optional.
-
- ``include_ip``
-
- Default: ``False``. Make the requesting IP address part of
- the authentication data in the cookie. Optional.
-
- For IPv6 this option is not recommended. The ``mod_auth_tkt``
- specification does not specify how to handle IPv6 addresses, so using
- this option in combination with IPv6 addresses may cause an
- incompatible cookie. It ties the authentication ticket to that
- individual's IPv6 address.
-
- ``timeout``
-
- Default: ``None``. Maximum number of seconds which a newly
- issued ticket will be considered valid. After this amount of
- time, the ticket will expire (effectively logging the user
- out). If this value is ``None``, the ticket never expires.
- Optional.
-
- ``reissue_time``
-
- Default: ``None``. If this parameter is set, it represents the number
- of seconds that must pass before an authentication token cookie is
- automatically reissued as the result of a request which requires
- authentication. The duration is measured as the number of seconds
- since the last auth_tkt cookie was issued and 'now'. If this value is
- ``0``, a new ticket cookie will be reissued on every request which
- requires authentication.
-
- A good rule of thumb: if you want auto-expired cookies based on
- inactivity: set the ``timeout`` value to 1200 (20 mins) and set the
- ``reissue_time`` value to perhaps a tenth of the ``timeout`` value
- (120 or 2 mins). It's nonsensical to set the ``timeout`` value lower
- than the ``reissue_time`` value, as the ticket will never be reissued
- if so. However, such a configuration is not explicitly prevented.
-
- Optional.
-
- ``max_age``
-
- Default: ``None``. The max age of the auth_tkt cookie, in
- seconds. This differs from ``timeout`` inasmuch as ``timeout``
- represents the lifetime of the ticket contained in the cookie,
- while this value represents the lifetime of the cookie itself.
- When this value is set, the cookie's ``Max-Age`` and
- ``Expires`` settings will be set, allowing the auth_tkt cookie
- to last between browser sessions. It is typically nonsensical
- to set this to a value that is lower than ``timeout`` or
- ``reissue_time``, although it is not explicitly prevented.
- Optional.
-
- ``path``
-
- Default: ``/``. The path for which the auth_tkt cookie is valid.
- May be desirable if the application only serves part of a domain.
- Optional.
-
- ``http_only``
-
- Default: ``False``. Hide cookie from JavaScript by setting the
- HttpOnly flag. Not honored by all browsers.
- Optional.
-
- ``wild_domain``
-
- Default: ``True``. An auth_tkt cookie will be generated for the
- wildcard domain. If your site is hosted as ``example.com`` this
- will make the cookie available for sites underneath ``example.com``
- such as ``www.example.com``.
- Optional.
-
- ``parent_domain``
-
- Default: ``False``. An auth_tkt cookie will be generated for the
- parent domain of the current site. For example if your site is
- hosted under ``www.example.com`` a cookie will be generated for
- ``.example.com``. This can be useful if you have multiple sites
- sharing the same domain. This option supercedes the ``wild_domain``
- option.
- Optional.
-
- ``domain``
-
- Default: ``None``. If provided the auth_tkt cookie will only be
- set for this domain. This option is not compatible with ``wild_domain``
- and ``parent_domain``.
- Optional.
-
- ``hashalg``
-
- Default: ``sha512`` (the literal string).
-
- Any hash algorithm supported by Python's ``hashlib.new()`` function
- can be used as the ``hashalg``.
-
- Cookies generated by different instances of AuthTktAuthenticationPolicy
- using different ``hashalg`` options are not compatible. Switching the
- ``hashalg`` will imply that all existing users with a valid cookie will
- be required to re-login.
-
- Optional.
-
- ``debug``
-
- Default: ``False``. If ``debug`` is ``True``, log messages to the
- Pyramid debug logger about the results of various authentication
- steps. The output from debugging is useful for reporting to maillist
- or IRC channels when asking for support.
-
- ``samesite``
-
- Default: ``'Lax'``. The 'samesite' option of the session cookie. Set
- the value to ``None`` to turn off the samesite option.
-
- This option is available as of :app:`Pyramid` 1.10.
+ obtains data from a Pyramid "auth ticket" cookie. See
+ :class:`.AuthTktCookieHelper` for documentation of the constructor
+ arguments.
.. versionchanged:: 1.4
@@ -823,10 +682,150 @@ def encode_ip_timestamp(ip, timestamp):
class AuthTktCookieHelper(object):
"""
- A helper class for use in third-party authentication policy
- implementations. See
- :class:`pyramid.authentication.AuthTktAuthenticationPolicy` for the
- meanings of the constructor arguments.
+ A helper class for security policies that obtains data from an "auth
+ ticket" cookie.
+
+ Constructor Arguments
+
+ ``secret``
+
+ The secret (a string) used for auth_tkt cookie signing. This value
+ should be unique across all values provided to Pyramid for various
+ subsystem secrets (see :ref:`admonishment_against_secret_sharing`).
+ Required.
+
+ ``callback``
+
+ Default: ``None``. A callback passed the userid and the
+ request, expected to return ``None`` if the userid doesn't
+ exist or a sequence of principal identifiers (possibly empty) if
+ the user does exist. If ``callback`` is ``None``, the userid
+ will be assumed to exist with no principals. Optional.
+
+ ``cookie_name``
+
+ Default: ``auth_tkt``. The cookie name used
+ (string). Optional.
+
+ ``secure``
+
+ Default: ``False``. Only send the cookie back over a secure
+ conn. Optional.
+
+ ``include_ip``
+
+ Default: ``False``. Make the requesting IP address part of
+ the authentication data in the cookie. Optional.
+
+ For IPv6 this option is not recommended. The ``mod_auth_tkt``
+ specification does not specify how to handle IPv6 addresses, so using
+ this option in combination with IPv6 addresses may cause an
+ incompatible cookie. It ties the authentication ticket to that
+ individual's IPv6 address.
+
+ ``timeout``
+
+ Default: ``None``. Maximum number of seconds which a newly
+ issued ticket will be considered valid. After this amount of
+ time, the ticket will expire (effectively logging the user
+ out). If this value is ``None``, the ticket never expires.
+ Optional.
+
+ ``reissue_time``
+
+ Default: ``None``. If this parameter is set, it represents the number
+ of seconds that must pass before an authentication token cookie is
+ automatically reissued as the result of a request which requires
+ authentication. The duration is measured as the number of seconds
+ since the last auth_tkt cookie was issued and 'now'. If this value is
+ ``0``, a new ticket cookie will be reissued on every request which
+ requires authentication.
+
+ A good rule of thumb: if you want auto-expired cookies based on
+ inactivity: set the ``timeout`` value to 1200 (20 mins) and set the
+ ``reissue_time`` value to perhaps a tenth of the ``timeout`` value
+ (120 or 2 mins). It's nonsensical to set the ``timeout`` value lower
+ than the ``reissue_time`` value, as the ticket will never be reissued
+ if so. However, such a configuration is not explicitly prevented.
+
+ Optional.
+
+ ``max_age``
+
+ Default: ``None``. The max age of the auth_tkt cookie, in
+ seconds. This differs from ``timeout`` inasmuch as ``timeout``
+ represents the lifetime of the ticket contained in the cookie,
+ while this value represents the lifetime of the cookie itself.
+ When this value is set, the cookie's ``Max-Age`` and
+ ``Expires`` settings will be set, allowing the auth_tkt cookie
+ to last between browser sessions. It is typically nonsensical
+ to set this to a value that is lower than ``timeout`` or
+ ``reissue_time``, although it is not explicitly prevented.
+ Optional.
+
+ ``path``
+
+ Default: ``/``. The path for which the auth_tkt cookie is valid.
+ May be desirable if the application only serves part of a domain.
+ Optional.
+
+ ``http_only``
+
+ Default: ``False``. Hide cookie from JavaScript by setting the
+ HttpOnly flag. Not honored by all browsers.
+ Optional.
+
+ ``wild_domain``
+
+ Default: ``True``. An auth_tkt cookie will be generated for the
+ wildcard domain. If your site is hosted as ``example.com`` this
+ will make the cookie available for sites underneath ``example.com``
+ such as ``www.example.com``.
+ Optional.
+
+ ``parent_domain``
+
+ Default: ``False``. An auth_tkt cookie will be generated for the
+ parent domain of the current site. For example if your site is
+ hosted under ``www.example.com`` a cookie will be generated for
+ ``.example.com``. This can be useful if you have multiple sites
+ sharing the same domain. This option supercedes the ``wild_domain``
+ option.
+ Optional.
+
+ ``domain``
+
+ Default: ``None``. If provided the auth_tkt cookie will only be
+ set for this domain. This option is not compatible with ``wild_domain``
+ and ``parent_domain``.
+ Optional.
+
+ ``hashalg``
+
+ Default: ``sha512`` (the literal string).
+
+ Any hash algorithm supported by Python's ``hashlib.new()`` function
+ can be used as the ``hashalg``.
+
+ Cookies generated by different instances of AuthTktAuthenticationPolicy
+ using different ``hashalg`` options are not compatible. Switching the
+ ``hashalg`` will imply that all existing users with a valid cookie will
+ be required to re-login.
+
+ Optional.
+
+ ``debug``
+
+ Default: ``False``. If ``debug`` is ``True``, log messages to the
+ Pyramid debug logger about the results of various authentication
+ steps. The output from debugging is useful for reporting to maillist
+ or IRC channels when asking for support.
+
+ ``samesite``
+
+ Default: ``'Lax'``. The 'samesite' option of the session cookie. Set
+ the value to ``None`` to turn off the samesite option.
+
"""
parse_ticket = staticmethod(parse_ticket) # for tests
diff --git a/src/pyramid/authorization.py b/src/pyramid/authorization.py
index cb629e257..498938fd5 100644
--- a/src/pyramid/authorization.py
+++ b/src/pyramid/authorization.py
@@ -14,51 +14,17 @@ class ACLAuthorizationPolicy(object):
""" An :term:`authorization policy` which consults an :term:`ACL`
object attached to a :term:`context` to determine authorization
information about a :term:`principal` or multiple principals.
- If the context is part of a :term:`lineage`, the context's parents
- are consulted for ACL information too. The following is true
- about this security policy.
-
- - When checking whether the 'current' user is permitted (via the
- ``permits`` method), the security policy consults the
- ``context`` for an ACL first. If no ACL exists on the context,
- or one does exist but the ACL does not explicitly allow or deny
- access for any of the effective principals, consult the
- context's parent ACL, and so on, until the lineage is exhausted
- or we determine that the policy permits or denies.
-
- During this processing, if any :data:`pyramid.security.Deny`
- ACE is found matching any principal in ``principals``, stop
- processing by returning an
- :class:`pyramid.security.ACLDenied` instance (equals
- ``False``) immediately. If any
- :data:`pyramid.security.Allow` ACE is found matching any
- principal, stop processing by returning an
- :class:`pyramid.security.ACLAllowed` instance (equals
- ``True``) immediately. If we exhaust the context's
- :term:`lineage`, and no ACE has explicitly permitted or denied
- access, return an instance of
- :class:`pyramid.security.ACLDenied` (equals ``False``).
-
- - When computing principals allowed by a permission via the
- :func:`pyramid.security.principals_allowed_by_permission`
- method, we compute the set of principals that are explicitly
- granted the ``permission`` in the provided ``context``. We do
- this by walking 'up' the object graph *from the root* to the
- context. During this walking process, if we find an explicit
- :data:`pyramid.security.Allow` ACE for a principal that
- matches the ``permission``, the principal is included in the
- allow list. However, if later in the walking process that
- principal is mentioned in any :data:`pyramid.security.Deny`
- ACE for the permission, the principal is removed from the allow
- list. If a :data:`pyramid.security.Deny` to the principal
- :data:`pyramid.security.Everyone` is encountered during the
- walking process that matches the ``permission``, the allow list
- is cleared for all principals encountered in previous ACLs. The
- walking process ends after we've processed the any ACL directly
- attached to ``context``; a set of principals is returned.
+ This class is a wrapper around :class:`.ACLHelper`, refer to that class for
+ more detailed documentation.
Objects of this class implement the
:class:`pyramid.interfaces.IAuthorizationPolicy` interface.
+
+ .. deprecated:: 2.0
+
+ Authorization policies have been deprecated by the new security system.
+ See :ref:`upgrading_auth` for more information.
+
"""
def __init__(self):