SciTokens is a capability-based authorisation system whereby tokens are issued that grant access to perform specific actions on specific services (for example to query for segment information from the Segment Database).
What is a SciToken?¶
A SciToken is a special implementation of a JSON Web Token designed for distributed scientific computing. For full details on the SciTokens project and the implementation of the tokens, see
Key SciTokens concepts¶
Key to the IGWN usage of SciTokens are the following concepts:
The Audience of a token (encoded in the
aud claim) is the service that a token is authorised to acccess.
This should typically be the fully-qualified URI of the target service, e.g.
The Audience can also have the special value
ANY, which should allow it to be used with any service. Usage of
ANY tokens is discouraged for security reasons.
The Scope of a token (the
scope claim) is a space-separated list of capabilities that the token should authorise. For IGWN the valid scopes are service-specific:
Proprietary IGWN data¶
To access proprietary IGWN GWF data (from the
igwn.osgstorage.org CVMFS repository), users should use tokens that claim the following scope:
DQSegDB token implementation is not yet complete
Currently DQSegDB does not accept SciTokens for authorisation, see X.509 for details on using X.509 for authorised DQSegDB queries.
You can track the progress of this implementation at
GraceDB understands the following token scopes:
| ||Authorise the bearer for GraceDB access|
gracedb.read scope is used as a proxy for an identification token - GraceDB uses its own internal authorisation system to assign capabilities to the subject (owner) of the token.
GWDataFind accepts the following tokens:
| ||Retrieve information from a GWDataFind server|
Installing the SciTokens tools¶
There are a few different tools to install based on usage:
htgettoken- for generating SciTokens
igwn-auth-utils- for discovering/using SciTokens with HTTP requests
htgettoken is a tool for generating SciTokens via the IGWN Vault server.
htgettoken tool can be installed using your preferred package manager on a number of systems:
conda install --channel conda-forge htgettoken
htgettoken is available for Debian in the IGWN Debian repositories:
apt-get install htgettoken
htgettoken is available for RHEL in the Open Science Grid yum repositories:
yum install htgettoken
igwn-auth-utils is a Python library for discovering SciTokens and using them with HTTP requests.
Most IGWN service APIs use
The client API libraries for most IGWN services (including GraceDB and GWDataFind) automatically install and use
igwn-auth-utils for handling SciTokens, so you probably don't need to install it manually.
igwn-auth-utils can be installed using your preferred package manager on a number of systems:
conda install --channel conda-forge igwn-auth-utils
python3-igwn-auth-utils is available for Debian in the IGWN Debian repositories:
apt-get install python3-igwn-auth-utils
python -m pip install igwn-auth-utils
python3-igwn-auth-utils is available for RHEL and derivatives in the IGWN RHEL repositories for Scientific Linux 7 and Rocky Linux 8:
yum install python3-igwn-auth-utils
How to generate a SciToken¶
LIGO.ORG and KAGRA identity holders can generate tokens using
htgettoken -a vault.ligo.org -i igwn
By default this command will generate a token with the following claims
| || |
| || |
Widely-scoped tokens are insecure
The default token is widely scoped, valid with any service with multiple capabilities. This presents a security risk, allowing an intruder to retrieve multiple forms of protected data while in posession of a token.
Generating a secure token¶
To generate a secure token, you should specify the
--scopes as narrowly as possible to generate a token that with a single capability accepted by a single service.
For example, to generate a token that allows the bearer to read data from
htgettoken -a vault.ligo.org --audience https://datafind.ligo.org --scopes gwdatafind.read