Authing 知识库
🛠 开发资源🥂 集成案例🔭 常见问题🖥 控制台
3.0.0
3.0.0
  • 欢迎
  • Authing 概述
  • 快速开始
    • 注册 Authing 开发者账号
    • 第一个应用
    • 基础概念
    • 实现单点登录
    • 控制台概览
    • 部署模型和价格
    • 最佳开发实践
    • 我该如何选择 Authing 的技术
  • 进阶指南
    • 理解认证和授权
      • 用户名 - 密码认证
      • 邮箱 - 密码认证
      • 手机 - 验证码认证
      • JWT Token 释义及使用
    • 验证 Token
    • 配置用户权限
    • 迁移老数据进 Authing
    • 错误代码
  • 认证
    • 接入 OAuth 2.0
      • 创建 OAuth 应用
      • 使用 OAuth 授权
    • 接入 OpenID Connect
      • 创建 OIDC 应用
      • 使用 OIDC 授权
      • 理解 OIDC 流程
      • OIDC 常见问题
    • 接入 SAML
      • 创建 SAML Identity Provider 应用
      • 创建 SAML Service Provider 应用
      • 理解 SAML 流程
      • 同时使用 Authing 作为 SP 和 IdP
      • 使用 SAML Identity Provider
        • 在阿里云访问管理中使用
        • 在腾讯云访问管理中使用
        • 在 Auth0 中使用
      • 使用 SAML Service Provider
        • 与 Auth0 SAML IdP 对接
        • 与 SSOCircle SAML IdP 对接
    • 接入 LDAP
      • 配置 LDAP 服务
      • 使用 Authing 的 LDAP 用户目录
    • 接入 Active Directory
  • 社会化登录
    • 接入 Web 端社会化登录
      • GitHub 登录
      • 微信 PC 扫码登录
      • 微信 APP 内网页登录
      • 企业微信(第三方应用)网页授权登录
      • 企业微信(第三方应用)扫码登录
      • 企业微信(企业内部)扫码登录
      • 新浪微博登录
      • 钉钉登录
      • QQ 登录
      • 配置登录授权 Scope
    • 接入移动端社会化登录
      • 微信登录
      • 支付宝登录
    • 接入小程序登录
      • 小程序登录
        • 用户登录凭证(code)最佳实践
      • APP 拉起小程序登录
    • 打通微信账号体系
  • 扫码登录
    • 小程序扫码登录
      • 接入私有化小程序
    • APP 扫码登录
      • 快速接入
      • Web 端 SDK
      • 完整接口列表
      • 自定义配置项
      • 扫码登录原理
  • 移动应用登录
    • 移动应用 SSO
      • 自动检测登录
      • 唤起 App 登录
    • 移动应用身份提供商
  • 授权
    • Authorization 基础概念
      • 什么是基于角色的管理(RBAC)
      • 什么是基于属性的管理(ABAC)
      • 什么是零信任网络
    • Authorization at Authing
    • 接入 RBAC
    • 接入 ABAC
    • 接入组织机构管理
  • 扩展能力
    • 自定义认证流程(Pipeline)
      • 创建你的第一个 Pipeline 函数
      • Pipeline 函数开发指南
      • 应用场景
      • user 对象
      • context 对象
      • 使用环境变量
      • 可用的 Node Modules
      • 如何调试
      • Node SDK
      • GraphQL API
      • 常见问题
      • 私有化部署
    • 使用 Webhook
    • 自定义用户字段
  • 开发资源
    • 开发资源
    • API(GraphQL)
    • Guard for Web
      • 自定义 Guard 的 UI 样式
    • Guard for Mobile
      • Guard for React Native
    • Guard VS 自定义 UI
    • SDK for 单点登录
    • SDK for JavaScript
      • 查询用户权限
      • 绑定社会化登录
      • 自定义用户字段
      • 管理 MFA 口令
      • 自定义请求链接
    • SDK for Node.js
      • 权限控制
      • 查询用户权限
      • 组织机构管理
      • 老版权限控制(deprecated)
      • Pipeline 函数
      • 自定义用户字段
      • 绑定社会化登录
      • 管理 MFA 口令
      • 自定义请求连接
    • SDK for React Native
    • SDK for 微信小程序
    • SDK for Java
    • SDK for Objective-C
    • SDK for Python
    • SDK for Go
    • SDK for PHP
    • 函数计算(FaaS)
  • 通信
    • 邮件
    • SMS
  • MFA
    • 配置 MFA 安全口令
      • 使用 Microsoft Authenticator 添加 MFA 令牌
    • 接入 MFA
  • 安全
    • 配置 Web 安全域
    • 配置用户池密码强度
    • 配置密码加密函数
  • 其他
    • 常见问题
    • 集成案例
      • Authing 与 AWS 集成案例
      • 函数计算与 AaaS 集成案例
      • Odoo 集成案例
      • 社会化登录集成案例
    • 社交互联数据
    • 为 Authing 贡献 SDK
      • 了解 Authing 的模块
Powered by GitBook
On this page
  • 准备工作
  • 配置 iOS Universal Links
  • 在 Authing 控制台配置微信移动应用信息
  • 正式接入
  • 接入 WechatOpenSDK
  • 发起登录请求
  • 接收微信回调数据获取 code
  • 换取用户信息
  • 完成接入

Was this helpful?

  1. 社会化登录
  2. 接入移动端社会化登录

微信登录

Previous接入移动端社会化登录Next支付宝登录

Last updated 5 years ago

Was this helpful?

此社会化登录方式提供 GitHub Demo :

示例 Demo :

准备工作

你一共需要准备以下内容:

  1. Authing 开发者账号

  2. 在 Authing 控制台填入微信移动应用信息

配置 iOS Universal Links

配置 apple-app-site-association 文件

在 Apple Developer 控制台 Membership 页面找到自己的 Team ID:

在 Xcode Targets -> Signing & Capabilities 中找到 Bundle Identifier:

接下来创建 apple-app-site-association 文件:

假设你的 Team ID 为 xxxxxxx, Bundle Identifier 为 com.example.exampleApp, 设置 Universal Link 的 Path 为/native/*, 则 apple-app-site-association 如下:

假设你的 Team ID 为 xxxxxxx, Bundle Identifier 为 com.example.exampleApp, 设置 Universal Link 的 Path 为/native/*, 则 apple-app-site-association 如下:

{
	"applinks": {
		"apps": [],
		"details": [
			{
				"appIDs": [ "xxxxxxx.com.example.exampleApp" ],
				"paths": [ "/native/*" ]
			}
		]
	}
}

你需要将此文件部署到你的域名的 .well-known/apple-app-site-association 链接下,如你的域名为 example.com,则需要通过 https://example.com/.well-known/apple-app-site-association 访问到该文件。以下几点需要注意:

  • 必须使用 https

  • apple-app-site-association 需要是一个合法的 JSON 文件,但是没有 .json 后缀。

  • content-type 需要设置为 application/json

  • paths 请使用 * 通配符,微信要求。

以下是一个 nginx 配置示例:(这里将 apple-app-site-association 文件放与某个 .well-known 文件夹下)

server {
  listen 80;
  listen 443 ssl;

  server_name authing.cn;

  ssl_certificate /mnt/cerm/client/1_authing.cn_bundle.crt;
  ssl_certificate_key /mnt/cerm/client/2_authing.cn.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;


  location /.well-known {
    alias /path/to/your/.well-known/folder;
    try_files $uri $uri/ =404;
  }
}

在 Xcode 中配置 Associated Domains

加下来在 Xcode 中配置 Associated Domains。 在 Xcode Targets -> Signing & Capabilities 页面点击右上角的 +Capability :

选择 Associated Domains:

假设你的域名是 example.com, 则填入 applinks:example.com :

验证 Universal Links 是否生效

假设你的域名为 example.com,Path 为 /native/*在手机上安装了你的 App 之后,使用 Safari 浏览器访问 https://example.com/native/,网上拉动网页,你应该能看到你的 App:

再访问 https://example.com/native/xxx,依旧可以看到。

在微信开放平台填写 Universal Links

在 Authing 控制台配置微信移动应用信息

在 Authing 控制台 用户池 -> 第三方登录 -> 社会化登录 页面找到“移动端社会化登录“中的“微信移动应用“:

填入你的移动应用 AppID 和 AppSecret:

AppID 和 AppSecret 可在微信开放平台 管理中心 - 移动应用 - 应用详情 页面看到:

正式接入

接入 WechatOpenSDK

发起登录请求

成功接入 SDK 之后,你应该能成功打开微信获取用户授权并获取到 authorization code:

下面是发起微信登录请求代码示例( Swift):

func loginByWechat() {
    let req = SendAuthReq()
    req.scope = "snsapi_userinfo" //获取用户信息
    req.state = "123" //随机值即可,这里用时间戳
    WXApi.send(req)
}

你可以在 AppDelegate 或 SceneDelegate 的 onResp 方法获取到授权码 code, 如下图所示:

接收微信回调数据获取 code

下面是一个示例代码(Swift 语言):

func onResp(_ resp: BaseResp) {
    
    debugPrint(resp)
    
    // 微信登录请求信息
    if resp.isKind(of: SendAuthResp.self) {
        if resp.errCode == 0 && resp.type == 0{
            let response = resp as! SendAuthResp
            
            // 微信 authorication_code
            let code = response.code
            debugPrint("code: " ,code)
        }
    }
}

换取用户信息

用户同意收取获取到 code 之后,需要调用 Authing 的接口获取用户信息:

GET https://oauth.authing.cn/oauth/wechatmobile/auth/:userPoolId

使用 code 换取用户信息。

Path Parameters

Name
Type
Description

userPoolId

string

用户池 ID

Query Parameters

Name
Type
Description

country

string

微信返回给 APP 的 country

lang

string

微信返回给 APP 的 lang

state

string

微信返回给 APP 的 state

code

string

微信返回给 APP 的 code

{
  emailVerified: false,
  username: '廖长江',
  nickname: '廖长江',
  company: '',
  photo: 'https://usercontents.authing.cn/avatar-5e53ee0684197a42d319628b-1582558729878',
  loginsCount: 28,
  registerMethod: 'oauth:wechatmobile',
  blocked: false,
  isDeleted: false,
  oauth: '{"openid":"osJ4Ys7kderNmGP7qgjIiNSLPm94","nickname":"廖长江","sex":1,"language":"en","city":"海淀","province":"北京","country":"中国","headimgurl":"http://thirdwx.qlogo.cn/mmopen/vi_32/Z6XlHHTohpQQMqUjDsWibCaRH6RZiafrbibBEVzffMp7Co2kGbUmfo9ln80tOPYv9RRGJIvhv7OKrwncssxOod3xQ/132","privilege":[],"unionid":"o0pqE6Fbr5M-exSu_PeL_sjwN44U"}',
  metadata: '""',
  _id: "5e53ee0684197a42d319628b",
  unionid: 'o0pqE6Fbr5M-exSu_PeL_sjwN44U',
  openid: 'osJ4Ys7kderNmGP7qgjIiNSLPm94',
  lastIP: '::ffff:192.168.0.106',
  lastLogin: "2020-02-26T02:53:56.223Z",
  signedUp: "2020-02-24T15:38:46.620Z",
  token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVuaW9uaWQiOiJvMHBxRTZGYnI1TS1leFN1X1BlTF9zandONDRVIiwiaWQiOiI1ZTUzZWUwNjg0MTk3YTQyZDMxOTYyOGIiLCJjbGllbnRJZCI6IjVlNGNkZDA1NWRmM2RmNjVkYzU4Yjk3ZCJ9LCJpYXQiOjE1ODI2ODU2MzYsImV4cCI6MTU4Mzk4MTYzNn0.MHo07ilZl8ovur_B2iSIQ0wSHyMsPP7EOgREVVfPoGM',
  tokenExpiredAt: "2020-03-12T02:53:56.000Z",
  phone: null
}

示例代码(Swift):

func convertToDictionary(text: String) -> [String: Any]? {
    if let data = text.data(using: .utf8) {
        do {
            return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
        } catch {
            print(error.localizedDescription)
        }
    }
    return nil
}

let url = "https://oauth.authing.cn/oauth/wechatmobile/auth/\(UserPoolId)?code=\(code!)"
AF.request(url).responseString { response in
    let resp = convertToDictionary(text: response.value!)!
    
    // Authing 业务状态码, 200 表示成功
    let code = resp["code"]! as! Int
    let message = resp["message"]! as! String
    if code == 200 {
        let dataStr = resp["data"]! as! String
        let data = convertToDictionary(text: dataStr)!
        debugPrint("Data: \(data)")
        updateUserInfoEnvVariable(data: data)
    } else {
        debugPrint("Message: ", message)
    }
}

完成接入

配置 iOS Universal Links (针对 iOS 应用, 需开通 )

从微信 WechatOpenSDK 1.8.6 开始,iOS 移动应用需填写 Universal Links 信息。如果你是要开发 Android 应用或者已经配置好了,可跳过此节。。

此部分请按照指引接入 WechatOpenSDK,如果遇到问题,这里提供一个 Swift Demo App 供开发者参考: .

恭喜你,此时已经接入了微信移动应用登录。获取到用户信息之后,你可以得到登录凭证 token,你可以在后续的 API 请求中携带上此 token, 然后在后端接口中根据此 token 区分不同用户,详情请见。

申请微信移动应用
Apple Developer 账号
Apple 官方文档请见此
微信官方文档
https://github.com/authing/AuthingIOSDemo
https://github.com/authing/AuthingIOSDemo
验证 token