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

ADFS应用组中Native Application与Server Application的区别及适用场景确认

ADFS中Native Application与Server Application的核心区别及适用场景

嘿,我来帮你理清这个困惑——你之前的理解确实有点偏差,核心问题不是部署位置,而是客户端能不能安全存储凭据,这才是微软划分这两类应用的本质标准!

先纠正核心认知:不是部署位置,是凭据安全性

微软文档里的描述容易让人误以为是按“本地/远程”区分,但其实它背后的逻辑是OAuth2/OIDC体系里public client和confidential client的分类:

  • Native Application属于public client:没法安全保存client secret
  • Server Application属于confidential client:能安全保存client secret

Native Application(Public Client)

有时称为public client,指运行在PC或设备上、供用户直接交互的客户端应用。

本质特点:

这类应用运行在用户完全可控的环境里,比如用户的电脑、手机、浏览器前端,client secret根本藏不住——随便抓个包、反编译一下就能拿到。所以ADFS对它的认证流程不依赖secret,而是用PKCE(授权码流加验证密钥)这类方式来确保安全。

适用场景:

  • 本地桌面App(比如Windows客户端、Mac应用)
  • 移动端App(iOS/Android)
  • 纯前端SPA(React/Vue这类单页应用,代码全在浏览器端,没法存secret)
  • 你的情况:哪怕你的应用部署在远程服务器上,如果它是纯前端SPA,或者你的OIDC实现没正确处理secret的传递,那用Native Application配置就会生效——因为它不需要验证secret就能完成认证流程。

Server Application(Confidential Client)

运行在服务器上、通常通过浏览器供用户访问的Web应用。由于它能维护自身的client secret或凭据,有时称为confidential client。

本质特点:

这类应用运行在你完全管控的服务器环境里,client secret可以存在配置文件、密钥管理服务里,完全不会暴露给用户。所以ADFS要求它在换取令牌时必须带上secret,以此验证请求的合法性。

适用场景:

  • 传统服务器端渲染Web应用(比如ASP.NET MVC、Java Spring Boot项目)
  • 后端API服务(需要调用ADFS获取令牌访问其他受保护资源)
  • 任何能安全存储client secret的服务端应用

为什么你用Server Application配置失败?

大概率是你的应用没符合confidential client的要求:

  • 要么是教程步骤有遗漏,比如没正确配置secret的传递逻辑
  • 要么你的应用本身是纯前端SPA,根本没法安全存储secret,所以用需要验证secret的Server Application就会报错,换成Native Application就正常了

总结你的初始误解

你之前以为“Native是本地应用,Server是远程部署”,这是被表面描述误导了——部署位置只是常见场景,不是判断标准。哪怕是远程部署的纯前端应用,也属于public client,该用Native Application;哪怕是本地运行的服务端程序(比如本地调试的Spring Boot),只要能安全存secret,就可以用Server Application。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:44