Skip to content

Request For Enhancement - encrypting values of cookies using a shared secret #109

Open
@nergalex

Description

@nergalex

Hi,

In order to host nginx-openid-connect based instances in a F5 Distributed Cloud (XC) Customer Edge (site) multi-cluster (virtual site), as descibed in this solution, nginx-openid-connect should evolve to do not use shared sync zones. Because, each XC site has a different DNS domain.

An evolution could be to move from a shared state model to a shared nothing model by modifying the nginx-openid-connect project to:

  • Remove the keyval zones currently used to store ID Tokens, Refresh Tokens, Access Tokens.
  • Instead, these tokens, will be stored in cookies return to the client, replacing auth_token cookie (and friends).
  • The cookie will be encrypted by NGINX(njs) using a user-defined shared secret (in the nginx configuration) before dispatch so that only NGINX (njs) may read the actual token within each cookie.
  • We may optionally compress the tokens prior to encryption also if size is a concern (also with njs).
  • We receive these cookies from the user ever request just like auth_token cookie.
  • Remove/swich out these keyval defined variables to now be js_set functions, which lazy decode each token as and when needed using the shared secret.

As an aside, this method of encrypting values of cookies using a shared secret is somewhat similar to how NGINX App Protect implements enforcer cookies without shared state (beyond the encryption / signing key).

The only shared dependency in this solution is the encryption key, which can be static / semi-static, so there is no need longer a need for zone-sync.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions