sequencing-oauth-api-objc 2.0.5

sequencing-oauth-api-objc 2.0.5

测试测试过
语言语言 Obj-CObjective C
协议 MIT
发布最后发布2017年3月

Bogdan LaukhinAlex Moskvin维护。



  • Sequencing

此仓库包含用于在您的Objective-C iOS应用程序中实现Sequencing.com的OAuth2身份验证的CocoaPod插件代码,这样您的应用程序就可以安全地访问Sequencing.com的 API和应用程序链。

内容

  • 身份验证流程
  • CocoaPod集成
  • 资源
  • 维护者
  • 贡献

身份验证流程

Sequencing.com使用标准OAuth方法,允许应用程序从第三方应用中无密码暴露用户密码的方式,以有限的权限访问HTTP服务上的用户账户。OAuth作为最终用户的代表,向服务提供授权令牌,以授权共享特定账户信息。

Authentication sequence diagram

步骤

步骤1:授权代码链接

首先,用户通过点击授权代码链接打开了web页面

https://sequencing.com/oauth2/authorize?redirect_uri=REDIRECT_URL&response_type=code&state=STATE&client_id=CLIENT_ID&scope=SCOPES

以下是链接组件的解释

  • https://sequencing.com/oauth2/authorize - API授权端点
  • redirect_uri=REDIRECT_URL - 服务授予授权代码后将用户代理重定向到此处
  • response_type=code - 指定您的应用程序正在请求授权代码授权
  • state=STATE - 包含将被与服务器回答中的相同代码进行比较的随机验证码,以便验证响应是否被欺骗
  • client_id=CLIENT_ID - 应用程序客户端ID(API如何识别应用程序)
  • scope=CODES指定应用程序请求的访问级别

login dialog

步骤2:用户授权应用程序

用户必须首先登录到服务,以验证其身份(除非他们已经登录)。然后,服务将提示用户授权或拒绝应用程序访问他们的账户。以下是一个授权应用程序提示示例

grant dialog

步骤3:应用程序收到授权代码

当用户点击“授权应用”时,服务将打开在授权请求期间指定的 redirect_URI 网址。在 iOS 应用程序中使用了以下 redirect_uri

authapp://Default/Authcallback

一旦你的应用程序检测到 redirect_uri 页面已经打开,它应该分析服务器的响应与状态验证码。如果状态验证码与在授权请求中发送的相匹配,那么意味着服务器的响应是有效的。现在我们可以从服务器响应中获取授权码。

第 4 步:应用请求访问令牌

应用程序通过将授权码(如上所述从服务器响应中获取)以及认证详情(包括客户端密钥)传递给 API 令牌端点来请求访问令牌。以下是对 Sequencing.com 令牌端点的示例 POST 请求

https://sequencing.com/oauth2/token

以下 POST 参数需要发送

  • grant_type='authorization_code'
  • code=AUTHORIZATION_CODE(其中 AUTHORIZATION_CODE 是从 sequencing.com 重定向的结果中获取的“code”参数中的代码)
  • redirect_uri=REDIRECT_URL(其中 REDIRECT_URL 与第 1 步中使用的 URL 相同)

第 5 步:应用接收访问令牌

如果授权是有效的,API 将向应用程序发送一个包含令牌对象的 JSON 响应。令牌对象包含 accessToken、其 expirationDate、tokenType、scope 和 refreshToken。

CocoaPod 集成

如果你想在现有项目或新项目中安装和使用 OAuth 逻辑和文件选择器逻辑,请遵循以下说明。

  • 在 Xcode 中创建一个新的项目

  • 安装 pod

    • 参见 CocoaPods 指南
    • 在项目目录中创建 Podfile: $ pod init
    • 在 Podfile 中指定 "sequencing-oauth-api-objc" pod 参数

      pod 'sequencing-oauth-api-objc', '~> 2.0.4’

    • 在你的项目中安装依赖项: $ pod install

    • 始终打开 Xcode 工作区而不是项目文件: $ open *.xcworkspace
  • 添加应用程序传输安全设置

    • 打开项目设置 > 信息选项卡
    • 添加 App Transport Security Settings 行参数(作为字典)
    • 在 App Transport Security Settings 参数中添加子行作为 Exception Domains 字典参数
    • 在 Exception Domains 参数中添加子行,值为 “sequencing.com”
    • 在 App Transport Security Settings 参数中添加子行,值为 Allow Arbitrary Loads布尔值
    • 将 Allow Arbitrary Loads 布尔值设置为 YES

    sample files

  • 注册应用程序参数和代理

    • 添加导入

      #import "SQOAuth.h"
      #import "SQToken.h"
      #import "SQAuthorizationProtocol.h"
      
    • 订阅你的类以使用授权协议

      <SQAuthorizationProtocol>
      
    • 通过 shared instance 方法访问 SQOAuth

      [SQOAuth sharedInstance]
      
    • 注册你的应用程序参数和代理

      - (void)registerApplicationParametersCliendID:(NSString *)client_id
                               clientSecret:(NSString *)client_secret
                                redirectUri:(NSString *)redirect_uri
                                      scope:(NSString *)scope
                                   delegate:(UIViewController<SQAuthorizationProtocol> *)delegate;                                     
      

      其中

      client_id - your app CLIENT_ID
      client_secret - your app CLIENT_SECRET
      redirect_uri - your app REDIRECT_URI
      scope - your app SCOPE
      delegate - UIViewController instance that conform to "SQAuthorizationProtocol" protocol
      
  • 使用授权方法

    • 实现 SQAuthorizationProtocol 中的方法

      - (void)userIsSuccessfullyAuthorized:(SQToken *)token
      
      - (void)userIsNotAuthorized
      
      - (void)userDidCancelAuthorization
      
    • 你可以通过 authorizeUser 方法授权用户

      [[SQOAuth sharedInstance] authorizeUser];
      
    • userIsSuccessfullyAuthorized 方法中,你将收到包含以下 5 个具有清晰标题的属性的 SQToken 对象

      NSString *accessToken
      NSDate   *expirationDate
      NSString *tokenType
      NSString *scope
      NSString *refreshToken
      
  • 访问最新的令牌

    • 要接收最新的令牌,请使用 SQOAuth API 中的 token: 方法(它返回更新后的令牌): [[SQOAuth sharedInstance] token:^(SQToken *token) {}];
  • 注册新账户/重置密码方法

    • 只需调用 callRegisterResetAccountFlow 方法即可 - 它将打开对话框弹出窗口 [[SQOAuth sharedInstance] callRegisterResetAccountFlow];

资源

维护者

此仓库由 Sequencing.com 积极维护。如需更多信息或仅仅打招呼,请联系 Sequencing.com 生物信息学团队[email protected]

贡献

我们鼓励您积极地进行分支合并。如果您有兴趣更新主分支,请发送给我们一个Pull Request。如果您的更改贡献积极,我们将继续使用。