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

如何验证OAuth2令牌?集成Microsoft与Okta SSO的技术疑问

SaaS集成Microsoft/Okta SSO的令牌验证方案

你推测的流程完全正确:客户端拿到SSO提供商返回的令牌后,每次调用自家API时,要把令牌放在Authorization: Bearer <token>请求头里,由服务器端负责验证令牌的有效性,这是防止令牌被盗用、确保请求合法性的核心步骤,客户端不需要参与验证环节。

一、Microsoft Entra ID(原Azure AD)令牌验证

不需要调用Microsoft Graph来验证令牌,微软提供了现成的服务器端库可以直接完成验证:

  • .NET环境直接用Microsoft.Identity.Web,给API接口加上[Authorize]属性,配合配置文件里的Entra ID租户、API客户端ID,就能自动完成JWT令牌的全量验证
  • Node.js可以用@azure/msal-node或者jsonwebtoken包,结合Entra ID公开的JWKS公钥端点自动获取用于验证签名的公钥

验证的核心检查点包括:

  • 令牌签名是否有效(用Entra ID的公钥验证,确保令牌未被篡改)
  • 令牌是否未过期(检查exp声明字段)
  • 受众(aud字段)是否匹配你的API的客户端ID
  • 颁发方(iss字段)是否为你的Entra ID租户的合法地址

验证通过后,令牌Payload里的oid(用户Object ID)、name、email等字段可以直接取用,不需要再调用Microsoft Graph。只有当你需要额外的用户数据(比如用户的组信息)时,才需要在验证通过后调用Graph接口。

二、Okta令牌验证

Okta同样提供了官方库简化验证流程:

  • Java用okta-jwt-verifier-java
  • Python用okta-jwt-verifier
  • Node.js用@okta/jwt-verifier

验证逻辑和Entra ID一致:检查令牌签名、过期时间、受众(你的API在Okta中配置的受众地址)、颁发方是否为你的Okta租户域名即可。

三、手动验证逻辑(无官方库场景)

如果不想依赖官方库,手动验证的步骤如下:

  1. 解析JWT令牌的头部,获取密钥ID(kid字段)
  2. 从身份提供商的JWKS公钥端点(Entra ID和Okta都有公开的该端点)下载对应kid的公钥
  3. 用公钥验证JWT的签名是否有效
  4. 逐一检查令牌的声明字段:
    • exp:当前时间必须小于令牌过期时间
    • aud:必须匹配你的API的客户端ID/受众配置
    • iss:必须是身份提供商的合法颁发地址
    • iat:可选,检查令牌签发时间是否在合理范围内,防止重放攻击

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:10:28