2016-10-28 147 views
1

我目前正在開發用於發送iOS推送消息的服務器端支持(服務器以Java爲單位,如果相關的話)。 Apple開發人員文檔"Communicating with APNs"聲稱,如果使用HTTP/2協議,則可以使用證書或剛剛插入標頭的JWT令牌。同樣,據我瞭解,證書應該每年手動更新(這似乎對我來說很容易出錯),而JWT的所有部分都會自動無限期地(或不是?)自動重新生成。如果是這樣的話,我一定會嘗試使用智威湯遜。JWT用於從服務器發送iOS推送消息

現在,我們沒有iOS開發經驗,沒有在iOS開發程序中註冊,甚至沒有iOS設備,所以我很難理解如何編寫正確的JWT。也就是說,我不明白什麼是

  • 「A 10個字符的密鑰標識(孩子)鍵,通過開發者帳戶獲得」
  • 「發行人(ISS)的註冊要求的關鍵,其值是您的10個字符的團隊ID爲,從您的開發者帳戶「
  • 」獲得,創建令牌後,您必須使用私鑰對其進行簽名。

在最後一句我不明白這個私鑰是什麼。

我與之合作的iOS開發人員對於研究這個主題並不是非常熱衷,他以他們過去一直做的方式給了我p12證書。所以,如果我能指出他們到正確的地方(最好是圖片或工作「路徑」),說「給我這個和這個」,我的問題將有望得到解決。如果任何開發人員的賬戶中沒有這些資源,並且應該通過某個過程得到,恐怕我也需要這些說明(對文檔或您自己的描述的工作參考將是完美的)。

如果您能確認我對JWT的一般假設並向我澄清缺失的細節,我將不勝感激。

回答

3

Key ID和Key從Apple Developer帳戶門戶獲得。該過程在Xcode help中進行了描述,可通過搜索「配置推送通知」的幫助來找到該過程。

您創建的開發者門戶網站一個新的推送通知驗證密鑰:

  1. 轉到證書,標識&配置文件,並在證書上,選擇全部或APN的驗證密鑰。

  2. 單擊右上角的添加按鈕(+)。

  3. 在生產下,選擇「Apple Push Notification Authentication Key(Sandbox & Production)」複選框,然後單擊繼續。 enter image description here

一旦你點擊繼續,你會看到如下畫面: enter image description here

密鑰ID號爲文檔中提到的KID,當你點擊下載你會得到與此密鑰ID關聯的私鑰。

您可以用它來生成令牌,這是一個JSON文件格式如下:

{ 
    "alg": "ES256", 
    "kid": "ABC123DEFG" 
} 
{ 
    "iss": "DEF123GHIJ", 
    "iat": 1437179036 
} 

其中kid是密鑰ID和iss團隊標識,還從開發者門戶網站。 iat是時間由此看來,這是紀元以來的秒數發佈的,在UTC

創建令牌後,您必須使用從門戶網站下載的私鑰簽名時kid已生成。您必須使用橢圓曲線數字簽名算法(ECDSA)和P-256曲線以及SHA-256哈希算法對令牌進行加密。

爲確保安全,APN需要定期生成新的令牌。新的令牌具有在聲明密鑰處發佈的更新,其值指示令牌生成的時間。如果令牌問題的時間戳不在最後一小時內,APN拒絕後續推送消息,返回ExpiredProviderToken(403)錯誤。

+0

我以前已經發布了我的推送密鑰,所以當我進入有問題的頁面時,我可以下載證書,但它沒有告訴我密鑰ID。有沒有辦法在不發佈新密鑰的情況下檢索它? – Shiro

+0

@Shiro是的,如果您進入開發人員門戶並轉到「證書,標識符和配置文件」,則可以從證書列表中選擇「APNS身份驗證密鑰」(最後一項)。在那裏你會看到你的密鑰,你可以獲得你的密鑰ID,重新下載私鑰並撤銷現有的密鑰。 – Paulw11

+0

謝謝!它沒有列出該部分中的任何鍵,這是否意味着我需要創建一個?我以前已經配置了配置密鑰和推送認證密鑰 – Shiro