The TempURL middleware allows URLs to be created to provide temporary access to objects. This may be handy when needing to provide download link for large objects from a Swift account which does not have public access.

Configuring TempURL

Click on the TempURL link on the Manage Cluster page Middleware tab to enable the TempURL middleware.


incoming_remove_headers and incoming_allow_headers let the administrator specify what headers / metadata the unauthenticated users are allowed to set.

outgoing_remove_headers and outgoing_allow_headers let the administrator specify what headers / metadata the unauthenticated users are allowed to see.

methods let the administrator set the allowed methods for TempURLs (GET HEAD POST PUT DELETE).

Setting the Key

In addition to enabling the middleware, a secret key must be configured on the account for use in decrypting the TempURL query string.

Using the `swift` command line tool

swift post -m 'Temp-URL-Key:<secret>' [-A AUTH_URL] [-U USERNAME] [-K PASSWORD]

Using `curl`

See Authentication and Authorization for instructions on getting the TOKEN and STORAGE_URL.

curl -i -X POST <STORAGE_URL> -H 'X-Account-Meta-Temp-URL-Key: <secret>' -H 'X-Auth-Token: <TOKEN>'

$ curl -i -X POST https://swift.example.com/v1/AUTH_bob \
>         -H 'X-Account-Meta-Temp-URL-Key: secret' \
>         -H 'X-Auth-Token: AUTH_tke9a821bd80984f31ac106e8e445a3372' -i
HTTP/1.1 204 No Content
Content-Length: 0
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txe9c628936ea54372bb78e-00523cc51d
Date: Fri, 20 Sep 2013 21:58:53 GMT

Generating a URL

You can generate TempURLs with the Swift command line client or the /opt/ss/bin/swift-temp-url utility on one of your nodes.

Using the `swift` command line tool

swift tempurl <method> <seconds> <path> <key>

Using `swift-temp-url`

/opt/ss/bin/swift-temp-url <method> <seconds> <path> <key>

seconds How long the request should be allowed
path The full path of the resource to be accessed Example: /v1/AUTH_bob/pictures/grandma.png
key The secret key set above.
$ swift tempurl GET 60 /v1/AUTH_bob/everyone_can_read_container/plan.txt secret


See http://docs.openstack.org/developer/swift/middleware.html#tempurl for instructions on how to generate TempURLs in Python.

Using the URL

curl https://<hostname><output from swift-temp-url>

$ curl -i "http://swift.example.com/v1/AUTH_bob/everyone_can_read_container/plan.txt?temp_url_sig=bc0e05d787ca0818ecbd8d61fa086e0e8514209a&temp_url_expires=1379716925"
HTTP/1.1 200 OK
Content-Length: 15
Accept-Ranges: bytes
Last-Modified: Fri, 20 Sep 2013 22:14:15 GMT
Etag: 303be4e2ed7266b1c9a6e53c842e3c6a
X-Timestamp: 1379715255.56903
Content-Type: text/plain
Content-Disposition: attachment; filename="plan.txt"
X-Trans-Id: tx2dbe017af2194a34853a3-00523cce4b
Date: Fri, 20 Sep 2013 22:38:03 GMT

it's a secret!


When using TempURL and curl it is important to put the URL in quotes so that the & doesn't get treated as a special shell character.