Tag: jwt

使用JSON Web令牌(JWT)构建有效的推送通知

Apple推送通知服务(APN)是Apple设备上所有远程通知的主要亮点。 使用APN,开发人员可以利用该服务来建立参与度并将信息传递给iOS平台上的用户,包括tvOS,macOS和watchOS等其他Apple设备。 使用Apple先前对推送通知服务的更新,您可以使用身份验证令牌安全地连接到APN,以通过HTTP / 2 API发送推送,从而免除了维护有效证书和其他相关任务的压力。 该协议使开发人员轻松构建强大的推送通知。 苹果公司新的基于APN的基于令牌的通信还提供了无状态且快速的通信,这比基于证书的通信要快,因为APN不必验证您的证书或任何其他信息。 此外,您不必总是为每个通知生成新的令牌。 此外,您可以将单个令牌与多个服务器一起使用,以向每个应用程序发送通知。 如果您是iOS开发人员,并且希望与APN实现基于令牌的通信,那么可以像以下几个快速步骤来熟练掌握JWT! 有3个步骤可实现此目的: 从会员中心生成签名密钥。 生成JSON身份验证令牌。 发送推送通知。 从会员中心生成签名密钥 您可以将该密钥用于多个应用程序,并且可以在生产和开发服务器上使用。 要创建签名密钥,请登录会员中心,然后单击“ Keys部分中的“ All ”。 单击右上角的+按钮,为您的密钥命名,然后在“密钥服务”部分中选择APN。 单击继续,将生成您的密钥。 记下Key ID然后从下载选项中下载签名密钥(扩展名为.p8)。 将这两条信息都存储在安全的地方。 您将需要它来生成用于身份验证的JSON令牌。 生成JSON身份验证令牌 APN需要JSON Web令牌才能遵循以下格式: 标头 { “ alg”:“ ES256”, “孩子”:“ ABC123DEFG” } 要求 { “ iss”:“ DEF123GHIJ”, “ iat”:1437179036 } alg (Algorithm):加密算法,当前APN仅支持ES256 kid (密钥ID):我们在上一步中生成的10位数字的密钥ID。 iss (发行人):这是一个10位数字的团队ID,可帮助您开发应用程序。 iat (Issed At):生成令牌时从UTC的纪元开始的秒数。 […]

使用pu.sh从命令行发送iOS推送通知

我一段时间以来一直在大多数应用程序中使用推送通知。 在iOS上,它们是远程通知功能的核心。 它们快速,安全并减少了开发人员为有效地向其应用程序和用户传播信息所需的工作量。 此外,这些天您可以在其中显示丰富而全面的内容。 我在这里写了一篇有关该文章的文章,您会发现它对您自己的应用程序开发很有用,您可能会喜欢阅读。 因此,尽管我对这项技术感到满意,但在某个领域中,我一直发现自己想要并且正在测试它们。 通过这种方式,我的意思是能够多次将它们发送到安装有我的应用程序的特定设备上,并且可以重复多次进行,以便我可以测试,调整和重写其文本和有效负载。 在iOS上测试推送通知 通常,您可能有自己的服务器设置,或者可能使用了许多现有的推送通知服务之一。 所有这些都需要大量时间和精力来启动和运行。 理想情况下,您可能想开始仅使用Mac,iOS设备和零现金(当然不包括为Mac和设备支付的钱)发送通知。 如果您在线上进行了一些研究,您可能会遇到NWPusher,它虽然效果很好,但仅适用于直接从钥匙串读取的证书和密钥的基于证书的身份验证。 它还作为您需要安装的Mac应用程序分发,因此它只能在该平台上运行。 您还需要每年自己生成这些证书,并且每次都是一个多步骤过程。 Shell脚本解决方案 我使用基于令牌的通知,而不是基于证书的通知,它更易于设置和管理。 另外,我没有创建一个用于发送通知的图形应用程序,而是编写了一个bash shell脚本来发送通知。 它称为pu.sh ,位于GitHub上,此处也有完整记录。 同时,您也可以在下面与我联系,以获取更全面的演练。 我还要指出的是,使用Shell脚本解决方案可以确保透明度。 您已经预先确切知道该脚本对您提供的信息有什么作用,即该脚本仅将有效负载发送到APNs服务器。 收集所有先决条件 以下两节是此处官方文档中信息的精简版本。 对于我们的解决方案,我们将使用基于令牌的推送通知,而不是基于证书的推送通知。 基于令牌的APN连接 基于令牌的身份验证比基于证书的通信速度更快,因为它不需要APN来查找与服务器相关的证书。 您可以将同一令牌用于多个提供商服务器,并且您所有公司的应用程序都可以使用一个令牌。 请记住,您必须每小时至少使用签名密钥更新一次令牌。 我们将尽快介绍如何更新您的令牌。 令牌还可以持续任意长的时间。 直到您将其吊销为止,否则每年都必须重新发行和重新分发证书。 获取加密密钥和密钥ID 您需要一个APNs身份验证令牌签名密钥来生成服务器使用的令牌,以便发送推送通知。 您可以从开发人员帐户developer.apple.com上的“ 密钥 ➙ 所有”部分中请求此密钥,如下所示。 继续下一步之后,您将获得: 密钥ID为的10个字符的字符串 。 随时准备使用它。 如果您忘记了它,它仍然可以在开发人员门户中使用。 .p8 文本文件的 签名密钥 。 将此放置在安全的地方。 例如,不要将其保存在源代码存储库中。 如果丢失,它将永远消失,您将不得不撤销它并重新生成它。 如果此密钥以任何方式受到破坏,则可以将其用于向应用程序发送推送通知-因此,如果您怀疑发生了这种情况,请将其撤消并请求一个新密钥。 您已经知道此过程比创建密钥,证书等要简单得多。 获取设备令牌 以下是您的应用程序应用程序委托的方法,带有一些简短的解释性注释,您需要获取设备令牌。 […]

以原生的方式生成JWT

我正在尝试在React Native中生成JWT。 react-native-jwt模块基于Node的jwt-simple 。 它使用react-native-crypto ,它是crypto-browserify一个部分克隆,有一些解决方法可以让crypto在web浏览器之外工作。 问题是randombytes ( react-native-jwt依赖)找不到crypto 。 browser.js : 'use strict' function oldBrowser () { throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') } var crypto = global.crypto || global.msCrypto // GETS SET TO 'UNDEFINED' if (crypto && crypto.getRandomValues) { module.exports = randomBytes […]

在Swift中解码JSON Web Tokens

试图在Swift中解码JWT的有效载荷,并且真的很困难 static func decodePayload(tokenstr: String) { //splitting JWT to extract payload let arr = split(tokenstr) {$0 == "."} //base64 encoded string i want to decode let base64String = arr[1] as String println(base64String) //eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0 //attempting to convert base64 string to nsdata let nsdata: NSData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)) //decoding fails because nsdata unwraps as […]

NSData不会接受有效的base64编码的string

我正在iOS(7)cient端实施JSON Web令牌authentication。 这工作很好。 我的应用程序获得令牌,并可以与他们进行身份validation的调用我的服务器。 现在,我希望我的客户端代码检查令牌的到期date,以便知道何时重新进行身份validation。 检查JWT授权令牌上的到期date很简单。 授权令牌是3个base64编码的JSON blob,由'。'分隔。 – 到期时间戳在中间的blob中,在一个叫做ext的字段中。 从Unix时代开始秒。 所以我的代码看起来像这样: – (NSDate*) expirationDate { if ( !_tokenAppearsValid ) return nil; if ( !_parsedExpirationDate ) { // // Token is three base64 encoded payloads separated by '.' // The payload we want is the middle one, which is a JSON dict, with // 'exp' […]