blob: fa42c9982217211e64fda42273a52027f39e6d43 [file] [log] [blame] [view]
---
title: "Design Doc - Multiple HTTP Passwords with Limited Lifetime - Use Cases"
permalink: design-docs/multiple-http-passwords-with-lifetime-use-cases.html
hide_sidebar: true
hide_navtoggle: true
toc: false
---
# Use Cases
## <a id="definitions"> Definitions
* **HTTP password:** When `auth.gitBasicAuthPolicy` is set to `HTTP` or `HTTP_LDAP`,
Gerrit will authenticate git- and REST API-requests using basic authentication,
where the password has to be generated within Gerrit, i.e. it is not the
password in the Identity Provider (IDP) used for authenticating in the Gerrit
UI. This password has an unlimited lifetime and only a single password can
exist per account at a time.
* **Token:** A token refers to a generated random String that can be used like
a password during basic authentication, but potentially has a limited lifetime.
## <a id="primary"> Use Cases
* Rotation of passwords or tokens reduce the risk of unauthorized access by
reducing the time during which the credential is valid and can be used by a
potential attacker. Enforcing the rotation of passwords/tokens ensures that
users comply with security policies.
* Exposure is significantly reduced if users can request short-lived tokens
for development, proof-of-concepts etc. instead of using their long lived
credentials outside of their local environment.
* Replacing an old password/token with a new is less disruptive if both credentials
can be valid simultaneously so as to not break automated processes between
requesting a new password/token and replacing the old.
## <a id="acceptance-criteria"> Acceptance Criteria
* Accounts can have multiple tokens associated with them.
* During authentication, the provided token has to match one of the stored
token hashes.
* Tokens can be configured to have a limited lifetime, starting from the
time of creation.
* During authentication, stored tokens are only considered within their
lifetime. If no such token exists, or the provided token does not match
with the available valid tokens, authentication will fail.
* Rotation of tokens has to be a seamless experience, i.e. clients using an
existing token have to continue to work (if the token is still valid).
* Gerrit administrators can configure whether to enable and also whether to enforce
a limited lifetime of tokens.
* Gerrit administrators can configure the maximum lifetime of tokens that
can be configured by users.
* A migration path has to exist, allowing admins to migrate from the old HTTP
password to the new token approach. This migration should be possible online
and not require a downtime.
## <a id="out-of-scope"> Out Of Scope
* Tokens will not have a limited scope, but as before will allow access to all
resources the associated account has access to. This feature will be subject
to a separate design document in the near future.
## <a id="background"> Background
Single-Sign On (SSO) is commonly used by a lot of services/tools. This provides
a great user experience, since users will have to authenticate manually less
often and have to manage less credentials. However, having only a single or handful
of passwords, increases the risk, since if it is compromised not only one but
multiple services will be compromised. For that reason, a lot of tools provide
a feature to generate tokens that have a limited lifetime and can be used when
authenticating from scripts or command line. That way the SSO password of a user
is not exposed on machines running automated scripts for example. Generated
tokens are further required, since some authentication methods, e.g. OAuth,
require login via a browser, which is not suitable for automated tools.
Gerrit provides the functionality to generate such passwords. These generated
passwords do however always have an unlimited lifetime. Thus, if such a password
is compromised and the owner does not manually regenerate it, the attacker will
be able to use it for a long time.
Since only a single HTTP password per account is allowed at the moment, no seamless
rotation of the password is possible at the moment, since clients won't be able
to authenticate anymore as soon as a new HTTP password has been generated. This
keeps a lot of users from rotating passwords regularly.
## <a id="related-feature-requests"> Related Feature Requests
* https://issues.gerritcodereview.com/issues/40015451
* https://issues.gerritcodereview.com/issues/40014088