如何在 C 客户端中使用 MQCSP 中的 userId 进行 IBM MQ 连接身份验证
How to use the userId in MQCSP for IBM MQ connection authentication in C client
我有一个C客户端连接到IBM MQ,我在MQCSP中填写用户名和密码如下:
MQCNO Connect_options = {MQCNO_DEFAULT};
MQCSP csp = {MQCSP_DEFAULT};
Connect_options.SecurityParmsPtr = &csp;
Connect_options.Version = MQCNO_VERSION_5;
csp.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD;
csp.CSPUserIdPtr = "user2";
csp.CSPUserIdLength = strlen("user2");
csp.CSPPasswordPtr = "password";
csp.CSPPasswordLength = strlen((char*)"password");
然后调用 MQCONNX() 连接 MQ 服务器,运行 客户端与用户 "user1",但服务器始终验证 运行 正在应用程序 "user1".
我将 MQ 服务器设置如下:
ALTER QMGR CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
DEFINE AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) +
AUTHTYPE(IDPWOS) +
FAILDLAY(10) +
CHCKLOCL(OPTIONAL) +
CHCKCLNT(REQUIRED) +
ADOPTCTX(YES)
REFRESH SECURITY TYPE(CONNAUTH)
define qlocal(HDPARLOCALQUEUE01) replace
define channel(HDPARCHANNEL) +
chltype(SVRCONN) +
trptype(TCP) +
MCAUSER(' ')
alter channel(HDPARCHANNEL) +
chltype(SVRCONN) +
MCAUSER(' ')
ALTER QMGR CHLAUTH(DISABLED)
如何让 MQ 服务器验证 MQCSP 中提供的用户?
我在qm.ini
中添加了"ChlauthEarlyAdopt=Y"
此致,
为了让 IBM MQ queue 管理器使用您在 MQCSP 结构中传递的 ID 进行授权,您需要 QMGR CONNAUTH
的 AUTHINFO
object 配置为 ADOPTCTX(YES)
。在您的示例中,您尝试这样做,但它会失败,因为 object SYSTEM.DEFAULT.AUTHINFO.IDPWOS
默认存在。
如果您想更新现有的 object,您不能使用 DEFINE
来更改它,除非您将其与 REPLACE
关键字一起使用,或者您可以使用 ALTER
命令来完成这个。
我还建议使用您想要的参数定义您自己的 AUTHINFO
object,这将防止将来的升级覆盖任何 non-default 设置。
例如:
DEFINE AUTHINFO(MY.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKLOCL(OPTIONAL) CHCKCLNT(REQUIRED) ADOPTCTX(YES) LIKE(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
ALTER QMGR CONNAUTH(MY.AUTHINFO.IDPWOS)
REFRESH SECURITY TYPE(CONNAUTH)
我也看到你禁用了 CHLAUTH
,通常默认的 CHLAUTH
规则不会造成任何问题,只会阻止两件事:
您无法连接到任何以 SYSTEM
开头的频道,您没有这样做。
您不能以 mqm
等 MQ 管理员用户或同等用户的身份进行连接。我看到你的示例显示 user2
,如果这是 mqm
组中的用户,那么你将被阻止。
@MoragHughson 写了一个不错的 IBM developerWorks MQdev 博客,标题为“Getting going without turning off MQ Security”,它解释了如何保持启用此安全性,这将是一个很好的起点。
我有一个C客户端连接到IBM MQ,我在MQCSP中填写用户名和密码如下:
MQCNO Connect_options = {MQCNO_DEFAULT};
MQCSP csp = {MQCSP_DEFAULT};
Connect_options.SecurityParmsPtr = &csp;
Connect_options.Version = MQCNO_VERSION_5;
csp.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD;
csp.CSPUserIdPtr = "user2";
csp.CSPUserIdLength = strlen("user2");
csp.CSPPasswordPtr = "password";
csp.CSPPasswordLength = strlen((char*)"password");
然后调用 MQCONNX() 连接 MQ 服务器,运行 客户端与用户 "user1",但服务器始终验证 运行 正在应用程序 "user1".
我将 MQ 服务器设置如下:
ALTER QMGR CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
DEFINE AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) +
AUTHTYPE(IDPWOS) +
FAILDLAY(10) +
CHCKLOCL(OPTIONAL) +
CHCKCLNT(REQUIRED) +
ADOPTCTX(YES)
REFRESH SECURITY TYPE(CONNAUTH)
define qlocal(HDPARLOCALQUEUE01) replace
define channel(HDPARCHANNEL) +
chltype(SVRCONN) +
trptype(TCP) +
MCAUSER(' ')
alter channel(HDPARCHANNEL) +
chltype(SVRCONN) +
MCAUSER(' ')
ALTER QMGR CHLAUTH(DISABLED)
如何让 MQ 服务器验证 MQCSP 中提供的用户?
我在qm.ini
中添加了"ChlauthEarlyAdopt=Y"此致,
为了让 IBM MQ queue 管理器使用您在 MQCSP 结构中传递的 ID 进行授权,您需要 QMGR CONNAUTH
的 AUTHINFO
object 配置为 ADOPTCTX(YES)
。在您的示例中,您尝试这样做,但它会失败,因为 object SYSTEM.DEFAULT.AUTHINFO.IDPWOS
默认存在。
如果您想更新现有的 object,您不能使用 DEFINE
来更改它,除非您将其与 REPLACE
关键字一起使用,或者您可以使用 ALTER
命令来完成这个。
我还建议使用您想要的参数定义您自己的 AUTHINFO
object,这将防止将来的升级覆盖任何 non-default 设置。
例如:
DEFINE AUTHINFO(MY.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKLOCL(OPTIONAL) CHCKCLNT(REQUIRED) ADOPTCTX(YES) LIKE(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
ALTER QMGR CONNAUTH(MY.AUTHINFO.IDPWOS)
REFRESH SECURITY TYPE(CONNAUTH)
我也看到你禁用了 CHLAUTH
,通常默认的 CHLAUTH
规则不会造成任何问题,只会阻止两件事:
您无法连接到任何以
SYSTEM
开头的频道,您没有这样做。您不能以
mqm
等 MQ 管理员用户或同等用户的身份进行连接。我看到你的示例显示user2
,如果这是mqm
组中的用户,那么你将被阻止。@MoragHughson 写了一个不错的 IBM developerWorks MQdev 博客,标题为“Getting going without turning off MQ Security”,它解释了如何保持启用此安全性,这将是一个很好的起点。