如何生成 JWT 以用于 Swift 应用程序的 API 身份验证

2024-03-23

我正在尝试实现 API 服务的使用,该服务需要对其所有 API 调用进行 JWT 身份验证。

我了解 JWT 令牌是什么以及它们的使用方式,我的问题是我正在编写一个 Swift 应用程序,但无法完全弄清楚生成令牌的过程,以便我可以将其附加为Bearer在我的 API 调用中。

  • 我可以在客户端(swift 应用程序)生成 JWT 令牌吗?
  • 创建一个 Google Cloud Function 来生成令牌然后写回 Firebase 在我的 API 调用中使用?

以下是如何使用 Apple 的 CryptoKit 在 Swift 中制作 JSON Web 令牌。它使用默认示例https://jwt.io https://jwt.io

import CryptoKit

extension Data {
    func urlSafeBase64EncodedString() -> String {
        return base64EncodedString()
            .replacingOccurrences(of: "+", with: "-")
            .replacingOccurrences(of: "/", with: "_")
            .replacingOccurrences(of: "=", with: "")
    }
}

struct Header: Encodable {
    let alg = "HS256"
    let typ = "JWT"
}

struct Payload: Encodable {
    let sub = "1234567890"
    let name = "John Doe"
    let iat = 1516239022
}

let secret = "your-256-bit-secret"
let privateKey = SymmetricKey(data: Data(secret.utf8))

let headerJSONData = try! JSONEncoder().encode(Header())
let headerBase64String = headerJSONData.urlSafeBase64EncodedString()

let payloadJSONData = try! JSONEncoder().encode(Payload())
let payloadBase64String = payloadJSONData.urlSafeBase64EncodedString()

let toSign = Data((headerBase64String + "." + payloadBase64String).utf8)

let signature = HMAC<SHA256>.authenticationCode(for: toSign, using: privateKey)
let signatureBase64String = Data(signature).urlSafeBase64EncodedString()

let token = [headerBase64String, payloadBase64String, signatureBase64String].joined(separator: ".")
print(token) // eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成 JWT 以用于 Swift 应用程序的 API 身份验证 的相关文章

  • UIButton 上的圆形渐变边框

    您好 我一直在尝试在我的应用程序中实现一个 UIButton 它具有圆角和渐变边框 我使用以下代码在按钮上创建渐变边框 let gradient CAGradientLayer gradient frame CGRect origin CG
  • IBDesignable 和 UITableViewCell

    我正在尝试利用 XCode 6 中 Swift 的 IBDesignable 功能来创建 UITableViewCell 的子类 我在 WWDC 演示和网络上看到 您可以使用框架来创建视图 UIView 的子类 然后可以将其用于自定义 UI
  • 如何使用自定义布局跳转到 UICollectionView 中的任何 Cell?

    我的水平 UICollectionView 中有 40 个单元格和一个按钮 当我点击按钮时 我可以从 5 号单元格跳转到 10 号单元格 但是一旦我想要转到另一个单元格 例如从 5 到 25 它不起作用 而是变为 0 code func s
  • Swift 5 MacOS 图像调整大小内存问题

    我是使用 Swift 进行 Mac OS 应用程序开发的新手 但我尝试制作简单的 ImageResizer 应用程序 我必须调整 50k 图像的大小 10个小时后 内存已增加到近120GB 我以为 Swift 也有垃圾收集器 为什么它可以增
  • 如何在 Swift 编程中获得基于导航的模板功能

    我的项目需要一个导航控制器 并且我的应用程序最初有一个社交登录 一旦验证通过 用户将被推送到另一个视图 我在其中显示一个具有 2 个选项卡的选项卡控制器 我不知道如何在 Swift 编程中做到这一点 我已将视图控制器嵌入到导航控制器中 一旦
  • AVPlayerLooper 每次迭代后黑闪

    我正在使用 Apple 的示例代码在UICollectionViewCell背景 我在用着AVPlayerLooper 因为它是同一视频的迭代 我的问题是 当视频结束时 它会显示轻微的黑屏闪烁 也许它正在将视频搜索到0时间 我不确定 这是代
  • Firebase HTTP 云函数 HTTP 错误代码 403

    自 2020 年 3 月 28 日起 我的所有 HTTP 云函数都出现错误 在我上次更新之前 它们运行良好 我只更改了一些内容 在上次部署后我收到了此错误 h1 Error Forbidden h1 h2 Your client does
  • 在 swift 中从本地视频创建缩略图

    如何从本地视频文件快速创建缩略图 例如 如果视频文件路径位于此处 file Users Dev Library Developer CoreSimulator Devices F33222DF D8F0 448B A127 C5B03C64
  • 使用 Swift 3 和 Realm 同步 Apple Watch 和 iPhone

    我需要从 Apple Watch 和 iPhone 显示和修改我的数据结构 数据库 我目前正在使用一个简单的领域结构 其中有一个对象 A 和一个可以容纳大量 A 的对象 B 因此 在 iPhone 上 用户可以创建 B 并添加 A 当然还可
  • Swift 错误:无法从 AST 上下文获取模块“My_App”

    我正在使用 Swift 3 Xcode 8 1 CocoaPods 1 1 1 运行后pod update 每次我尝试使用 Xcode 的 lldb 控制台时 它都会打印错误 例如 po self输出 共享 Swift 状态My App已出
  • 在 ARKit 和 RealityKit 中使用 Raycast 的真正好处是什么?

    RealityKit 和 ARKit 中的光线投射有何用途 我什么时候需要使用makeRaycast查询 https developer apple com documentation realitykit arview 3255315 m
  • 快速布尔运算

    这实在令人困惑 有人有什么想法吗 let viewHasMovedToRight false initially I want this to be false then func moveViewToRight sender UIButt
  • OSX Swift 在默认浏览器中打开 URL

    如何使用 Swift 作为编程语言和 OSX 作为平台在系统默认浏览器中打开 URL 我发现了很多UIApplication like UIApplication sharedApplication openURL NSURL string
  • 使用 iOS swift AVPlayer 在横向模式下不全屏

    我将视频视图设置为全屏 然而 在模拟器中玩时 它并没有全屏运行 此问题仅适用于 iPad 不适用于 iPhone 这是我的代码 override func viewDidAppear animated Bool super viewDidA
  • iOS 视频压缩 Swift iOS 8 损坏的视频文件

    我正在尝试压缩用户相机从 UIImagePickerController 拍摄的视频 不是现有视频 而是动态视频 以上传到我的服务器 并花费少量时间来完成此操作 因此较小的尺寸是理想的选择 而不是 30 较新质量的相机为 45 mb 这是在
  • 使用 Metal 高效计算 UIImage/CIImage 中有多少透明像素

    我们可以计算有多少个透明像素的最快方法是什么CIImage UIImage 例如 如果我们谈论效率 我的第一个想法是使用Metal Kernel使用任一CIColorKernel左右 但我不明白如何使用它来输出 计数 我还有其他想法 使用某
  • 如何在 PHP 中使用 RS256 签署 X.509 证书?无法获取有效指纹...x5t

    我已经实现了 JWT 令牌生成器库Here https github com F21 jwt blob master JWT JWT php 并且我能够获得 RS256 令牌 有效负载 但我对标题数据有疑问 我需要一个标头值 x5t 该标头
  • 如何在 swift 中以编程方式使用坐标打开地图应用程序?

    我想在地图应用程序中打开纬度和经度 我尝试了这段代码HERE https stackoverflow com questions 12504294 programmatically open maps app in ios 6 func g
  • ExpandableLabel iOS 中的“少看”

    我正在使用第三方库可扩展标签 https github com apploft ExpandableLabel实施一个see more特征 我正在寻找仅快速的解决方案 其中包含标签中的文本而不是按钮中的文本 因此这可以完美地工作 添加库并更
  • UIApplication.shared.delegate 相当于 SceneDelegate xcode11?

    我在 SceneDelegate 中定义了一个 let 属性 我希望一些 ViewController 能够在场景中访问它 在 UIKit 中 我可以像这样访问 App Delegate 属性 UIApplication shared de

随机推荐

  • JSONP 与 Jquery 1.9 和 Jersey 2.5.1

    我用谷歌搜索了很多 但没有找到适合我需求的东西 我发现了这些类似的线程here https stackoverflow com questions 5359224 parsererror after jquery ajax request
  • 从 setup.py 中检测 python 包安装路径

    安装后 我想对安装创建的一些配置和数据文件进行软链接 如何确定从包的 setup py 中安装的新包文件的位置 我最初对路径 usr local lib python2 7 dist packages 进行了硬编码 但当我尝试使用虚拟环境时
  • Windows 上带有 c 的 128 位整数?

    Windows 上有没有能够本地使用 128 位整数的 C 编译器 例如 您可以在 Linux 上使用 gcc 并使用 uint128 t 在 Windows 上还有其他机会吗 如果 128 位也能在 32 位计算机上运行那就太好了 D M
  • PHP 应用程序中是否可能有太多函数?

    PHP 应用程序是否可以拥有太多功能 执行大量PHP函数是否会占用内存和资源 我正在开发的 WordPress 主题有很多功能 当我完成时可能超过 100 个 我担心我可能有太多功能 即使许多功能会导致更多的内存消耗 我还是建议您使用它们
  • WebStorm 2018.1.4 + ESLint:TypeError:this.CliEngine 不是构造函数

    我的配置是这样的 WebStorm 2018 1 4 ESLint 6 4 节点12 8 npm 6 10 2 Windows 8 1 如何消除帖子标题中的错误 这是一个代码示例 import GET DAILY SUCCESS GET H
  • 如何在 Apache PDfBox 中设置页面缩放选项

    在我的应用程序中 我使用 Apache PDFBox 来渲染 PDF 文件并进行静默打印 PDFBox 可以很好地渲染 PFD 但我遇到了问题scaling来到图片上 这里我想在打印PDF之前设置页面缩放 在 acrobat reader
  • 如何在 Next.js 中从服务器获取 HOC 中的数据?

    我使用 Next js 创建了新应用程序9 3 1 在带有 SSR 的旧应用程序中 我可以使用getInitialProps函数在 HOC 组件中 而不是在页面中 因此我可以从 HOC 组件中的服务器和页面中获取数据 像这样https gi
  • woocommerce 获取属性值列表

    我在 WordPress 上使用 woocommerce 创建一个简单的商店网站 并为产品添加了几个属性 这些是 size and color 根据尺码 我有多种值 包括小号 中号和大号 与颜色相同 即 红色 蓝色 绿色 我想要做的是在下拉
  • 在 Sass 中编写一个以 1 以外的值递增的循环

    在 SASS 中 循环的写法如下 for i from 1 through 100 stuff 这将产生 1 2 3 4 一直到 100 如何让循环以两个单位为间隔进行 for i from 1 through 100 step 2 stu
  • JavaFX 8 WebEngine:如何在 java 中将 console.log() 从 javascript 获取到 System.out?

    我使用 JavaFX 和 JavaFX WebEngine 中的 javascript 引擎来开发应用程序 我想从 javascript 获得反馈以进行调试 WebEngine 内的控制台输出会发生什么情况 有什么方法可以访问它 或者重定向
  • 如何在android中比较已知时间和当前时间?

    我正在尝试使用开始时间和结束时间 并计算当前时间的百分比 在开始时间和结束时间之间 例如 如果现在时间为 12 00 startHour 11 00 End Hour 14 00 则应返回 33 四舍五入 因为已经过去了 33 的时间 我已
  • mvvmcross 可扩展列表视图

    我只是想知道 ExpandableListViews 的功能或类似于 ExpandableListViews 的功能是否潜伏在 Mvvmmcross 框架内 或者这种类型的控件不适用于多平台要求 该功能位于http deapsquatter
  • Clojure 开发:IDE 还是 REPL?

    我已经使用 Clojure 一段时间了 想要创建一些比玩具更大 更复杂的项目 过去几年我一直在使用 Java 并且已经习惯了 IDE 为我所做的事情 编译大量类 将它们打包在 jar 中 创建批处理文件供用户启动它们 当我查看 Clojur
  • 从节目/列表中抛出 404

    我像这样查询视图 db design myviewname view foo key 22ABC123 22 结果如下 total rows 3 offset 3 rows 都好 由于没有找到文档 我想从节目或列表中抛出 404 那可能吗
  • 无法使用 JavaScript Promise 读取未定义的属性“then”

    我明白乍一看这可能看起来像重复的 但我已经看到了所有告诉我要退货的答案 但这不起作用 这是我的功能 function removePastUsersFromArray pullAllUsersFromDB then function use
  • 在 C# 中处理非常大的整数

    有谁知道我可以在 C 中计算非常大的整数的方法 我正在尝试计算数字的阶乘 例如 5 5 4 3 2 1 120 对于小数字 这不是问题 但尝试计算 unsigned int 的最大值 4 294 967 295 的阶乘似乎是不可能的 我已经
  • 移动还是不移动右值引用限定方法?

    在以下 C 11 代码中 应首选哪种 return 语句构造 include
  • Ant 邮件任务 - 发送带附件的邮件时出现问题

    当我尝试使用 ant 邮件任务时 它在发送带有附件的邮件时似乎不起作用 我当前面临的问题是 它在电子邮件正文中发送附件内容 而不是作为附件 即使详细输出显示为 它也是通过附件发送的 由于最初它抱怨缺少 jars 我添加了 mail jar
  • 在 WinForms 中保留对控件的全局引用以访问 GUI 线程

    这个问题有一点历史 请耐心听我说 In this https stackoverflow com questions 192980 boiler plate code replacement is there anything bad ab
  • 如何生成 JWT 以用于 Swift 应用程序的 API 身份验证

    我正在尝试实现 API 服务的使用 该服务需要对其所有 API 调用进行 JWT 身份验证 我了解 JWT 令牌是什么以及它们的使用方式 我的问题是我正在编写一个 Swift 应用程序 但无法完全弄清楚生成令牌的过程 以便我可以将其附加为B