Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

Latest commit

 

History

History
77 lines (53 loc) · 2.65 KB

README.rst

File metadata and controls

77 lines (53 loc) · 2.65 KB

pyramid_ipauth

An authentication policy for Pyramid that sets identity and effective principals based on the remote IP address of the request.

Overview

To perform IP-address-based authentication, create an IPAuthenticationPolicy and specify the target IP range, userid and effective principals. Then set it as the authentication policy in your configurator:

authn_policy = IPAuthenticationPolicy("127.0.*.*", "myuser", ["locals"])
config.set_authentication_policy(authn_policy)

This will cause all requests from IP addresses in the 127.0.*.* range to be authenticated as user "myuser" and have the effective principal "locals".

It is also possible to specify the configuration options in your deployment file:

[app:pyramidapp]
use = egg:mypyramidapp

ipauth.ipaddrs = 127.0.0.* 127.0.1.*
ipauth.principals = locals

You can then simply include the pyramid_ipauth package into your configurator:

config.include("pyramid_ipauth")

It will detect the ipauth settings and construct an appropriate policy.

Note that this package only supports matching against a single set of IP addresss. If you need to assign different credentials to different sets of IP addresses, you can use the pyramid_multiauth package in conjunction with pyramid_ipauth:

http://github.com/mozilla-services/pyramid_multiauth

If you don't want to hard-code the userid or principals at configuration time, you may specify a "get_userid" and/or "get_principals" callback instead.

Specifying IP Addresses

IP addresses can be specified in a variety of forms, including:

  • "all": all possible IPv4 and IPv6 addresses
  • "local": all local addresses of the machine
  • "A.B.C.D" a single IP address
  • "A.B.C.D/N" a network address specification
  • "A.B.C.*" a glob matching against all possible numbers
  • "A.B.C.D-E" a glob matching against a range of numbers
  • a whitespace- or comma-separated string of any of the above
  • a netaddr IPAddress, IPRange, IPGlob, IPNetork of IPSet object
  • a list, tuple or iterable of any of the above

Proxies

This module does not respect the X-Forwarded-For header by default, since it can be spoofed easily by malicious clients. If your server is behind a trusted proxy that sets the X-Forwarded-For header, you should explicitly declare the set of trusted proxies like so:

IPAuthenticationPolicy("127.0.*.*",
                       principals=["local"],
                       proxies = "127.0.0.1")

The set of trusted proxy addresses can be specified using the same syntax as the set of IP addresses to authenticate.