.NET Framework MVC控制器跳转外部.NET Core地址时如何传递JWT Token
实现可行性说明
这个需求完全可以实现。跨域名场景下浏览器默认禁止跨域读写Cookie,因此不建议使用Cookie方案传递JWT,具体实现可选方案如下:
方案1:URL查询参数携带JWT(最易实现)
重定向时直接将JWT拼接在目标URL的查询参数中,两个项目的改造量都很小:
- .NET Framework MVC侧控制器代码示例:
public ActionResult RedirectToCoreApp() { // 此处替换为你自己生成/获取现有JWT的逻辑 string jwtToken = "实际JWT字符串"; string targetCoreUrl = $"https://你的Core应用域名/控制器/动作?token={Uri.EscapeDataString(jwtToken)}"; return Redirect(targetCoreUrl); }
- .NET Core侧控制器接收逻辑示例:
[HttpGet] public IActionResult ReceiveToken(string token) { // 校验JWT合法性,校验通过后可以存入Core应用的Session、本地Cookie或者请求上下文供后续使用 if (!ValidateJwt(token)) { return Unauthorized(); } // 后续业务逻辑 return View(); }
注意:该方案JWT会出现在浏览器地址栏和服务端访问日志中,适合JWT有效期极短(比如5分钟以内)的场景,安全性要求高的场景建议用方案2。
方案2:临时授权码中转(安全性更高)
避免JWT直接暴露在URL中,流程如下:
- .NET Framework MVC侧生成一个有效期极短(比如30秒)的唯一随机授权码,把JWT和授权码绑定存在公共缓存(比如Redis),或者直接把JWT加密后作为授权码
- 重定向时只把授权码放在查询参数中传给.NET Core应用
- .NET Core应用拿到授权码后,主动调用.NET Framework侧提供的校验接口,或者自行解密授权码拿到JWT,校验通过后完成登录态初始化
补充说明
浏览器处理301/302重定向时,不允许开发者主动自定义请求头携带JWT,因此不要尝试在RedirectResult中附加自定义请求头,该方案不符合浏览器标准逻辑,无法生效。
内容的提问来源于stack exchange,提问作者Wesley
相关产品推荐
相关产品推荐

