158 lines
5.3 KiB
Text
158 lines
5.3 KiB
Text
#
|
|
# This module decrypts and validates Yubikey static and dynamic
|
|
# OTP tokens.
|
|
#
|
|
yubikey {
|
|
#
|
|
# The length (number of ASCII bytes) of the Public-ID portion
|
|
# of the OTP string.
|
|
#
|
|
# Yubikey defaults to a 6 byte ID (2 * 6 = 12)
|
|
# id_length = 12
|
|
|
|
#
|
|
# If true, the authorize method of rlm_yubikey will attempt to split the
|
|
# value of User-Password, into the user's password, and the OTP token.
|
|
#
|
|
# If enabled and successful, the value of &request:User-Password will be
|
|
# truncated and &request:Yubikey-OTP will be added.
|
|
#
|
|
# split = yes
|
|
|
|
#
|
|
# Decrypt mode - Tokens will be decrypted and processed locally
|
|
#
|
|
# The module itself does not provide persistent storage as this
|
|
# would be duplicative of functionality already in the server.
|
|
#
|
|
# Yubikey authentication needs two attributes retrieved from
|
|
# persistent storage:
|
|
# * &control:Yubikey-Key - The AES key used to decrypt the OTP data.
|
|
# The Yubikey-Public-Id and/or User-Name
|
|
# attributes may be used to retrieve the key.
|
|
# * &control:Yubikey-Counter - This is compared with the counter in the OTP
|
|
# data and used to prevent replay attacks.
|
|
# This attribute will also be available in
|
|
# the request list after successful
|
|
# decryption.
|
|
#
|
|
# Yubikey-Counter isn't strictly required, but the server will
|
|
# generate warnings if it's not present when yubikey.authenticate
|
|
# is called.
|
|
#
|
|
# These attributes are available after authorization:
|
|
# * &request:Yubikey-Public-ID - The public portion of the OTP string.
|
|
# and additionally if 'split' is set:
|
|
# * &request:Yubikey-OTP - The OTP portion of User-Password.
|
|
#
|
|
# These attributes are available after authentication (if successful):
|
|
# * &request:Yubikey-Private-ID - The encrypted ID included in OTP data,
|
|
# must be verified if tokens share keys.
|
|
# * &request:Yubikey-Counter - The last counter value (should be recorded).
|
|
# * &request:Yubikey-Timestamp - Token's internal clock (mainly useful for
|
|
# debugging).
|
|
# * &request:Yubikey-Random - Randomly generated value from the token.
|
|
#
|
|
decrypt = no
|
|
|
|
#
|
|
# Validation mode - Tokens will be validated against a Yubicloud server
|
|
#
|
|
validate = no
|
|
|
|
#
|
|
# Settings for validation mode.
|
|
#
|
|
validation {
|
|
#
|
|
# URL of validation server, multiple URL config items may be used
|
|
# to list multiple servers.
|
|
#
|
|
# - %d is a placeholder for public ID of the token
|
|
# - %s is a placeholder for the token string itself
|
|
#
|
|
# If no URLs are listed, will default to the default URLs in the
|
|
# ykclient library, which point to the yubico validation servers.
|
|
servers {
|
|
# uri = 'https://api.yubico.com/wsapi/2.0/verify?id=%d&otp=%s'
|
|
# uri = 'https://api2.yubico.com/wsapi/2.0/verify?id=%d&otp=%s'
|
|
}
|
|
|
|
#
|
|
# API Client ID
|
|
#
|
|
# Must be set to your client id for the validation server.
|
|
#
|
|
# client_id = 00000
|
|
|
|
#
|
|
# API Secret key (Base64 encoded)
|
|
#
|
|
# Must be set to your API key for the validation server.
|
|
#
|
|
# api_key = '000000000000000000000000'
|
|
|
|
#
|
|
# Connection pool parameters
|
|
#
|
|
pool {
|
|
# Connections to create during module instantiation.
|
|
# If the server cannot create specified number of
|
|
# connections during instantiation it will exit.
|
|
# Set to 0 to allow the server to start without the
|
|
# yubikey server being available.
|
|
start = ${thread[pool].start_servers}
|
|
|
|
# Minimum number of connections to keep open
|
|
min = ${thread[pool].min_spare_servers}
|
|
|
|
# Maximum number of connections
|
|
#
|
|
# If these connections are all in use and a new one
|
|
# is requested, the request will NOT get a connection.
|
|
#
|
|
# Setting 'max' to LESS than the number of threads means
|
|
# that some threads may starve, and you will see errors
|
|
# like 'No connections available and at max connection limit'
|
|
#
|
|
# Setting 'max' to MORE than the number of threads means
|
|
# that there are more connections than necessary.
|
|
max = ${thread[pool].max_servers}
|
|
|
|
# Number of uses before the connection is closed
|
|
#
|
|
# NOTE: A setting of 0 means infinite (no limit).
|
|
uses = 0
|
|
|
|
# The number of seconds to wait after the server tries
|
|
# to open a connection, and fails. During this time,
|
|
# no new connections will be opened.
|
|
retry_delay = 30
|
|
|
|
# The lifetime (in seconds) of the connection
|
|
#
|
|
# NOTE: A setting of 0 means infinite (no limit).
|
|
lifetime = 0
|
|
|
|
# The idle timeout (in seconds). A connection which is
|
|
# unused for this length of time will be closed.
|
|
#
|
|
# NOTE: A setting of 0 means infinite (no timeout).
|
|
idle_timeout = 60
|
|
|
|
# Cycle over all connections in a pool instead of concentrating
|
|
# connection use on a few connections.
|
|
spread = yes
|
|
|
|
# NOTE: All configuration settings are enforced. If a
|
|
# connection is closed because of "idle_timeout",
|
|
# "uses", or "lifetime", then the total number of
|
|
# connections MAY fall below "min". When that
|
|
# happens, it will open a new connection. It will
|
|
# also log a WARNING message.
|
|
#
|
|
# The solution is to either lower the "min" connections,
|
|
# or increase lifetime/idle_timeout.
|
|
}
|
|
}
|
|
}
|