Swiftpack.co - Colaski/SwAuth as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by Colaski.
Colaski/SwAuth 1.0.3
OAuth 2.0 library using async/await written in Swift.
⭐️ 6
🕓 19 hours ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/Colaski/SwAuth.git", from: "1.0.3")

SwAuth License Version

Codacy Badge Build SPM Platforms Swift

SwAuth is an OAuth 2.0 HTTP request library written in Swift for iOS 15.0+, macOS 12.0+, watchOS 8.0+, and tvOS 15.0+.


  • ☑ Beautiful readable syntax with async/await! Kiss completion handler hell and the closure jungle goodbye!
  • ☑ Supports Authorization Code Grant (RFC 6749/6750), Proof Key for Code Exchange (PKCE) extension for Authorization Code Grant (RFC 7636), and the Device Authorization Grant (RFC 8628).
  • ☑ Support for all Apple device platforms.
  • ☑ Retry errored requests.
  • ☑ Automatically refreshes tokens.
  • ☑ Tokens stored on Keychain and cross-site request forgery mitigation by default.
  • ☑ Easily deal with JSON responses with SwiftyJSON built-in.
  • ☑ Easily integrate with SwiftUI.
  • Complete, meticulous, thorough, documentation.
  • ☑ Errors that are probably, maybe, useful.
  • ☑ Built on SwiftNIO with AsyncHTTPClient.
  • ☑ QR Code for the Device Authorization Flow (tvOS/watchOS).
  • ☑ Sample/Example Apps.


  • Xcode 13+
  • iOS 15.0+ | macOS 12.0+ | watchOS 8.0+ | tvOS 15.0+


Swift Package

Use the Swift Package Manager to add SwAuth to your project! Simply add the package to dependencies in your Package.swift:

// swift-tools-version:5.5
import PackageDescription

let package = Package(
    name: "YourPackageName",
    products: [
        .library(name: "YourPackageName", targets: ["YourPackageName"]),
    dependencies: [
        .package(url: "https://github.com/Colaski/SwAuth.git", from: "1.0.1"),
    targets: [
        .target(name: "YourPackageName", dependencies: ["SwAuth"]),


Select File > Add Packages in Xcode and enter https://github.com/Colaski/SwAuth.git

Xcode should take care of the rest!

Basic Usage

  1. Import SwAuth in files you wish to use it's amazing features:

    import SwAuth
  2. Create an instance of keychain:

    let keychain = Keychain(service: "com.your.bundleID",
                            accessGroup: "appIdentifierPrefix.com.your.bundleID").label("Your App Name")

    SwAuth uses KeychainAccess to make setting up the keychain easy. You can see a full list of options for it here: https://github.com/kishikawakatsumi/KeychainAccess#key-configuration-accessibility-sharing-icloud-sync.

  3. Create an instance of the proper authorization flow for your Web API.

    let keychain = Keychain(service: "com.your.bundleID",
                            accessGroup: "appIdentifierPrefix.com.your.bundleID").label("Your App Name")
    var spotify = PKCEAuthorizationFlow(clientID: "YourClientID",
                                        authorizationEndpoint: URL(string: "https://accounts.spotify.com/authorize")!,
                                        tokenEndpoint: URL(string: "https://accounts.spotify.com/api/token")!,
                                        redirectURI: "someapp://callback",
                                        keychain: keychain,
                                        scopes: "user-follow-modify")
    spotify.additionalRefreshTokenBodyParams = ["client_id": "YourClientID"] // Spotify specifically requires the client ID to be included in the refresh token's body parameters.
  4. Start an ASWebAuthenticationSession like in the example app with the instance's authorization URL:

  5. Pass the callback URL from the ASWebAuthenticationSession into the provided handler method:

    do {
        try await spotify.authorizationResponseHandler(for: callbackURL)
    } catch {
  6. Make an authorized request:

    do {
        // https://developer.spotify.com/documentation/web-api/reference/#/operations/follow-artists-users
        var request = HTTPRequest(endpoint: URL(sting: "https://api.spotify.com/v1/me/following")!)
        request.httpMethod = .PUT
        request.endpointQueryItems = ["type": "artist"]
        request.httpBody = ["ids": ["5K4W6rqBFWDnAN6FQUkS6x"]]
        request.bodyEncoding = .JSON
        // Send an authenticated HTTP request, this one will follow the artist Kanye West on Spotify.
        let json = try await spotify.authenticatedRequest(for: request, numberOfRetries: 2).json()
        // Prints the JSON output
    } catch {

For more information, read my beautiful documentation: https://swauth.netlify.app/documentation/Swauth


Check out CONTRIBUTING.md for information!


SwAuth its self is licensed under the MIT License, however please take notice of the NOTICE file in the root of this repository. Also, make sure to check the respective licenses of this library's dependencies before releasing your project.


Stars: 6
Last commit: 18 hours ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

Version 1.0.0 Release
6 days ago

Initial Release v1.0.0

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics