iOS App微软SSO登录报错:仅接受POST请求,却收到GET请求
问题描述
我有一款通过PWA Builder创建、已上架苹果商店的应用,需通过SSO登录微软账号:
- 在Safari浏览器中登录完全正常;
- 但在苹果商店的App中,输入密码后(本该触发双因素认证),弹出错误提示:
The endpoint only accepts POST requests. Received a GET request.,且查看网络面板发现输入密码后并未发送任何请求。
已尝试的操作:
- 将所有必要域名添加至
info.plist的WKAppBoundDomains列表中; - 清除所有Cookie,但均无效果。
后端通过WorkOS获取login.microsoft.online的授权URL,用户在此完成认证,后端代码如下:
public async Task<SystemMessage> SsoLoginAsync(string email) { WorkOS.WorkOS.SetApiKey(_settings.WorkOsApiKey); SSOService ssoService = new(); ApplicationUser user = await _db.Users .Include(o => o.Client) .Where(o => o.Email == email && o.IsActive == true ).FirstOrDefaultAsync(); if (user == null) { return Notification.ErrorMessage("Could not Authenticate"); } string orgId = user.Client?.SsoOrganizationId; if (orgId == null) { return Notification.ErrorMessage("Could not Authenticate"); } GetAuthorizationURLOptions options = new() { ClientId = _settings.WorkOsClientId , Organization = orgId , RedirectURI = _settings.BaseUrl + "login?fromSso=true" }; string ssoUrl = ssoService.GetAuthorizationURL(options); return Notification.SuccessMessage( "" , value: new { ssoUrl, email } , showSystemMessage: false ); }
解决方案建议
1. 检查WorkOS授权URL的请求方法配置
微软Azure AD的授权端点默认支持GET和POST,但WorkOS生成的URL可能因配置限制强制使用GET,而苹果App内的WKWebKit环境可能拦截了GET请求的表单提交。可以尝试:
- 查看WorkOS的
GetAuthorizationURL方法是否支持指定请求方法(比如强制POST); - 手动构造授权URL时,确保认证请求以POST方式提交。
2. 验证PWA在App环境下的WKWebKit表单提交行为
PWA Builder打包的iOS App依赖WKWebKit,可能存在表单提交被拦截的情况:
- 检查App内的WKWebView是否禁用了JavaScript自动提交表单;
- 确认是否有Content Security Policy (CSP) 规则阻止了POST请求;
- 检查WKWebView配置中是否开启了必要权限,确保表单提交的JS逻辑正常执行。
3. 确认RedirectURI的合规性
苹果App对重定向URI有严格要求:
- 确保
RedirectURI使用App的自定义URL scheme或已在苹果开发者后台配置的关联域名; - 避免使用带查询参数的RedirectURI(比如
login?fromSso=true),部分认证服务对带参数的重定向处理异常,可简化为login路径,后续通过其他方式传递fromSso参数。
4. 检查微软Azure AD应用注册设置
虽然Safari正常,但App环境的请求可能触发不同认证规则:
- 登录Azure AD后台,检查应用注册的「认证」设置中是否允许公共客户端流(适配移动/App场景);
- 确认授权端点是否开启POST请求支持(默认开启,可再次验证)。
5. 排查PWA Builder的打包配置
PWA Builder的打包选项可能影响WKWebKit行为:
- 检查打包时是否完整配置了「App Bound Domains」,确保
login.microsoftonline.com等相关域名被正确添加; - 尝试重新打包App,选择针对iOS的优化选项,启用WKWebView的所有必要权限。
内容的提问来源于stack exchange,提问作者Kase Abernathy
相关产品推荐
相关产品推荐

