Discord OAuth与AWS Cognito用户池对接可行性及OpenID范围错误求助
解决Discord OAuth与AWS Cognito用户池对接的"invalid scope:openid"错误
你的问题核心在于Discord的OAuth服务不支持OpenID Connect协议的openid scope,因此用Cognito的OpenID Connect身份提供商配置是错误路径,应该改用Cognito的OAuth 2.0身份提供商类型对接。以下是完整的正确配置步骤:
1. 配置Discord开发者应用
- 登录Discord Developer Portal,打开目标应用
- 切换到
OAuth2 > General页面:- 在
Redirects中添加Cognito回调URL,格式为:https://<你的用户池域名>/oauth2/idpresponse - 记录页面上的
Client ID和Client Secret,后续配置Cognito会用到
- 在
2. 在Cognito中添加Discord作为OAuth 2.0身份提供商
- 打开AWS Cognito用户池控制台,进入身份提供商页面
- 点击添加身份提供商,选择类型为OAuth 2.0,填写以下信息:
- 提供商名称:自定义命名(例如
Discord) - 客户端ID:填入Discord应用的
Client ID - 客户端密钥:填入Discord应用的
Client Secret - 授权端点:
https://discord.com/api/oauth2/authorize - 令牌端点:
https://discord.com/api/oauth2/token - 用户信息端点:
https://discord.com/api/users/@me - 范围:填写Discord支持的scope,比如
identify email(根据需求选择,绝对不要加入openid)
- 提供商名称:自定义命名(例如
- 配置属性映射:将Discord返回的用户字段映射到Cognito用户池属性,例如:
- Cognito的
email字段 → Discord返回的email - Cognito的
username字段 → Discord返回的id或username
- Cognito的
3. 更新Cognito应用客户端设置
- 进入用户池的应用客户端页面,打开目标应用客户端:
- 在身份验证流程中启用需要的授权模式(如授权码授予或隐式授予)
- 在身份提供商列表中勾选刚才添加的Discord提供商
- 确保回调URL与Discord应用中配置的完全一致
4. 测试登录流程
- 访问Cognito登录URL(替换占位符为实际信息):
https://<你的用户池域名>/login?client_id=<你的应用客户端ID>&response_type=code&scope=email&redirect_uri=<你的回调URL> - 页面跳转至Discord授权界面,完成授权后即可正常回到Cognito,完成用户创建或登录
关键注意事项
- 绝对不要在配置中加入
openidscope,这是报错的直接原因,Discord OAuth不支持该scope - 如果需要获取用户邮箱,必须在Discord应用的
OAuth2 > Scopes中勾选email权限 - 如需获取更多用户信息,参考Discord官方文档选择对应scope(如
guilds),但始终避免openid
内容的提问来源于stack exchange,提问作者Daniel Roman
相关产品推荐
相关产品推荐

