无法生成IBM Visual Recognition API的refresh token,IAM认证问题求助
解决IBM IAM Refresh Token生成错误BXNIM0507E的问题
我帮你排查下这个问题,你遇到的BXNIM0507E错误核心原因是:调用刷新token接口时,你使用的Basic Auth凭证不正确。
问题分析
你当前用的是apikey作为用户名、密钥作为密码生成的Basic头,但IBM IAM的刷新token接口(grant_type=refresh_token)要求的是**服务凭证中的client_id和client_secret**组合生成的Basic Auth,而不是apikey对应的凭证。
这是因为:
- 当用
grant_type=urn:ibm:params:oauth:grant-type:apikey获取初始access token时,确实是用apikey作为用户名、你的apikey值作为密码来生成Basic头; - 但当用
refresh_token来刷新令牌时,IAM需要验证你是当初获取refresh token的合法客户端,这时候必须使用服务凭证里的client_id和client_secret来做身份验证。
解决方案步骤
获取正确的client_id和client_secret
登录IBM Cloud控制台,找到你的服务对应的「凭证」页面,打开你用来生成初始access token的服务凭证,里面会包含client_id和client_secret两个字段(如果没有的话,重新创建一个服务凭证即可)。生成正确的Basic Auth头
将client_id和client_secret用冒号连接,然后做Base64编码。比如在终端执行:echo -n "你的client_id:你的client_secret" | base64得到的结果就是你需要放在
Authorization: Basic后面的值。修正curl命令
把原来的Authorization头替换成新生成的Base64值,同时确保refresh_token是你初始获取access token时得到的有效refresh token。修正后的命令示例:curl -k -X POST --header "Authorization: Basic {替换为新的Base64编码值}" \ --data-urlencode "grant_type=refresh_token" \ --data-urlencode "refresh_token={你的有效refresh-token}" "https://iam.bluemix.net/identity/token"
额外注意点
- 确保你的refresh token没有过期(默认有效期是90天,具体以初始响应中的
expires_in为准); - 如果重新创建服务凭证,需要用新凭证重新获取access token,再用对应的refresh token去刷新。
内容的提问来源于stack exchange,提问作者C-ddhesh
相关产品推荐
相关产品推荐

