Files
NLnetLabs-krill/defaults/krill-multi-user.conf
T

786 lines
37 KiB
Plaintext

# Specify how to set up the HTTPS certificate for Krill
# existing: Expects an existing certificate and key in $data_dir/ssl
# generate: Will generate a new key-pair and self-signed cert if
# they cannot be found in $data_dir/ssl
#
# Note: we strongly recommend that you use a proxy like nginx, apache, or
# <your-choice-here> for HTTPS on a public network.
#
### https_mode = "generate"
# Specify the ip address and port number that the server will use.
#
# Note: we recommend that you use the defaults and use a proxy if you
# must make your Krill instance accessible remotely.
#
### ip = "localhost"
### port = 3000
# Specify the directory where the publication server will store its data.
# Note that clustering through a shared data directory is not supported.
# But, we plan to look into a proper clustering solution later.
#
### data_dir = "./data"
# Archive publication events after X days. If you do NOT set this
# value then Krill will not do any archiving.
#
# If enabled this option will make sure that the republish events,
# where your CA simply generates a new Manifest and CRL are archived
# after the given number of days.
#
# If you run Krill as a Publication Server then this option will
# enable the archiving of publication deltas received by your server
# from CAs.
#
# Archived commands (containing e.g. details of when the change happened),
# and following events will be moved to an "archived" subdirectory under
# your data directory as follows:
# $data_dir/pubd/0/archived <-- for Publication Server
# $data_dir/cas/ca/archived <-- for a CA named 'ca'
#
# If you want to save space you can delete the files from these archived
# directories, e.g. from cron. However, you could also archive them in
# a different way: e.g. compress and move to long term storage. Krill will
# no longer need this data, but if you ever wanted to see these details in
# history you would need to move them back into the parent directory of
# the 'archived' directory.
#
# To enable this set the following key value pair.
#
### archive_threshold_days = 7
# Specify the path to the PID file for Krill.
#
# Defaults to "krill.pid" under the 'data_dir' specified above.
#
### pid_file = "./data/krill.pid"
# Specify the base public service URI hostname and port.
#
# The default service URI is set to https://localhost:3000/ regardless of the
# IP and port configured above (but matching their default). This is fine for
# simple setups where you use Krill to run your own CA only and you use the
# CLI from localhost.
#
# However, if you need to access Krill remotely, or if you are serving as a
# parent CA, or Publication Server, to others, then make sure that you use a
# public URI here *and* make sure that you use a proxy server with a proper
# HTTPS certificate in front of Krill.
#
# At present this MUST be an https URI with a hostname and optional port number only.
# It is not allowed to use a Krill specific path prefix. If you have a strong
# motivation for this, then please commont on the following github issue:
# https://github.com/NLnetLabs/krill/issues/263
#
# Krill UI, API and service URIs will be derived as follows:
# <service_uri>api/v1/... (api)
# <service_uri>rfc8181 (for remote publishers)
# <service_uri>rfc6492 (for remote children)
# <service_uri>rrdp/.. (override with rddp_service_uri, see below)
# <service_uri>... (various UI resources)
### service_uri = "https://localhost:3000/"
# Specify whether an embedded repository should be started. For many users
# it will be better to use a repository server provided by a third party, e.g.
# the RIR or NIR under which resources are received.
#
# Note that an existing embedded repository server will be removed if this
# setting is set to 'false' (default) AND there are no current publishers (i.e.
# all CAs use an external repository).
#
# For more information on running Krill as Publication Server see:
# https://rpki.readthedocs.io/en/latest/krill/publication-server.html
#
### repo_enabled = false
# Specify the base rsync repository for this server. Publishers will get
# a base URI that is based on the 'publisher_handle' in the XML file.
#
# Note, you need to set this parameter if (and only if) you chose to enable
# the repository function above (repo_enabled). If you did, you should set up
# an rsync daemon to expose $data_dir/rsync to serve this data. The uri defined
# here should match the module name in your rsync configuration.
#
# Furthermore.. note that the default 'localhost' is only allowed to be used
# when the KRILL_TEST ENV variable has been set.
#
### rsync_base = "rsync://localhost/repo/"
# Note, you may need to set this parameter if you chose to enable the repository
# function above (repo_enabled). By default Krill will use a public RRDP URI
# which is based on the service_uri. Use this directive use a different public
# URI to access the RRDP files.
#
### rrdp_service_uri = "$service_uri/rrdp/"
# Log level
#
# The maximum log level ("off", "error", "warn", "info", or "debug") for
# which to log messages.
#
# Defaults to "warn"
#
### log_level = "warn"
# Log type
#
# Where to log to. One of "stderr" for stderr, "syslog" for syslog, or "file"
# for a file. If "file" is given, the "log_file" field needs to be given, too.
#
### log_type = "file"
# Syslog facility
#
# The syslog facility to log to if syslog logging is used. Defaults to "daemon".
#
### syslog_facility = "daemon"
# Log file
#
# The path to the file to log to if file logging is used. If the path is
# relative, it is relative to the current working directory from which
# the binary is executed.
#
### log_file = "./krill.log"
# Master Authorization Bearer Token
#
# Define a master token that can be used to interact with the API. Token use
# is modelled after OAuth 2.0 Bearer Tokens (RFC 6750), which are expected be
# included as an HTTP header in requests by clients.
#
# If you do not specify a value here, the server will insist that you provide
# a token as an environment variable with the key "KRILL_AUTH_TOKEN".
#
# Note: see also the separate section below for configuring integration with an
# identity provider.
#
### auth_token =
# CA certificate refresh rate
#
# This defines the rate, in seconds, for Krill CAs to to contact their parent
# CA and query for updates in resource entitlements.
#
# Defaults to 10 minutes
#
### ca_refresh = 600
# Restrict size of messages sent to the API
#
# Default 256 kB
#
### post_limit_api = 262144
# Restrict size of messages sent to the RFC 8181 publication protocol
#
# Default 32MB (enough for a keyroll with about 8000 issued certificates)
#
### post_limit_rfc8181 = 33554432
# Specify a log directory for logging RFC 8181 (publication protocol)
# exchanges. If this directive is set Krill will log all meaningful
# RFC 8181 exchanges in this directory, meaning exchanges that resulted
# in a change or an error.
#
# If this directive is not specified, Krill will NOT log these exchanges.
# Do not set an empty value for the directive in this case, just leave
# it out.
#
# Defaults to NO logging!
#
### rfc8181_log_dir = </some/path>
# Restrict size of messages sent to the RFC 6492 up-down protocol
#
# Default 1MB (enough for a keyroll with certs of ~400kb, the biggest known cert is 220kB)
#
### post_limit_rfc6492 = 1048576
# Specify a log directory for logging RFC 6492 (up-down protocol)
# exchanges. If this directive is set Krill will log all meaningful
# RFC 6492 exchanges in this directory, meaning exchanges that resulted
# in a change or an error.
#
# If this directive is not specified, Krill will NOT log these exchanges.
# Do not set an empty value for the directive in this case, just leave
# it out.
#
# Defaults to NO logging!
#
### rfc6492_log_dir = </some/path>
# Enable loading BGP Dumps from RIS for ROA vs BGP analysis.
#
# bgp_risdumps_enabled = true
# bgp_risdump_v4_uri = http://www.ris.ripe.net/dumps/riswhoisdump.IPv4.gz
# bgp_risdump_v6_uri = http://www.ris.ripe.net/dumps/riswhoisdump.IPv6.gz
######################################################################################
# #
# --------======== DANGER ZONE ========-------- #
# #
# Do not change the options below, unless you are really certain that you need to #
# override Krill's default behaviour. #
# #
######################################################################################
# Set the following to true to force Krill to always perform full rechecks
# of its data directories at startup. This is disabled by default because
# if can slow down startup significantly.
#
# By default Krill will do some basic checks at startup already, and if any
# errors are encountered force a full recovery automatically: Krill will try
# to load all its state in its internal memory cache at startup. If there are
# no errors in reloading the latest 'info' about the state, any surplus data
# will be assumed to be the result from an incompletely finished transaction - or -
# a data directory backup which was taken during a transaction. In either case
# additional data is discarded and the last (committed) state is recreated.
#
# Note that this 'recovery' will make Krill fall back to the last possible
# consistent state that it can. But, there may be important changes missing.
# For example any changes in ROAs made after the last recoverable state will
# be missing. You will have to verify the state yourself.
#
# In short: use this option only if you suspect that there is an issue with
# your backed up data. And if you do, you may want to set the ENV variable
# "KRILL_UPGRADE_ONLY" as well, in order to force that Krill exits after doing
# all its data checks and clean ups, and you have a chance to check the logs
# before proceeding.
#
### always_recover_data = false
#
# ROA Aggregation
#
# It is recommended that separate ROAs are used for each authorized prefix, even
# though the RFC allows for multiple prefixes for the same ASN to be combined on
# a single ROA object. The reason for this is that the ROA will become invalid
# if any of the listed prefixes no longer appears on your CA's certificate. Note
# that Krill will automatically clean up over-claiming ROAs when it finds that its
# resources have been shrunk, but there is a possible time window where ROAs can
# be invalid before Krill discovers the shrinkage.
#
# That said, if there would be too many ROAs then this will impact all RPKI
# validators, therefore Krill will by default start aggregating ROAs per ASN
# when more than 100 ROAs would be issued. Conversely, Krill will start de-
# aggregating again when the number of authorizations drops below 90.
#
# This behaviour can be overridden with the following directives:
# roa_aggregate_threshold = 100
# roa_deaggregate_threshold = 90
#
# Republication Intervals
#
# The RPKI uses Manifests (RFC 6486) to communicate the list of current RPKI
# objects (such as ROAs) to RPKI Validators. Manifests are used to protect against
# attacks, or incidents, where Validators only see a partial view of the RPKI
# repository. For this to work properly Validators will need to know how 'fresh'
# the Manifests are - otherwise they would be vulnerable to replay attacks where
# they are presented old versions of Manifests thus withholding them from discovering
# new RPKI objects.
#
# Manifests have two important dates included in them:
# 1- the 'next update time'
# 2- an expiration time
#
# When the next update time is passed manifests will become 'stale'. This means
# the Validators may either warn about the objects listed in these manifests, or
# they may even reject these objects altogether. There is current discussion about
# aligning this behaviour in the IETF - but for the moment the outcome will vary
# between Validator implementations.
#
# When the expiration time (not after time on the embedded EE certificate of the
# Manifest) passes, then the Manifest will be considered invalid by all Validator
# implementations.
#
# So, if Validators are subject to replay attacks of Manifests they will be
# unaware until these times have passed. After these times the Manifest and all
# listed RPKI objects will become invalid. When ROA objects become invalid, this
# typically means that the Route Announcement will be considered "Not Found", rather
# than invalid. So, typically they would not be dropped, but they are no longer
# protected by RPKI.
#
# One could therefore argue that short times should be used. However, if the times
# chosen are too short, then this will leave your CA vulnerable to possible
# operational issues with its RPKI repository - or outages of your CA itself.
#
# So, in short, the chosen values are a balance between the wish to limit the
# vulnerability to replay attacks vs the time an operator has to solve operational
# issues.
#
# Krill uses the following defaults:
#
# The "next update" time is 24 hours:
# timing_publish_next_hours = 24
#
# The "not after time" on the EE certificate is 7 days from issuance:
# timing_publish_valid_days = 7
#
# Krill will automatically re-publish new Manifests if they would become stale
# in 8 hours. Because re-publication happens hourly, this leaves the operator
# with a minimum of 7 hours to fix issues if re-publication should fail.
# timing_publish_hours_before_next = 8
#
# ROA and Delegate Certificate Times
#
# Krill will issue ROAs, and child CA certificates if you have delegated resources
# to child CAs, with a "not after" time of 52 weeks from issuance, and it will
# re-issue those ROAs and certificates 4 weeks before they would expire.
#
# Because of the automatic renewal there should be no real need to use longer
# validity times. In fact using longer times could have a negative impact on
# Validator performance because the Certificate Revocation Lists would become
# bigger.
#
# So, we do NOT recommend overriding the following values, except perhaps for
# testing purposes:
# timing_child_certificate_valid_weeks = 52
# timing_child_certificate_reissue_weeks_before = 4
# timing_roa_valid_weeks = 52
# timing_roa_reissue_weeks_before = 4
######################################################################################
# #
# ----==== WEB UI MULTI-USER LOGIN CONFIGURATION ====---- #
# #
# The settings below can be used to permit multiple users with configurable #
# access rights to login to the Krill web interface. #
# #
######################################################################################
#
# Global auth(entication & authorization) settings
#
# These control which auth provider in Krill will be used to authenticate users
# and settings common to all auth providers. See below for more details.
#
# auth_type = "master-token"
# auth_policy = "..."
# auth_private_attributes = ["...", ...]
# Auth type (optional)
#
# Which provider to use for authentication (AuthN), authorization (AuthZ) and
# identity (ID). Also affects which login form the Krill web UI displays, or
# (in the case of auth_type = "openid-connect") the user is redirected to.
#
# Supported values: "master-token" (default), "config-file" or "openid-connect".
#
# At-a-glance comparison:
# =======================
# Setting Value AuthN AuthZ ID
# ----------------------------------------------------------------------------
# "master-token" auth_token role = "admin" id = "master-token"
# ----------------------------------------------------------------------------
# "openid-connect" provider provider provider
# checked supplied supplied
# ----------------------------------------------------------------------------
# "config-file" values are taken from the [auth_users] section in this
# config file
# ----------------------------------------------------------------------------
#
# NOTE: At present the master-token provider is used as a fallback provider
# when using "openid-connect" or "config-file" as the primary provider. This is
# to ensure that krillc, which uses master-token authentication, is still able
# to communicate with the krill daemon.
#
### auth_type = "master-token"
# Auth policy (optional)
#
# The path to an external authorization policy file (or directory containing
# policy files) to use in addition to the ones built-in to Krill. The files must
# be in Oso Polar format [*1] and are loaded after the built-in Krill policies.
#
# Custom authorization policies are intended to handle requirements that are too
# complex for just the settings available in krill.conf and is an advanced
# topic beyond the scope of this documentation.
#
# The built-in policies treat the following user attributes specially:
#
# - "role" - One of "admin", "readwrite" or "readonly". See the full Krill
# documentation for more information about which permissions are
# associated with each role.
# - "inc_cas" - A comma-separated set of CA handles which should be included
# in the set the user is permitted to see. If present this
# attribute will prevent the user seeing or interacting with any
# CA handle that is not in this set.
# - "exc_cas" - A comma-separated set of CA handles which should be excluded
# from the set the user is permitted to see. Overrides inc_cas.
# If inc_cas is not set, any CA handle NOT in exc_cas will be
# visible to the user who may interact with it according to
# the permissions granted to the user (e.g. through a role
# assignment).
#
# Note: The inc_cas and exc_cas settings only restrict visibility of and
# interaction with specified CAs via the Krill web UI. CA handles are still
# visible in the repository content and metrics output by Krill.
#
# References:
# *1 - https://docs.osohq.com/getting-started/policies/index.html
#
### auth_policy = "..."
# Auth private attributes (optional)
#
# Zero or more user attributes that should not be revealed by (or even sent to)
# the Krill web UI. For example, you may wish to hide "exc_cas" so that a user
# doesn't know which CAs they are prevented from seeing!
#
### auth_private_attributes = ["...", ...]
# Config File auth provider details (mandatory when auth_type = "config-file")
#
# The Config File auth provider allows you to define one or more users which can
# then be used to login to the Krill web UI.
#
# Example:
# auth_type = "config-file"
#
# [auth_users]
# "joe@example.com" = { attributes={ role="admin", exc_cas="ca1" }, password_hash="..." }
#
# Syntax:
# auth_users = { "some id" = { ... } [, "another id" = { ... }, ...] }
#
# Alternative syntax:
# [auth_users]
# "some id" = { ... }
# "another id" = { ... }
#
# Where { ... } can contain the following fields:
#
# Field Mandatory? Notes
# ----------------------------------------------------------------------------
# id Yes Email address or other identifier for the user.
# To be entered in the username form field in the
# web UI when logging in. Also shown in the Krill
# event history as the actor to which the action is
# attributed.
#
# password_hash Yes Generate this value using the `krillc config user`
# command on the command line. The web UI will hash
# the password entered in the login form and submit
# it to Krill for comparison to this hash, thereby
# ensuring that passwords are neither transmitted
# nor persisted.
#
# attributes No Zero or more key=value pairs, e.g. role="admin".
# The built-in authorization policy (see above)
# requires a role attribute with value "admin",
# "readonly" or "readwrite". Attribute key=value
# pairs may be displayed by the Krill web UI. To
# prevent attributes being sent to the UI, use the
# auth_private_attributes setting (see above).
#
### auth_type = "config-file"
###
### [auth_users]
### ...
# OpenID Connect auth provider details (mandatory when auth_type = "openid-connect")
#
# The OpenID Connect auth provider delegates authentication of users to an
# external provider that implements the OpenID Connect Core 1.0 specification.
# It can also optionally retrieve user attributes (known as "claims" [*1]) from
# the provider, or from an [auth_users] section in the Krill configuration file.
#
# Syntax:
# auth_openidconnect = { issuer_url="...", client_id="...", client_secret="..." }
#
# Alternative syntax:
# [auth_openidconnect]
# issuer_url = "..."
# client_id = "..."
# client_secret = "..."
# ...
#
# Where { ... } can contain the following fields:
#
# (Sub)Field Mandatory? Notes
# ----------------------------------------------------------------------------
# issuer_url Yes Provided by your OpenID Connect provider. This is
# the URL of the OpenID Connect provider discovery
# endpoint. "/.well-known/openid_configuration"
# will be appended if not present. Krill will fetch
# the OpenID Connect Discovery 1.0 compliant JSON
# response from this URL when Krill starts up. If
# this URL does not match the "issuer" value in the
# discovery endpoint response or if the discovery
# endpoint cannot be contacted, Krill will fail to
# start.
#
# client_id Yes Provided by your OpenID Connect provider.
#
# client_secret Yes Provided by your OpenID Connect provider.
#
# insecure No Defaults to false. Setting this to true will
# disable verification of the signature of the
# OpenID Connect provider token ID endpoint
# response. Setting this to false may allow attackers
# to modify responses from the provider without
# being detected. Setting this to false is strongly
# discouraged.
#
# extra_login_scopes No Provider specific. Defaults to "". A
# comma-separated list of OAuth 2.0 scopes to be
# passed to the provider when a user is directed to
# login with the provider. Scopes are typically
# used to instruct the provider to send additional
# user details along with provider token responses.
# One common scope is "profile" which often causes
# the server to respond with email addresses and
# other personal details about the user. If the
# OpenID Connect provider discovery endpoint shows
# that "email" is a supported scope then the "email"
# scope will be requested automatically, you don't
# need to specify it here in that case.
#
# extra_login_params No A { key=value, ... } map of additional HTTP query
# parameters to send with the authorization request
# to the provider when redirecting the user to the
# OpenID Connect provider login form. Section
# 3.1.2.1. Authentication Request in the OpenID
# Connect Core 1.0 specification [*2] lists various
# parameters that can be sent but the supported set
# varies by provider. The prompt=login parameter is
# automatically sent by the provider and thus does
# not need to be provided using this setting. Can
# also be specified as a separate TOML table, e.g.:
#
# [openid_connect.extra_login_params]
# display=popup
# ui_locales="fr-CA fr en"
#
# claims No A { <claim>={...}, ... } map used to extract and
# +-- source No optionally transform claim values from the OpenID
# +-- jmespath Yes Connect provider responses [*3, *4]. Each claim
# +-- dest No specification results in zero or one additional
# attribute name=value pairs that can be shown
# in the Krill web UI and can be tested by the
# authorization policy.. Can also be specified as
# a separate TOML table, e.g.:
#
# [openid_connect.claims]
# name = { source="...", jmespath="...", dest="..."}
# name2 = { ... }
#
# An "id" claim is required. If not specified the
# following default "id" claim configuration will
# be used:
#
# id = { jmespath="email" }
#
# To prevent attributes being sent to the UI, use
# the auth_private_attributes setting (see above).
#
# source If the 'source' subfield is not provided, all
# available token and userinfo claim responses from
# the OpenID Connect provider will be searched for
# a field that matches the 'jmespath' expression.
#
# If specified the value identifies a specific
# claim set to search and can be one of the
# following values:
#
# config-file
# id-token-standard-claim
# id-token-additional-claim
# user-info-standard-claim
# user-info-additional-claim
#
# The source = "config-file" value is special, it
# doesn't refer to an OpenID Connect provider
# response claim set but rather to user attributes
# looked up using the "id" claim value as a key to
# index into the [auth_users] user attribute map.
#
# The "id" claim value cannot therefore itself be
# taken from [auth_users], and password_hash values
# in [auth_users] are ignored as authentication is
# handled by the OpenID Connect provider.
#
# dest The optional "dest" field can be used to set the
# value of an attribute by a different name than
# the claims key used. This can be used to specify
# multiple claim rules that attempt to extract a
# a value for the same claim. The first matching
# rule in such cases will be used.
#
# jmespath The "jmespath" field specifies a JMESPath [*5]
# expression which is used to find a matching field
# in the OpenID Connect provider JSON response. In
# addition to the standard JMESPath functions the
# Krill implementation includes two custom regular
# expression based functions to match and
# optionally replace parts of the value of the
# fieldm matched by the JMESPath expression. These
# two functions are:
#
# recap(<field name/value>, 'capturing regex')
# resub(<field name/value>, 'search regex', replace'))
#
# With these extra functions cases where part of a
# complex string should be matched, extacted and
# (with resub) mapped to a value that matches what
# the authorization policy expects. E.g. it could
# be used to match a substring and then to "output"
# a particular Krill role name.
#
# If the combination of "resub()" and "dest" is
# not powerful enough you can take value matching
# even further using policy file rules. "dest" and
# "resub" may be combined with policy file rules in
# order to simplify the policy file rules needed.
#
# When determining the right "jmespath" expression
# to use, match failures will be logged at "info"
# level (as the auth policy in use may not require
# all configured claims to be found for all users)
# including a list of claims that are available to
# match. Additionally at "debug" level details
# about the claim search process are logged and at
# "trace" level the OpenID HTTP Connect provider
# HTTP/JSON responses are logged.
#
# References:
# *1: https://openid.net/specs/openid-connect-core-1_0.html#Claims
# *2: https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest
# *3: https://openid.net/specs/openid-connect-core-1_0.html#TokenResponse
# *4: https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse
# *5: https://jmespath.org/
#
# ------------------------------------------------------------------------------
# Registering Krill with an OpenID Connect provider:
# ------------------------------------------------------------------------------
# In order to communicate with an OpenID Connect provider, Krill must first be
# registered with that provider. As a result of registration you will be issued
# a client_id and a client_secret, and possibly also an issuer_url (or you may
# have to consult the provider documentation to determine the issuer_url).
#
# When registering you will usually need to specify a callback URL. For Krill
# this should be <service_uri>auth/callback (replace <service_uri> with the
# actual value set above).
#
# When auth_type = "openid-connect" the client details MUST be provided to Krill
# via settings in the [auth_openidconnect] section of the configuration file.
#
# ------------------------------------------------------------------------------
# Required OpenID Connect provider capabilities:
# ------------------------------------------------------------------------------
#
# The OpenID Connect provider must implement the following specifications:
#
# https://openid.net/specs/openid-connect-core-1_0.html
# https://openid.net/specs/openid-connect-discovery-1_0.html
# https://openid.net/specs/openid-connect-rpinitiated-1_0.html
#
# At the issuer_url endpoint the provider MUST announce support for at least the
# following:
#
# "issuer": ".."
# "authorization_endpoint": "..",
# "token_endpoint": "..", ("userinfo_endpoint" is also supported if available)
# "jkws_uri": "..",
# "scopes_supported": ["openid"]
# "response_types_supported": ["code"]
# "response_modes_supported": ["query"]
# "grant_types_supported": ["authorization_code"]
# "id_token_signing_alg_values_supported": ["RS256"]
# one of: "end_session_endpoint": ".." or "revocation_endpoint": ".."
#
# ------------------------------------------------------------------------------
# A note about HTTPS certificates:
# ------------------------------------------------------------------------------
# If the provider URLS are HTTPS URLs (which they should be unless this
# deployment of Krill is only for testing) then the HTTPS certificate must have
# been issued by a CA in the O/S CA certificate store, i.e. either a well known
# authority that is included in the store by default, or a custom CA that you
# have added to the store yourself. Krill will fail to connect to a provider
# that uses a self-signed certificate or a certificate from an unknown root
# certificate authority. For more information see for example:
# http://manpages.ubuntu.com/manpages/xenial/man8/update-ca-certificates.8.html
# ------------------------------------------------------------------------------
#
# ------------------------------------------------------------------------------
# A note about end_session_endpoint and revocation_endpoint:
# ------------------------------------------------------------------------------
# "end_session_endpoint" is defined by various OpenID Connect draft
# specifications relating to logout. In Krill it is used for the purpose defined
# in the OpenID Connect RP-Initiated Logout 1.0 spec, namely for Krill as the
# RP (OpenID Connect terms Krill a Relying Party in this context, which is
# particularly confusing given that the term Relying Party also has meaning in
# Krill's native RPKI domain) to be able to initiate logout of the user at the
# provider. Krill also requires that the endpoint either honours the
# "post_logout_redirect_uri" HTTP query parameter (defined as OPTIONAL in the
# spec) or that the provider can be configured with corresponding behaviour,
# i.e. to redirect the end-user user-agent (browser) back to Krill after logout
# is completed at the provider. If support for this is lacking it is undefined
# where the user will end up after logout, which is not an issue if the user
# was finished with Krill, but is annoying if the logout was done in order to
# re-login to Krill as a different user. At least one provider has been observed
# which does NOT support this endpoint.
#
# As an alternative Krill also supports "revocation_endpoint"
# (see https://tools.ietf.org/html/rfc7009 "OAuth 2.0 Token Revocation") which
# is used to terminate the users login session at the provider without leaving
# the Krill web UI.
#
# ------------------------------------------------------------------------------
# Example RedHat KeyCloak configuration:
# ------------------------------------------------------------------------------
# This example is for a local test deployment of RedHat KeyCloak:
#
# [auth_openidconnect]
# issuer_url = "http://localhost:8082/auth/realms/myrealm"
# client_id = "krill"
# client_secret = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
#
# That's it! For this to work you must already have configured your KeyCloak
# instance e.g. with a realm, client (with redirect URI set), users and an
# attribute mapper (to expose a custom user attribute as a "role" claim) and a
# "role" attribute for each user.
#
# ------------------------------------------------------------------------------
# Example Azure ActiveDirectory configuration:
# ------------------------------------------------------------------------------
# This example is for a Microsoft Azure cloud ActiveDirectory instance that
# permits only read-only and read-write access to users that login via the Krill
# web UI:
#
# [auth_openidconnect]
# issuer_url = "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0"
# client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# client_secret = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
#
# [auth_openidconnect.claims]
# ro_role = { jmespath="resub(roles[?@ == '30045e33-1f96-4304-80a2-aab4974b4b86'] | [0], '^.+$', 'readonly')", dest="role" }
# rw_role = { jmespath="resub(roles[?@ == 'c5740b90-06fd-4ec2-b48c-c4a7019acf1d'] | [0], '^.+$', 'readwrite')", dest="role" }
#
# For this to work you must already have configured in the Azure portal your AD
# tenant, app registration and enterprise application settings (with redirect
# URI), users, group assignments and optional claim configuration (in the above
# example AD was configured to expose groups as roles).
#
# The JMESPath expression matches on Azure AD group GUID values, taking the
# first match it finds and then setting the "role" attribute to either readonly
# or readwrite depending on which GUID was matched. The GUIDs for your groups
# will be different than those used in this example, see your Krill log for the
# GUIDs to match on.