内容提要
Vercel Passport现已全面可用,允许用户通过Okta、Microsoft Entra ID等OIDC提供商保护部署。它提供getIdentity()读取已验证访客身份,支持组授权、下游服务验证、活动日志监控,并支持自动化流量绕过和自定义环境。该功能适用于企业版计划。
延伸解读
身份验证的实用价值
Passport 将身份验证前置到 Vercel 网络层,应用代码通过 getIdentity() 即可获取已验证的用户身份,无需自行处理 OIDC 流程。这简化了受保护部署的构建,同时确保客户端无法伪造身份,因为 Vercel 会剥离并替换 token。
组授权与下游验证
通过请求 groups 范围并读取 payload 中的组信息,可以实现基于组的授权,例如仅允许 engineering 组成员访问管理接口。对于下游服务,verifyIdentity() 可验证转发的 token,非 JavaScript 服务则可通过 JWKS 验证,确保身份在服务间安全传递。
自动化流量与自定义环境
Passport 支持通过保护绕过机制(如 x-vercel-protection-bypass 头或 Trusted Sources)让自动化流量(如 webhook、cron)无需登录即可访问,但注意绕过请求中 getIdentity() 返回 null。此外,自定义环境(如 staging)也能获得相同的身份验证保护,扩展了适用场景。
Q&A
Vercel Passport是什么?它有什么作用?
Vercel Passport是一项允许用户通过自己的身份提供商(如Okta、Microsoft Entra ID或任何OIDC提供商)来保护Vercel部署的功能。访客在查看受保护的部署前需进行身份验证,Vercel会向前端部署转发签名的身份令牌,以便应用代码基于访客身份进行构建。
如何在应用代码中读取已验证的访客身份?
可以使用@vercel/passport包中的getIdentity()辅助函数。该函数读取Vercel请求上下文并返回已验证的访客身份。Vercel会剥离客户端提供的x-vercel-oidc-passport-token头,并在Passport验证会话后注入验证过的令牌,因此代码接收到的身份是已验证的。
Vercel Passport支持基于组的授权吗?如何实现?
是的,Passport令牌可以携带来自身份提供商的额外身份声明,如组成员资格。需要请求groups作用域并在Vercel Connect应用中允许该声明,然后可以从身份负载中读取groups字段进行授权判断。
如何在下游服务中验证Passport令牌?
可以将Passport令牌作为Bearer令牌转发到其他后端,并使用@vercel/passport 1.0.0及以上版本中的verifyIdentity()函数进行验证。该函数会检查令牌签名、Passport声明以及令牌是否来自预期的项目和环境。非JavaScript服务可以使用发布的JWKS将令牌作为标准JWT验证。
如何监控Passport的访问情况?
每次成功的Passport认证都会在活动日志和审计日志中记录一个passport-access-granted事件,包含访客信息、受保护的主机名和项目。活动日志视图已过滤为Passport访问。
如何让自动化流量绕过Passport保护?
可以通过两种方式:1) 使用Protection Bypass for Automation,在原始请求中发送x-vercel-protection-bypass头或查询参数中的绕过密钥;2) 使用Trusted Sources,无需共享密钥,受保护的部署接受来自授权Vercel项目或外部服务的短期OIDC令牌。注意,绕过请求没有登录访客,getIdentity()会返回null。
Vercel Passport支持自定义环境吗?
是的,Passport现在支持自定义环境,因此像staging或qa这样的环境可以获得与预览和生产部署相同的身份提供商登录体验。
Vercel Passport的定价和可用性如何?
Vercel Passport适用于企业版计划。