Authing 文档文档
快速开始
概念
使用指南
开发集成 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
快速开始
概念
使用指南
开发集成 arrow
  • V2 文档
  • V3 文档
元数据
应用集成
身份自动化
加入 APN
开发集成
多租户(内测版)
控制台文档
多租户控制台
租户控制台
Saas 应用 Demo
旧版
  • 单页 Web 应用

  • 移动、客户端应用

    • Android

    • C#

    • Flutter

    • iOS

      • 快速开始
      • 托管页
      • 超组件

      • APIs

        • 核心认证 API
        • 标准协议 API
        • 多因素认证 API
        • 扫码认证 API
        • 工具类 API
      • 社会化登录

      • 典型场景

      • 私有化部署
    • React Native
  • 标准 Web 应用

  • 框架集成

  • 其他

  1. 开发集成
  2. /
  3. 移动、客户端应用
  4. /
  5. iOS
  6. /
  7. APIs
  8. /
  9. 标准协议 API

¶ 标准协议 API

更新时间: 2025-06-11 08:01:00
编辑

¶ OIDC

OpenID Connect 简称 OIDC,是 OAuth 2.0 的一个扩展,主要增加了语义化的用户信息字段。

¶ 初始化

OIDCClient 会自动获取控制台默认回调,如需要自定义 scope, redirect_uri 等参数,可传入自定义 AuthReuest。

示例

let authRequest = AuthRequest()
authRequest.scope = "openid"
OIDCClient(authRequest).loginByAccount(account: account, password: password) { code,  message,  userInfo in
    //userInfo
}

¶ 邮箱密码注册

使用 OIDC 邮箱注册帐号,邮箱不区分大小写且用户池内唯一。此接口不要求用户对邮箱进行验证,用户注册之后 emailVerified 字段会为 false 。

func registerByEmail(email: String, password: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • email 邮箱
  • password 明文密码

示例

OIDCClient().registerByEmail(email: "me@gmail.com", password: "strong") { code, message, userInfo in
    if (code == 200) {
        // userInfo:用户信息
    }
}

错误码

  • 2003 非法邮箱地址
  • 2026 邮箱已注册

¶ 邮箱验证码注册

使用 OIDC 邮箱验证码,邮箱不区分大小写且用户池内唯一。调用此接口之前,需要先调用 发送邮件 (opens new window) 接口以获取邮箱验证码

func registerByEmailCode(email: String, code: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • email 邮箱
  • password 明文密码

示例

OIDCClient().registerByEmailCode(email: "me@gmail.com", code: "code") { code, message, userInfo in
    if (code == 200) {
        // userInfo:用户信息
    }
}

错误码

  • 2003 非法邮箱地址
  • 2026 邮箱已注册

¶ 用户名注册

通过 OIDC 用户名注册帐号。用户名区分大小写且用户池内唯一。

func registerByUserName(username: String, password: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • username 用户名
  • password 明文密码

示例

OIDCClient().registerByUserName(username: "username", password: "strong") { code, message, userInfo in
    if (code == 200) {
        // userInfo:用户信息
    }
}

错误码

  • 2026 用户名已存在

¶ 短信验证码注册

通过 OIDC 手机号和短信验证码注册帐号。手机号需要在用户池内唯一。调用此接口之前,需要先调用 发送短信验证码 (opens new window) 接口以获取短信验证码

func registerByPhoneCode(phone: String, code: String, password: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • phone 手机号
  • code 短信验证码
  • password 明文密码

示例

OIDCClient().registerByPhoneCode(phone: "188xxxx8888", code: "1234", password: "strong") { code, message, userInfo in
    if (code == 200) {
        // userInfo:用户信息
    }
}

错误码

  • 2001 验证码错误
  • 2026 手机号已注册

¶ 账号密码登录

通过 OIDC 账号密码登录,返回的 UserInfo 里面包含 access token , id token 和 refresh token。

func loginByAccount(account: String, password: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • account 账号
  • password 密码

示例

OIDCClient().loginByAccount(account: account, password: password) { code,  message,  userInfo in
    print("\(userInfo?.accessToken ?? "")")
    print("\(userInfo?.idToken ?? "")")
    print("\(userInfo?.refreshToken ?? "")")
}

¶ 手机号验证码登录

通过 OIDC 手机号验证码登录,需要先调用 发送短信验证码 (opens new window) 接口。返回的 UserInfo 里面包含 access token , id token 和 refresh token。

func loginByPhoneCode(phone: String, code: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • phone 手机号
  • code 验证码

示例

OIDCClient().loginByPhoneCode(phone: phone, code: code) { code, message, userInfo in
    print("\(userInfo?.accessToken ?? "")")
    print("\(userInfo?.idToken ?? "")")
    print("\(userInfo?.refreshToken ?? "")")
}

¶ 邮箱验证码登录

使用 OIDC 邮箱验证码登录,邮箱不区分大小写且用户池内唯一。调用此接口之前,需要先调用 发送邮件 (opens new window) 接口以获取邮箱验证码

func loginByEmail(email: String, code: String, completion: @escaping(Int, String?, UserInfo?) -> Void) 

参数

  • email 邮箱
  • code 验证码

示例

OIDCClient().loginByEmail(phone: phone, code: code) { code, message, userInfo in
    print("\(userInfo?.accessToken ?? "")")
    print("\(userInfo?.idToken ?? "")")
    print("\(userInfo?.refreshToken ?? "")")
}

¶ 微信授权码登录

func loginByWechat(_ code: String, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • code 微信授权码

示例

OIDCClient().loginByWechat(authCode) { code, message, userInfo in
    if (code == 200) {
        // userInfo:用户信息
    }
}

¶ 获取用户信息

通过 access token 获取用户信息。返回的 userInfo 对像和参数传入的是同一个 userInfo 对象

func getUserInfoByAccessToken(userInfo: UserInfo?, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • userInfo 包含 access token 的用户信息

示例

OIDCClient().getUserInfoByAccessToken(userInfo: userInfo) { code, message, data in
    if (code == 200) {
        // data 为更新了用户信息的 UserInfo 对象,和参数是同一个对象
    }
}

¶ 通过 refresh token 获取新的 access token 和 id token

access token 的有效期通常较短,比如几个小时或者 1 天。当 access token 过期后,App 不能频繁的弹出登录界面让用户认证,那样体验比较糟糕。所以通常的做法是通过代码,用一个有效期比较长的 refresh token 去刷新 access token,从而保持登录状态。只有当 refresh token 过期才弹出登录界面。

func getNewAccessTokenByRefreshToken(userInfo: UserInfo?, completion: @escaping(Int, String?, UserInfo?) -> Void)

参数

  • refreshToken 刷新凭证。注意登录 URL 里面的参数配置,请参考 “生成 OIDC 协议的用户登录链接”

示例

OIDCClient().getNewAccessTokenByRefreshToken(userInfo: userInfo) { code, message, userInfo in
    print("\(userInfo?.accessToken ?? "")")
    print("\(userInfo?.idToken ?? "")")
    print("\(userInfo?.refreshToken ?? "")")
}

注意,每次调用会得到新的 refresh token


上一篇: 核心认证 API 下一篇: 多因素认证 API
  • OIDC

用户身份管理

集成第三方登录
手机号闪验 (opens new window)
通用登录表单组件
自定义认证流程

企业内部管理

单点登录
多因素认证
权限管理

开发者

开发文档
框架集成
博客 (opens new window)
GitHub (opens new window)
社区用户中心 (opens new window)

公司

400 888 2106
sales@authing.cn
北京市朝阳区北辰世纪中心 B 座 16 层(总)
成都市高新区天府五街 200 号 1 号楼 B 区 4 楼 406 室(分)

京ICP备19051205号

beian京公网安备 11010802035968号

© 北京蒸汽记忆科技有限公司