Amplify集成Cognito自定义OpenID提供商重定向异常求助
解决Amplify集成自定义OpenID提供商时跳转URL出现undefined的问题
我之前也碰到过一模一样的情况!核心原因就是Amplify的Auth配置里缺少了自定义OpenID提供商的授权端点信息,导致它无法正确拼接跳转路径,才会出现https://undefined/oAuth/...这种错误URL。下面是一步步的解决方法:
1. 先确认Cognito端的自定义OpenID提供商配置正确
首先要确保你在Cognito用户池里创建的自定义OpenID提供商已经填好了所有必要的端点:
- 授权端点(Authorization endpoint):就是你提到的
https://openidsignin.com/oauth/authorize - 令牌端点(Token endpoint)
- 用户信息端点(User info endpoint)
同时检查提供商的客户端ID、客户端密钥是否和你的OpenID服务端配置一致。
2. 为Amplify补充自定义提供商的配置细节
在你的前端代码里,调用Auth.configure()时,必须在oauth.providers里明确指定自定义提供商的信息,示例代码如下:
import { Auth } from 'aws-amplify'; Auth.configure({ Auth: { region: '你的Cognito区域(比如us-east-1)', userPoolId: '你的用户池ID(比如us-east-1_XXXXXXXXX)', userPoolWebClientId: '你的应用客户端ID', oauth: { domain: '你的Cognito用户池域名(比如xxx.auth.us-east-1.amazoncognito.com)', scope: ['openid', 'email', 'profile'], // 对应你在Cognito里配置的OAuth scope redirectSignIn: '你的前端登录回调URL(比如https://your-app.com/callback)', redirectSignOut: '你的前端退出回调URL(比如https://your-app.com/signout)', responseType: 'code', // 根据你的OpenID提供商要求选择,一般是code或token // 关键配置:添加自定义OpenID提供商的端点信息 providers: { 'MyCustomOpenID': { // 这个名称必须和你在Cognito里创建的提供商名称完全一致(大小写敏感) authorizationEndpoint: 'https://openidsignin.com/oauth/authorize', // 如果需要,还可以添加tokenEndpoint、userInfoEndpoint等其他端点 } } } } });
3. 触发登录时明确指定自定义提供商
调用登录方法时,一定要指定你配置的提供商名称,不能用默认的登录流程:
// 点击登录按钮时触发 const handleCustomLogin = async () => { try { await Auth.federatedSignIn({ provider: 'MyCustomOpenID' }); // 名称要和上面配置的完全一致 } catch (error) { console.error('登录失败:', error); } };
4. 检查Cognito应用客户端的OAuth设置
最后再确认Cognito应用客户端的配置:
- 在“应用客户端设置”里,确保已经勾选了你创建的自定义OpenID提供商作为身份提供商
- 确认OAuth流(比如Authorization Code Grant)和你在Amplify里设置的
responseType匹配 - 回调URL和退出URL要和Amplify配置里的
redirectSignIn、redirectSignOut完全一致
常见坑提醒
- 提供商名称必须完全匹配:Cognito里的提供商名称和Amplify配置里的
providers键名要一模一样,大小写都不能错 - 授权端点要完整:必须包含完整的HTTPS路径,比如
https://openidsignin.com/oauth/authorize,不能只填域名 - Cognito用户池域名要正确:如果用了自定义域名,一定要填自定义域名,而不是默认的Cognito域名
按照这些步骤配置后,Amplify就能正确跳转到你的自定义OpenID提供商登录页面了!
内容的提问来源于stack exchange,提问作者Sion R
相关产品推荐
相关产品推荐

