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.
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.
Start an ASWebAuthenticationSession like in the example app with the instance’s authorization URL:
spotify.authorizationURL
Pass the callback URL from the ASWebAuthenticationSession into the provided handler method:
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
print(json)
} catch {
print(error.localizedDescription)
}
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.
This repository is now archived as my time has become limited and my interest in Apple development has waned.
SwAuth

SwAuth is an OAuth 2.0 HTTP request library written in Swift for iOS 13.0+, macOS 10.15+, watchOS 6.0+, and tvOS 13.0+.
Features
Built-in Support
SwAuth has build in support for some Web API’s with more to come:
Requirements
Installation/Integration
Swift Package
Use the Swift Package Manager to add SwAuth to your project! Simply add the package to dependencies in your
Package.swift
:App
Select
File > Add Packages
in Xcode and enterhttps://github.com/Colaski/SwAuth.git
Xcode should take care of the rest!
Basic Usage
Import SwAuth in files you wish to use it’s amazing features:
Create an instance of keychain:
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.
Create an instance of the proper authorization flow for your Web API.
Start an ASWebAuthenticationSession like in the example app with the instance’s authorization URL:
Pass the callback URL from the ASWebAuthenticationSession into the provided handler method:
Make an authorized request:
For more information, read my beautiful documentation: https://swauth.netlify.app/documentation/Swauth
Contributing
Check out CONTRIBUTING.md for information!
License
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.