You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于应用的OIDC内嵌浏览器场景下的令牌安全与实践问询

应用场景下的OIDC最佳实践问题

场景背景

多数OIDC指南都是应用直接作为客户端,通过授权码流与IDP完成令牌交换,且有成熟库支持。但我的场景需要后端Session Manager作为IDP的客户端,IDP颁发的id、access、refresh令牌需全程保密在后端内。

流程简化为:App => Session Manager => IDP,具体执行逻辑:

  • Session Manager提供/login端点,应用通过内嵌浏览器调用该端点,后者重定向至IDP的/authorize端点启动授权流程
  • 因使用PKCE,整个授权流程需在浏览器内完成,PKCE的code verifier存储在Cookie中,应用无法访问
  • 流程推进至/signin端点完成令牌交换后,需要生成会话标识(外部令牌)交付给应用,作为后续请求的授权凭证

当前实现是通过Deep Link重定向,将会话标识作为查询参数传递,但受React Native框架限制,应用仅能获取URL及查询参数,无法访问Cookie或请求头。这种传递方式存在安全隐患,因为会话标识可访问系统所有受保护端点。

核心疑问

  1. 是否禁用PKCE并通过Deep Link传递授权码是更优方案?
    该方案下,应用可获取授权码,再调用Session Manager的/signin端点完成流程,从响应体或请求头中获取会话标识。我的理解是:PKCE主要用于应用作为客户端、无法安全存储密钥的场景,而我的场景中后端作为客户端,授权码为一次性使用,相比有效期至少5分钟的会话标识,关闭PKCE是否更安全?

  2. 设计上身份认证与授权引擎完全分离,IDP的access token仅能用于调用IDP内部端点获取用户信息,无法将其作为应用的授权凭证。是否有其他基于内嵌浏览器的应用OIDC替代方案或优化建议?

更新补充

核心问题在于我为Web和Mobile设计了共用的Session Manager(作为前端后端OIDC客户端),配置代码如下:

.AddOpenIdConnect(options =>
{
    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.Authority = "url";
    options.RequireHttpsMetadata = false;
    options.ClientId = "ClientId";
    options.ClientSecret = "ClientSecret";
    options.ResponseType = OpenIdConnectResponseType.Code;
    options.UsePkce = true;
    options.CallbackPath = "/signin-oidc";
}

当使用Cookie认证方案时,无法通过重定向URL将授权码传递给应用,因为应用无法获取.NET生成的Cookie。

由此延伸出两个疑问:

  • 为Web和Mobile采用不同的OIDC实现方案是否属于常见做法?
  • 是否可借助IDP的access token在Session Manager中创建会话?

内容的提问来源于stack exchange,提问作者user3170354

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:03:28