[AIX][MQ 9.4.0 2024 年 6 月][Linux]

qm.ini 文件的 AuthToken 节

使用 AuthToken 节来配置队列管理器,以验证由连接应用程序提供的认证令牌。 如果您的认证服务支持 JWKS 端点进行密钥配置,那么这通常是首选选项。

AuthToken 节

KeyStore=string
包含可信签发者的公用密钥证书和对称密钥的密钥库的文件路径。 您可以将密钥添加到现有密钥库或创建新的密钥库。 有关更多信息,请参阅 配置队列管理器以接受认证令牌。 队列管理器使用密钥库中的密钥来验证应用程序提供的认证令牌是否由可信签发者签名。
您可以使用具有文件扩展名 .kdb 的 CMS 密钥库或具有文件扩展名 .p12的 PKCS#12 密钥库。 如果密钥库文件不存在或无法访问,那么AMQ7076E: Invalid value for attribute in ini file错误输出到队列管理器的错误日志。
确保密钥库类型与密钥库的文件扩展名匹配。 IBM® MQ 检测密钥库的正确格式,不一致可能会导致其他管理问题,但是,如果密钥库类型和文件扩展名不匹配。
密钥库文件路径的最大长度为 256 个字符。
KeyStorePwdFile=string
包含密钥库的加密密码的文件的文件路径。 该文件必须包含作为单行文本的加密密码。 不接受纯文本密码。
在将密码保存到密钥库密码文件中之前,请使用 runqmcred 命令对密码进行加密。 密钥库密码文件必须仅包含通过运行 runqmcred 命令创建的加密密码。
明文密码在加密之前的最大长度为 1024 个字符。
此参数是可选的。 如果未提供,那么队列管理器将在同一目录中查找密码与密钥库同名但文件扩展名为 .sth的隐藏文件。 如果找不到隐藏文件,那么将拒绝配置,并将错误消息 AMQ7006E 输出到队列管理器的错误日志中。 有关用于存储密钥库密码的选项的更多信息,请参阅 加密密钥存储库密码
密码文件路径的最大长度为 256 个字符。
CertLabel=string
密钥库中用于验证认证令牌的公用密钥证书或对称密钥的证书标签。 通过重复 CertLabel 属性,最多可以提供 32 个证书标签。
将证书添加到队列管理器密钥库时,请为其提供有意义的标签。 证书标签区分大小写。 它们可以包含字母数字字符,标点符号字符和空格。 如果检测到无效字符,那么将返回错误并将错误消息写入 IBM MQ 错误日志。
可信令牌发布者可能提供多个公用密钥证书和对称密钥。 例如,公用密钥证书具有有效期。 当它们接近到期时,令牌签发者将提供具有新到期日期的新证书。 在一段时间内,这两个证书都可能有效。
当应用程序提供用于认证的令牌时,将检查 CertLabels 列表,直到找到用于对令牌进行签名的有效密钥为止。 如果找到匹配项,那么将验证令牌签名。
如果未指定 CertLabel ,那么来自提供令牌的应用程序的连接将失败,原因码为 2063 MQRC_SECURITY_ERROR,消息为AMQ5786E: Authentication token configuration error写入队列管理器的错误日志。
证书标签的最大长度为 64 个字符。
例如,
AuthToken:
   KeyStore=/var/mqm/qmgrs/qmgrs/qm1/tokenissuer/key.kdb
   KeyStorePwdFile=/var/mqm/qmgrs/qm1/tokenissuer/key.pw
   CertLabel=token
   CertLabel=rsakey
   CertLabel=mark
   ... up to 32 CertLabel fields
UserClaim=string
在包含队列管理器用于授权检查的用户标识的令牌中声明。

如果使用 ADOPTCTX(NO)配置了队列管理器,那么此参数是可选的。 如果使用 ADOPTCTX(YES) ,那么此参数是必需的。 ADOPTCTX 是队列管理器的 CONNAUTH 属性所引用的认证信息 (AUTHINFO) 对象中的属性。

要采用身份,令牌必须包含具有 AuthToken 节的 UserClaim 属性中指定的名称的声明,并且必须使用 ADOPTCTX(YES)

例如,如果令牌包含声明 "AppUser": "MyUserName",那么必须在 qm.ini 文件的 AuthToken 节中指定 UserClaim=AppUser 以采用身份 "MyUserName" 进行授权。

UserClaim 属性值的最大长度为 128 个字符。

注:IBM MQ 9.4.0开始,如果指定了 AuthToken 节,那么服务节的 SecurityPolicy 属性的有效值将设置为 UserExternal。 如果 SecurityPolicy 在服务节中显式设置为 Group ,那么令牌认证不可用。 如果 SecurityPolicy 设置为 Group,请从服务节中除去 SecurityPolicy 属性,然后重新启动队列管理器。 有关更多信息,请参阅 SecurityPolicy
注: 使用认证信息对象的 ADOPTCTX 属性来控制是否采用令牌中的用户标识进行授权检查。 创建队列管理器时,此属性设置为 ADOPTCTX(YES)。 此值将导致采用令牌中的用户标识。 用户标识必须满足认证令牌中用户标识的要求。 有关更多信息,请参阅 认证令牌中的用户标识。 如果令牌用户声明包含不满足需求的用户标识,那么将拒绝连接,原因码为 2035 MQRC_NOT_AUTHORIZED。 如果设置了 ADOPTCTX(NO) ,那么令牌仅用于认证,而另一个用户必须用于授权。
AllowOSGroups=NO(默认)|YES
缺省值为 no。 确定是否将令牌中采用的身份视为操作系统 (OS) 用户,以及在授权期间是否接受匹配操作系统用户的组成员资格。
AllowOSGroups=NO|N
授权检查仅基于从令牌采用的用户的名称。
AllowOSGroups=YES|Y
授权检查基于用户的名称,并且还会检查他们可能属于的组。
注: 即使通过 JWKS 节管理所有其他令牌验证配置, AuthToken 节的 allowOSGroups 属性仍在令牌认证期间生效。

示例节-仅认证

此节仅包含 AllowOSGroups 属性是有效的。 但是,如果包含本地密钥库配置,那么必须至少包含以下内容:
  • KeyStore 文件路径,以及
  • CertLabel 名称。
AuthToken:
   KeyStore=/var/mqm/qmgrs/qmgrs/qm1/tokenissuer/key.kdb
   CertLabel=token
   ... up to 32 CertLabel fields
如果仅包含两个最小参数,那么:
  • 隐藏文件 key.sth 必须与加密的密钥库密码一起存在,因此密钥库密码文件不是必需的。
  • 令牌不包含要传递到 IBM MQ 以进行授权的用户名。 应用程序可以连接并进行认证,但必须有不同的机制来提供授权,以便应用程序在连接后执行工作。
根据队列管理器的配置,用于授权的用户名可能是通过 MCA 规则在通道上定义的用户名,也可能是客户机应用程序运行时在服务器上可能存在并且属于具有权限的组的用户名。 请记住,当您使用令牌时:
  • 您的队列管理器将置于 UserExternal 方式,这意味着运行队列管理器的操作系统上不存在的用户可以用于认证。
  • 即使未在 AuthToken qm.ini 节中包含 AllowOSGroups 选项,缺省值也设置为 No。 因此,如果包含 UserClaim 但未指定 AllowOSGroups=Yes,那么不会在运行队列管理器的操作系统上针对其可能属于的组检查用于授权的令牌用户。

示例节-认证和授权

您可以定义所有 AuthToken 参数:
  • KeyStore 文件路径,
  • KeyStorePwdFile 文件路径,
  • CertLabel 名称,
  • UserClaim 名称和
  • AllowOSGroups 选项。
AuthToken:
   KeyStore=/var/mqm/qmgrs/qmgrs/QMJWT/ssl/key.kdb
   KeyStorePwdFile=/var/mqm/qmgrs/QMJWT/ssl/key.pw
   CertLabel=token
   CertLabel=rsakey
   CertLabel=mark
   ... up to 32 CertLabel fields
   UserClaim=AppUser
   AllowOSGroups=Y
如果包含所有可用参数,那么:
  • 使用 runqmcred 命令对密钥库的密码进行加密。 将其保存在文件中,然后在 AuthToken 节中包含文件路径。
  • 认证令牌用户声明中的用户名用于认证和授权。
    • 令牌用户可能作为运行队列管理器的操作系统上的用户存在。
    • 您定义了用于启用用户检查的认证信息对象。
    • 根据通道认证或 MCA 规则,设置通道认证记录以采用有权与 IBM MQ 对象进行交互的用户。
用于认证和授权令牌用户的策略取决于您的需求以及已配置 IBM MQ 队列管理器的方式。 有关更多信息,请参阅 使用认证令牌