使用Sign In with Apple时App与网页端的audience声明值可以相同吗
差异是否为预期行为
这是完全符合Apple官方设计的预期行为。
iOS端的Sign In with Apple流程绑定你的App Bundle ID,返回的id token中aud(受众)字段标识该token的合法接收方为对应的iOS应用,因此值为你的App Bundle ID,例如样例中的com.domain.app。
网页端的Sign In with Apple走的是独立的服务ID(Services ID)鉴权流程,服务ID本身是Apple开放平台下独立的身份凭证,因此返回的id tokenaud字段自然为服务ID的标识符,例如样例中的com.domain.siwa。
是否可以实现两端aud完全一致
无法实现。
Apple开发者平台规则要求Bundle ID和服务ID的标识符全局唯一,不能重复使用同一个值,因此不存在让两端返回的id tokenaud字段完全相同的合法方案。
推荐的校验方案
不需要额外判断id token的来源,你可以直接将两个合法的aud值加入服务端的校验白名单:
- 预先在服务端配置允许的aud列表:
["com.domain.app", "com.domain.siwa"] - 校验id token时,仅需要判断token中的aud值是否属于该白名单,即可完成aud校验,逻辑复杂度和单一aud校验几乎无差异。
注意其他标准校验项需正常执行:iss字段必须为https://appleid.apple.com、token签名验证通过、未超出过期时间、如果流程中传递了nonce参数也要对应校验。
内容的提问来源于stack exchange,提问作者Kevin Renskers
相关产品推荐
相关产品推荐

