Teams应用Firefox内嵌iframe中OAuth认证问题求助
我的Teams可配置标签页是Blazor Web应用,用非Azure AD的OAuth提供商做登录。普通浏览器环境下登录功能正常,但在Firefox的Teams应用内打开时,登录弹窗的认证Cookie没法传递到调用页面,目前必须关闭Firefox的增强跟踪保护才能正常运行。已知Firefox限制了iframe间的Cookie传递,现寻求无需关闭该功能的可行解决方案,该功能在Edge和Chrome里不用修改任何设置就能正常运行。
解决方案
给认证Cookie添加
Partitioned属性
Firefox的增强跟踪保护会对第三方Cookie做分区处理,给Cookie加上Partitioned属性后,它会被绑定到当前嵌入的上下文(也就是Teams的iframe环境),这样就能正常在iframe间传递了。在AddCookie的配置里新增这一行即可。确认Cookie的核心配置无误
你已经设置了SameSiteMode.None和CookieSecurePolicy.Always,这两个是跨上下文Cookie传递的必要配置,保持不变即可,但要确保你的网站是HTTPS环境,因为Secure要求Cookie只能通过HTTPS传输。优化OAuth回调的处理逻辑(可选)
可以在OAuth的OnCreatingTicket事件里添加额外的令牌处理逻辑,同时回调页面完成认证后,建议用Teams的JS API通知父页面刷新身份验证状态,确保状态同步。
修改后的Startup.cs代码
services.AddAuthentication(options => { options.DefaultScheme = CookieScheme; options.DefaultChallengeScheme = OAuthScheme; options.DefaultAuthenticateScheme = CookieScheme; options.DefaultSignInScheme = CookieScheme; }) .AddCookie(CookieScheme, options => { options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.None; // 新增Partitioned属性适配Firefox增强跟踪保护 options.Cookie.Partitioned = true; options.ExpireTimeSpan = TimeSpan.FromMinutes(9.5); options.SlidingExpiration = false; options.Events = new CookieAuthenticationEvents { OnValidatePrincipal = RefreshTokenIfRequired }; }) .AddOAuth(OAuthScheme, options => { var Settings = JsonConvert.DeserializeObject<ApiSettings>(Configuration["oauth"]); options.ClientId = Settings.ClientId; options.ClientSecret = Settings.ClientSecret; options.AuthorizationEndpoint = Settings.AuthEndpoint; options.TokenEndpoint = Settings.TokenEndpoint; options.CallbackPath = new PathString("/oauth/callback"); options.SaveTokens = true; // 可选:添加令牌创建时的自定义处理 options.Events = new OAuthEvents { OnCreatingTicket = context => { // 这里可以添加比如存储额外用户信息等逻辑 return Task.CompletedTask; } }; });
内容的提问来源于stack exchange,提问作者user25879
相关产品推荐
相关产品推荐

