Snowflake OAuth请求Token返回unsupported_grant_type错误如何解决?
错误触发原因
- 核心参数传递位置不符合要求:Snowflake OAuth的
token-request端点不支持从URL查询参数读取授权相关参数,要求所有参数必须以application/x-www-form-urlencoded格式放在POST请求的请求体中,你当前将grant_type等参数放在URL query中,服务端无法识别到有效授权类型,所以返回不支持的错误。 - OAuth客户端权限配置缺失:你在Snowflake中创建的自定义OAuth客户端没有开启
authorization_code授权类型权限,即使官方支持该类型,也需要对应客户端单独配置允许后才能使用。 - 参数值异常:grant_type的值存在多余空格、大小写错误,或者缺少client_id、client_secret等必填参数,也可能触发该类校验错误。
排查解决步骤
- 调整请求参数传递格式:删除URL中的所有查询参数,将grant_type、code、redirect_uri、client_id、client_secret全部放入POST请求体,同时请求头添加
Content-Type: application/x-www-form-urlencoded,请求URL仅保留https://<你的Snowflake实例域名>/oauth/token-request即可。 - 校验OAuth客户端配置:登录Snowflake控制台,查看当前使用的OAuth客户端配置,确认
OAUTH_ALLOWED_AUTHORIZATION_TYPES参数包含authorization_code,如果缺少可执行以下SQL更新配置:
ALTER SECURITY INTEGRATION <你的OAuth集成名称> SET OAUTH_ALLOWED_AUTHORIZATION_TYPES = ('AUTHORIZATION_CODE', 'REFRESH_TOKEN');
- 校验参数一致性:确保本次请求传入的redirect_uri和你之前获取authorization_code时传入的redirect_uri完全一致,没有路径、大小写、参数的差异;grant_type的值必须完全为小写的
authorization_code,没有多余空格。 - 校验code有效性:Snowflake返回的authorization_code有效期仅为10分钟,且只能使用一次,如果code已经过期或被调用过,需要重新走授权流程获取新的code再发起请求。
内容的提问来源于stack exchange,提问作者Jason King
相关产品推荐
相关产品推荐

