如何绕过iOS Universal Link?解决ASP.NET网站Yammer OAuth2认证跳转问题
解决iOS设备上Yammer OAuth2认证跳转到App的坑
哥们,我之前帮朋友处理过几乎一模一样的问题——Yammer的Universal Link会把认证请求直接拽进App里,导致后续整个网站都卡在Yammer的WebView里,各种交互出问题。下面给你几个实操的解决方案,都是ASP.NET环境下能快速落地的:
方案1:用"动态拼接跳转"绕开Universal Link识别
这就是你提到的“掩码”思路,核心就是不让iOS一眼认出这是Yammer的官方Universal Link。具体怎么做:
- 不要让服务器直接302重定向到Yammer的认证URL,而是先跳转到你自己的一个中间页面(比如
YammerAuthRedirect.cshtml) - 在这个中间页面里用JavaScript动态拼接Yammer的认证地址,再触发跳转。因为iOS的Universal Link识别是在初始请求解析阶段,动态生成的跳转它不会触发App唤起。举个代码例子:
<script> // 故意把Yammer的域名拆成两段拼接,避免被识别 const yammerAuthBase = 'https://yam' + 'mer.com/authenticate'; // 把你的认证参数也带上,记得替换成自己的ClientID和回调地址 const authParams = '?client_id=你的客户端ID&redirect_uri=https://你的网站.com/signin-yammer&response_type=code'; // 触发跳转 window.location.href = yammerAuthBase + authParams; </script> - 要是你用的是服务器端渲染,也可以在Action里返回这个中间页面,不要直接调用
Response.Redirect到Yammer。
方案2:重写ASP.NET OAuth2中间件的跳转逻辑
如果你用的是ASP.NET Core的AddOAuth或者老版Owin的OAuth中间件,可以直接重写跳转事件,替换成我们的中间页跳转:
- ASP.NET Core的示例代码如下,你可以直接套进自己的认证配置里:
services.AddAuthentication() .AddOAuth("Yammer", options => { // 基础配置,替换成你自己的参数 options.ClientId = "你的Yammer ClientID"; options.ClientSecret = "你的Yammer ClientSecret"; options.CallbackPath = "/signin-yammer"; options.AuthorizationEndpoint = "https://yammer.com/authenticate"; options.TokenEndpoint = "https://www.yammer.com/oauth2/access_token.json"; options.UserInformationEndpoint = "https://www.yammer.com/api/v1/users/current.json"; // 重点:重写跳转逻辑,不直接跳Yammer options.Events = new OAuthEvents { OnRedirectToAuthorizationEndpoint = context => { // 跳转到我们的中间页,由前端触发动态跳转 context.Response.Redirect("/YammerAuthRedirect"); return Task.CompletedTask; } }; }); - 老版Owin的逻辑类似,在
OAuthAuthenticationOptions里找对应的事件重写就行。
方案3:补救措施——强制从Yammer App跳回Safari
如果已经有用户反馈网站在Yammer App里打开了,可以在你的所有页面头部加个meta标签,让iOS强制在Safari中打开:
<meta name="apple-itunes-app" content="app-id=425423136, app-url=https://你的网站域名">
不过这个是补救,最好还是从认证跳转的源头解决,避免用户走到这一步。
测试小技巧
验证的时候注意这几点:
- 一定要用iOS设备的Safari打开你的网站测试,不要用模拟器(模拟器的Universal Link识别逻辑和真机不一样)
- 如果还是唤起Yammer App,可以试试清除Safari的缓存,或者在iOS设置里找到Yammer,关闭它和Safari的关联权限
内容的提问来源于stack exchange,提问作者empz
相关产品推荐
相关产品推荐

