AppauthWrapper 0.2.0

AppauthWrapper 0.2.0

Somendra 维护。



AppauthWrapper

CI Status Version License Platform

AppauthWrapper 是一个 AppAuth 扩展框架,用于减少 appauth 代码,直接提供登录和登出简短方法,无需管理 AppAuth 框架直接管理的认证代码。一些 AppauthWrapper 的特性:

  1. 您可以直接访问登录和登出方法。
  2. 您可以通过 AppAuth 状态访问刷新令牌。
  3. 您可以通过 API 调用获取刷新令牌,并通过应用程序认证状态访问 API。
  4. 此包装器将管理您的 AppAuth 状态,保存和删除您的令牌。

示例

要运行示例项目,请首先从 GitHub 上克隆仓库,然后在示例目录中运行 pod install

要求

iOS 9.0 或更高版本 Swift 4.2

安装

AppauthWrapper 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行即可。

pod 'AppauthWrapper','~> 0.1.0'

使用方法

导入框架 AppauthWrapper,并在 AppDelegate 中编写此代码

import AppauthWrapper
import AppAuth

  var currentAuthorizationFlow: OIDExternalUserAgentSession?
  var objAppAuth: AppAuth?
 
  func application(_ app: UIApplication,
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        
        if let authorizationFlow = self.currentAuthorizationFlow,
            authorizationFlow.resumeExternalUserAgentFlow(with: url) {
            self.currentAuthorizationFlow = nil
            return true
        }
        // Your additional URL handling (if any)
        
        return false
    }
...

创建一个常量文件,并写入这些变量

let clientID                   = ""
let clientSecret               = ""
let redirectURI                = ""
let authorization_scope        = ""
let registration_endpoint_uri  = ""
let user_info_endpoint_uri     = ""

let issuer                     = ""
let authorizationEndpoint      = ""
let tokenEndpoint              = ""
let endSessionPointsURL        = ""

在调用登录方法之前,您必须初始化 AppAuth 类,您可以在 AppDelegate 中进行初始化,或者如果您想进行更多优化,您可以在登录之前编写

(UIApplication.shared.delegate as! AppDelegate).objAppAuth = AppAuth(
            clientID,
            clientSecret,
            redirectURI,
            authorization_scope,
            registration_endpoint_uri,
            user_info_endpoint_uri,
            issuer,
            authorizationEndpoint,
            tokenEndpoint,
            endSessionPointsURL
 )

您可以使用登录和登出如下所示

登录

 appDelegate.app?.signIn(self, { (bool) in
   if bool {

   }
 }, { (session) in
  appDelegate.currentAuthorizationFlow = session
 }, { (statusCode,error) in
            print(statusCode ?? 0,error)
 })

登出

appDelegate.app?.signOut({ (bool) in
  if bool {
    
  }
}, { (statusCode,error) in
    print(statusCode ?? 0,error)
})

对于刷新令牌和 accessToken,您可以使用如下所示

AppAuth.authState?.lastTokenResponse?.refreshToken
AppAuth.authState?.lastTokenResponse?.accessToken

参考资料

https://github.com/openid/AppAuth-iOS.

https://developer.forgerock.com/docs/platform/how-tos/implementing-oauth-20-authorization-code-grant-protected-pkce-appauth-sdk-ios.

https://www.raywenderlich.com/243-oauth-2-0-with-swift-tutorial.

作者

Somendra Yadav, [email protected]

许可

AppauthWrapper 在 MIT 许可下可用。更多信息请参阅 LICENSE 文件。