Identity Server报unsupported_grant_type错误排查求助
问题分析与解决方法
核心误解与错误原因
- Hybrid授权类型不是通过直接调用
/connect/token端点并传入用户名密码来获取令牌的,它属于交互式授权流程,必须分步骤完成,且/connect/token端点本身不支持hybrid作为grant_type的值,这就是你收到“unsupported_grant_type”错误的原因。 HybridAndClientCredentials的含义是允许客户端同时使用两种独立的授权类型:Hybrid流程和ClientCredentials流程,并非把两者合并成一种可直接传用户名密码的复合类型。
正确操作方案
方案1:用用户名密码直接获取令牌(密码模式)
如果你的需求是通过用户名密码直接拿到令牌,应该修改客户端配置并使用密码模式:
- 修改客户端的
AllowedGrantTypes为GrantTypes.ResourceOwnerPasswordAndClientCredentials:
AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
- 在Postman中调用
/connect/token时,使用以下参数:grant_type=passwordusername=你的用户名password=你的密码client_id=clientOneclient_secret=secret12345scope=api
方案2:正确使用Hybrid流程(交互式授权)
如果确实需要使用Hybrid流程(比如要同时获取id_token和授权码),需遵循两步流程:
- 调用授权端点
/connect/authorize,携带以下参数(需在浏览器环境中触发,完成用户登录授权):response_type=code id_token(或code token等Hybrid类型的响应组合)client_id=clientOneredirect_uri=https://www.getpostman.com/oauth2/callbackscope=api openid(必须包含openidscope才能返回id_token)
授权完成后,会跳转到指定的redirect_uri,并携带code和id_token参数。
- 使用拿到的
code调用/connect/token端点,用grant_type=authorization_code换取access_token。
内容的提问来源于stack exchange,提问作者Code Ratchet
相关产品推荐
相关产品推荐

