You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OAuth2获取AccessToken时返回Bad Credentials问题求助

解决OAuth2获取AccessToken时的Bad Credentials问题

我帮你排查下这个报错的原因,看你的代码里有几个关键问题需要修正:

  • 请求方法用错了:OAuth2的password授权模式要求使用POST请求,而不是GET。一方面GET会把敏感的用户名/密码暴露在URL里,另一方面绝大多数OAuth2服务端只接受POST请求来颁发token。

  • grant_type参数冲突:你在headers里写了grant_type: client_credentials,但params里又指定了grant_type: password,这会让服务端搞不清你要用哪种授权模式。而且grant_type不需要放在headers里,应该统一放在表单参数中。

  • 参数传递方式不对:既然设置了Content-Type: application/x-www-form-urlencoded,就应该把参数放在请求体(data参数)里,而不是GET请求的params里——POST请求的表单数据要通过data传递才符合规范。

修正后的代码

import requests

# 替换成你的实际客户端ID和密钥
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"

url = "http://172.15.39.95:8080/oauth/token"
# 统一表单参数,明确使用password授权模式
form_data = {
    "grant_type": "password",
    "username": "xxxxx",
    "password": "xxxxxx"
}
# 保持HTTP Basic认证的正确使用
client_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
# 只保留必要的Accept头,Content-Type会由requests自动处理(因为用了data参数)
headers = {
    'Accept': 'application/json'
}

# 改用POST请求,传递表单数据
response = requests.post(url, data=form_data, auth=client_auth, headers=headers)
# 打印响应内容,方便排查剩余问题
print(response.status_code)
print(response.json())

额外检查建议

  • 确认CLIENT_ID和CLIENT_SECRET是服务端针对password模式配置的有效客户端凭证,不要和其他模式的凭证搞混
  • 手动验证用户名和密码是否正确(比如通过服务端的登录页面测试)
  • 如果服务端要求HTTPS,记得把URL里的http改成https

内容的提问来源于stack exchange,提问作者Amir Naimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:10