SwiftyOAuth 2.0

SwiftyOAuth 2.0

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最后发布2019年11月
SPM支持 SPM

Damien Delba 维护。



  • Damien

Travis Status CocoaPods compatible Carthage compatible

SwiftyOAuth 是一个 小巧 的 OAuth 库,内置了一系列提供程序和方便的 API,以便添加您自己的提供程序。

let instagram: Provider = .instagram(clientID: "***", redirectURL: "foo://callback")

instagram.authorize { result in
    print(result) // success(Token(accessToken: "abc123"))
}

使用提供程序安装许可协议

使用

提供程序

Provider.swift

步骤 1:创建一个提供程序

使用您定义的自定义 URL 方案初始化提供程序

// Provider using the server-side (explicit) flow

let provider = Provider(
    clientID:     "***",
    clientSecret: "***",
    authorizeURL: "https://example.com/authorize",
    tokenURL:     "https://example.com/authorize/token",
    redirectURL:  "foo://callback"
)

// Provider using the client-side (implicit) flow

let provider = Provider(
    clientID:     "***",
    authorizeURL: "https://example.com/authorize",
    redirectURL:  "foo://callback"
)

// Provider using the client-credentials flow

let provider = Provider(
    clientID:     "***",
    clientSecret: "***"
)

或者,您可以使用内置的提供程序之一

let github = .gitHub(
    clientID:     "***",
    clientSecret: "***",
    redirectURL:  "foo://callback"
)

可选地设置 statescopes 属性

github.state  = "asdfjkl;" // An random string used to protect against CSRF attacks.
github.scopes = ["user", "repo"]

如果提供程序不支持自定义 URL 方案作为重定向 URL,请使用 WKWebView

let provider = Provider(
    clientID:     "***",
    clientSecret: "***",
    authorizeURL: "https://example.com/authorize",
    tokenURL:     "https://example.com/authorize/token",
    redirectURL:  "https://an-arbitrary-redirect-url/redirect"
)

provider.useWebView = true

使用 additionalAuthRequestParamsadditionalTokenRequestParams 分别定义授权请求或令牌请求的附加参数

github.additionalAuthRequestParams["allow_signup"] = "false"
步骤 2:处理传入请求

在您的 AppDelegate 中处理传入的请求

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    github.handleURL(url, options: options)

    return true
}
步骤 3:请求授权

最后,请求授权。SwiftyOAuth将显示一个SFSafariViewController(iOS 9)或打开移动Safari。

github.authorize { (result: Result<Token, Error>) -> Void in
    switch result {
    case .success(let token): print(token)
    case .failure(let error): print(error)
    }
}

如果提供商提供了一个可过期token,您可能希望刷新它。

let uber: Provider = .uber(
    clientID: "***",
    clientSecret: "***",
    redirectURL: "foo://callback/uber"
)

// uber.token!.isExpired => true

uber.refreshToken { result in
    switch result {
    case .success(let token): print(token)
    case .failure(let error): print(error)
    }
}

令牌

Token.swift

access_tokentoken_typescopes和与过期相关的信息作为Token属性可用

token.accessToken // abc123
token.tokenType   // .Bearer
token.scopes      // ["user", "repo"]

token.expiresIn // 123
token.isExpired // false
token.isValid   // true

此外,您可以通过dictionary属性访问所有令牌数据

token.dictionary // ["access_token": "abc123", "token_type": "bearer", "scope": "user repo"]

令牌存储

每个Token都通过一个遵守TokenStore协议的对象进行存储和检索。

该库目前支持以下TokenStore

provider.tokenStore = Keychain.shared

Keychain:在使用此TokenStore之前,请确保已启用Keychain Sharing功能。

provider.tokenStore = UserDefault.standard

UserDefaults:默认的TokenStore。信息在本地保存,并在适当初始化的情况下保存在您的App Group中。

provider.tokenStore = NSUbiquitousKeyValueStore.default

NSUbiquitousKeyValueStore:信息保存在iCloud Key Value Store中。在使用此TokenStore之前,请确保您的项目已经按照此处所述正确配置。

错误

Error.swift

错误是一个符合ErrorType协议的枚举。

  • cancel 用户通过关闭网页浏览器窗口取消授权过程。

  • applicationSuspended 您设置的OAuth应用程序已挂起。

  • redirectURIMismatch 提供的 redirectURL 与您在应用程序中注册的不匹配。

  • accessDenied 用户拒绝访问您的应用程序。

  • invalidClient 您传递的 clientID 和或 clientSecret 是错误的。

  • invalidGrant 您传递的验证码是错误的、已过期,或与授权过程中第一次请求收到的验证码不匹配。

  • other 应用程序以 {"error": "xxx", "error_description": "yyy"} 的形式发出了响应,但 SwiftyOAuth 没有为其提供枚举。数据可在相关值中找到。

  • unknown 应用程序发出的响应既不是成功响应({"access_token": "xxx"} 等)的形式,也不是失败响应({"error": "xxx"} 等)的形式。数据可在相关值中找到。

  • nsError 在进行网络请求或解析 JSON 时触发的错误。数据可在相关值中找到。

服务提供商

服务提供商/

查看 维基页面 获取更多信息!

安装

Carthage

Carthage 是一个去中心化的依赖管理器,它自动处理将框架添加到您的 Cocoa 应用程序的过程。

您可以使用以下命令通过 Homebrew 安装 Carthage

$ brew update
$ brew install carthage

要使用 Carthage 将 SwiftyOAuth 集成到您的 Xcode 项目中,请在其 Cartfile 中指定它

github "delba/SwiftyOAuth" >= 1.1

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。

您可以使用以下命令安装它

$ gem install cocoapods

要使用 CocoaPods 将 SwiftyOAuth 集成到您的 Xcode 项目中,请在其 Podfile 中指定它

use_frameworks!

pod 'SwiftyOAuth', '~> 1.1'

许可

版权所有 (c) 2016-2019 Damien (http://delba.io)

在此特此授予任何获得本软件及其相关文档(“软件”)副本的任何人不受限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向软件提供的人士行使其权利,但受以下条件的约束

上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何形式的保证,明示或暗示,包括但不限于对适销性、特定用途适用性和版权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,不论是因为合同、侵权或其他方式引起的,包括但不限于使用或因使用软件或与软件的使用或其他交易而导致的损害。