APNs(Apple Push Notification service =APNs)是Apple推送通知服务。2016年的WWDC,苹果上线了token验证的推送方式,通过获得一个认证密钥(APNs Auth Key)去生成服务器端token,并且token非常容易生成,可以使用这些token令牌代替推送证书。一个认证密钥可用于多个应用程序并且永远不过期。每一个需要推送的App都需要配置推送证书的时代过去了。而且,一些第三方推送服务商,如极光、LeanCloud(官网强烈推荐的方式)目前已经升级支持APNs Auth Key Token模式。
1、认证方式
TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。新的APNs协议基于HTTP/2,旧推送是使用Universal Push Notification Client SSL 证书,新推送是使用Token认证。
1.1、基于证书的信任认证
建立连接工作的步骤如下:
1)Provider通过TLS向APNs发起安全请求。
2)APNs返回一个证书给Provider。
3)Provider验证APNs的证书,验证通过后,返回Apple提供的证书(通过苹果开发者账号创建的推送证书)给APNs。
4)APNs验证Provider返回的证书,从而确认连接请求来自于合法的Provider并建立TLS连接。
上述步骤完成后,信任连接建立,Provider服务器可以发送基于证书的远程推送消息请求给APNs。
1.2、基于Token的信任认证
建立连接工作的步骤如下:
1)Provider通过TLS向APNs发起安全请求。
2)APNs返回一个证书给Provider。
以上两步完成后,信任连接建立,Provider服务器可以发送基于Token的远程推送消息请求给APNs。
3)Provider验证APNs的证书,然后Provider发送的每个消息请求必须携带上JWT 认证的 Token。
4)APNs验证Provider返回的证书,并返回请求的结果。
2、推送服务配置过程
2.1、配置推送证书
1)在苹果开发者网站上创建两种 APNs 证书,有开发(Development)和生产(Production)两种。开发证书用于开发调试使用;生产证书既能用于开发调试,也可用于产品发布。选择该证书准备绑定的对应的 AppID。
2)在电脑上打开系统自带的 KeychainAccess 创建 Certificate Signing Request文件。
3)回到浏览器中 CSR 上传页面,上传刚刚生成的后缀为 .certSigningRequest 的文件。
4)生成证书成功后,点击 “Download” 按钮把证书下载下来,是后缀为 .cer 的文件。
5)在电脑上双击证书后,会在“KeychainAccess”中打开,选择左侧“钥匙串”列表中“登录”,以及“种类”列表中“我的证书”,找到刚才下载的证书,并导出为 .p12 文件。
6)将导出的 .p12 文件(开发和生产的)上传至第三方推送平台。
2.2、配置认证密钥(APNs Auth Key)
1)在苹果开发者网站上创建Keys,填写相应的名称之后,网站会生成包含APNs Auth Key的.p8密钥文件。
2)将下载的的 .p8 密钥文件上传至第三方推送平台。
注:.p8 密钥文件只允许下载一次,需要妥善保管。
3、权限和使用期限
传统的推送证书,每个App需要单独配置两个(开发环境和生产环境)证书。推送证书的有限期为1年(生产的推送证书比开发的推送证书多一个月),过期之后需要重新配置。
新的token验证推送,一个认证密钥可用于多个App服务,而且永远不会过期。但是该密钥生成后,在网站上只允许下载一下,要保管好下载的.p8 密钥文件。
对于一个开发者账号管理着多个App,并且部分App迭代周期大于1年,这种新的推送认证方式大大地减少了管理证书人员的工作量。