OpenStack curl是否支持v3applicationcredential认证?如何实现?
我们已知可通过用户名/密码从OpenStack获取token,再用curl携带该token发送请求替代命令行操作,但脚本中明文存储密码存在泄露风险。
目前可在openrc文件中配置v3applicationcredential进行OpenStack API认证,示例如下:
vsa11061573:/home/i331281/loadbalancer/openrc # cat secret_NEO-LA-BR-1-FACTORYBR1 export OS_AUTH_URL=https://identity-3.la-br-1.cloud.sap/v3 export OS_AUTH_TYPE=v3applicationcredential export OS_REGION_NAME=la-br-1 export OS_APPLICATION_CREDENTIAL_ID=975b3757b0704babac512ca9a80aeaa2 export OS_APPLICATION_CREDENTIAL_SECRET=MKVHS88mDv0W1KhiGQL9__UsHNuTVVfFaR-oweW-liVmljt8VkcJw4FUcA2MxAPn5ndEB__GqgwTYpV8oBWFLQ
但当前使用curl获取token时采用的是password认证方式,示例请求如下:
curl -i \ -H "Content-Type: application/json" \ -d ' { "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "user00001", "domain": { "name": "mydomain" }, "password": "password0000011111" } } }, "scope": { "project": { "name": "myproject", "domain": { "name": "mydomain" } } } } }' \ "https://identity-3.eu-de-1.cloud.sap/v3/auth/tokens"
在已列出的认证插件中未找到v3applicationcredential:
keystone.auth.plugins.external.Base keystone.auth.plugins.mapped.Mapped keystone.auth.plugins.oauth1.OAuth keystone.auth.plugins.password.Password keystone.auth.plugins.token.Token keystone.auth.plugins.totp.TOTP
但OpenStack官方文档显示v3applicationcredential认证方式是受支持的,因此想咨询:能否通过curl使用v3applicationcredential认证方式获取token?若可以,具体如何操作?
完全可以通过curl使用v3applicationcredential认证方式获取OpenStack token,具体操作如下:
1. 构造curl请求
使用application_credential作为认证方法,请求体中传入你的应用凭证ID和密钥,示例命令如下:
curl -i \ -H "Content-Type: application/json" \ -d ' { "auth": { "identity": { "methods": ["application_credential"], "application_credential": { "id": "975b3757b0704babac512ca9a80aeaa2", "secret": "MKVHS88mDv0W1KhiGQL9__UsHNuTVVfFaR-oweW-liVmljt8VkcJw4FUcA2MxAPn5ndEB__GqgwTYpV8oBWFLQ" } } } }' \ "https://identity-3.la-br-1.cloud.sap/v3/auth/tokens"
2. 关键参数说明
methods: 指定为["application_credential"],明确采用应用凭证认证逻辑application_credential.id: 对应openrc文件中的OS_APPLICATION_CREDENTIAL_IDapplication_credential.secret: 对应openrc文件中的OS_APPLICATION_CREDENTIAL_SECRET- 请求URL直接使用openrc中的
OS_AUTH_URL拼接/auth/tokens路径
3. 关于认证插件列表的补充说明
你列出的插件中没有看到v3applicationcredential相关项,是因为该认证方式对应的插件实际全名为keystone.auth.plugins.application_credential.ApplicationCredential,可能是你查询的插件列表不全(比如对应Keystone版本较旧,或查询方式遗漏了该插件)。但这不影响通过API直接调用该认证方式,只要你的OpenStack云环境已开启应用凭证功能即可正常使用。
4. token的后续使用
请求成功后,响应头中的X-Subject-Token字段即为所需的认证token。后续调用OpenStack其他API时,只需在请求头中添加X-Auth-Token: <获取到的token>即可完成身份验证。
内容的提问来源于stack exchange,提问作者EisenWang

