企业微信身份验证

本篇主要是在上一篇获取第三方凭证基础上,用户通过三方网站自定义授权登录后获取用户信息,以实现用户绑定登录功能。

构造第三方应用授权链接

如果第三方应用需要在打开的网页里面携带用户的身份信息,

第一步需要构造如下的链接来获取授权code。

请求方式

GET

请求地址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数说明

参数

必须

说明

appid

第三方应用id(即ww或wx开头的suite_id)。注意与企业的网页授权登录不同

redirect_uri

授权后重定向的回调链接地址,请使用urlencode对链接进行处理 ,注意域名需要设置为第三方应用的可信域名

response_type

返回类型,此时固定为:code

scope

应用授权作用域。

snsapi_base:静默授权,可获取成员的基础信息(UserId与DeviceId);

snsapi_privateinfo:手动授权,可获取成员的详细信息,包含头像、二维码等敏感信息。

state

重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值,长度不可超过128个字节

#wechat_redirect

固定内容

企业员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,第三方应用可根据code参数获得企业员工的corpid与userid。code长度最大为512字节。

权限说明

使用snsapi_privateinfo的scope时,第三方应用必须有“成员敏感信息授权”的权限。

服务层业务代码

设置一个参数就是应用的SuiteId。这里的回调地址需要前端传递过来,因为是测试所以写一个固定的。返回一个网址需要在手机端企业微信中点击触发。

具体代码如下:

/**
 * 构建企业微信授权链接
 * @param $backUrl
 */
public function getCompanyWxOauth()
{
	$backUrl = 'https://www.test.net/api/test';

    $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=三方应用suiteID&redirect_uri={$backUrl}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";
	echo "<a href='{$url}'>点击</a>";
}

开通调用许可

在企业微信手机端点击链接后,提示需要开通【接口调用许可】。

解决方式

首先账号需要是测试企业,并且测试企业加入到测试企业列表中。

【应用管理】->【购买接口许可】企业微信接口许可 【购买】

 需要添加企业客户ID,也就是之前企业授权安装获取的corpid。

这时候发现就变成0元可以购买了,购买后就可以访问了。

scope的特殊情况

当oauth2中appid=corpid时,scope为snsapi_userinfo或snsapi_privateinfo时,必须填agentid参数,否则系统会视为snsapi_base,不会返回敏感信息。

第三方服务商配置scope为snsapi_privateinfo时,agentid所对应的应用必须有“成员敏感信息授权”的权限。

“成员敏感信息授权”的开启方法为:登录服务商管理后台->标准应用服务->本地应用->进入应用->点击基本信息栏“编辑”按钮->勾选"成员敏感信息"。

获取访问用户身份

 

请求方式

GET


请求地址

https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token=SUITE_ACCESS_TOKEN&code=CODE

参数说明

参数

必须

说明

suite_access_token

第三方应用凭证:suite_access_token

code

通过成员授权获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

业务处理

通过上篇《企业微信获取第三方凭证》得到三方凭证也就是suite_access_token和授权链接得到的code,可用来获取访问用户身份信息。

具体代码如下:

/**
 * 获取企业微信 suite_access_token
 * @return array|mixed
 */
public function companyAccessToken()
{
    $url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token";
    $params = json([
        'suite_id' => '三方应用的suitId',
        'suite_secret' => '三方应用Secret',
        'suite_ticket' => 'redis存储的回调解析得到的ticket'
    ]);
    $info = $this->linkCurl($url, 'POST', $params);
    $res = djson($info);
    if (isset($res['errcode'])) {
        return toFail('error', $res);
    }
    return toSuccess('success', [
        'access_token' => $suite_access_token
   ]);
}


/**
 * 获取企业微信用户信息
 * @param $code
 * @return array|mixed
 */
public function getWxUserInfo($code)
{
    if (empty($code)) {
        return toFail('请输入code参数!');
    }
       $get_access_token = $this->companyAccessToken();
        if ($get_access_token['status'] != 1) {
        return $get_access_token;
    }
    $access_token = $get_access_token['data']['access_token'];
    $url = "https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token={$access_token}&code={$code}";
    $info = $this->linkCurl($url, 'GET');
	print_r($info);die;
  }

返回内容

返回的是通过请求授权链接,经过用户允许后获取基本用户信息。

{
    "errcode":0,
    "errmsg":"ok",
    "corpid":"ww0d127fa51eaab",
    "userid":"YuanLaiShiNi",
    "parents":[],
    "open_userid":"woxL4YTwAAvAGu3mLUy8dkchzW"
}

返回参数说明

参数

说明

errcode

返回码

errmsg

对返回码的文本描述内容

corpid

用户所属企业的corpid

userid

用户在企业内的UserID,如果该企业与第三方应用没有授权关系时,返回密文UserId,有授权关系时,按照升级后的ID策略返回明文或密文

user_ticket

成员票据,最大为512字节。
scope为snsapi_userinfo或snsapi_privateinfo,且用户在应用可见范围之内时返回此参数。
后续利用该参数可以获取用户信息或敏感信息,参见"第三方使用user_ticket获取成员详情"

expires_in

user_ticket的有效时间(秒),随user_ticket一起返回

open_userid

全局唯一。对于同一个服务商,不同应用获取到企业内同一个成员的open_userid是相同的,最多64个字节。仅第三方应用可获取

总结

本篇主要是在上一篇获取第三方凭证基础上,用户通过三方网站自定义授权登录后获取用户信息,以实现用户绑定登录功能。

<think> 嗯,用户这次想了解企业微信身份二次验证的设置方法、作用及流程。根据之前的引用内容,我需要整合相关信息给出清晰解答。 用户可能正在配置企业微信的安全验证功能,作为管理员需要了解具体操作。从引用[1]看,二次验证的核心是设置一个验证页面URL,当员工收到绑定消息后跳转到该页面完成验证。引用[3]则提供了关键的技术实现细节:通过code参数调用oauth2接口获取userid。 让我先梳理作用部分:二次验证主要解决身份真实性确认问题,防止非授权人员绑定企业账号。这既符合企业级安全要求(引用[2]提到的SOC2认证),又能连接微信生态。特别要注意的是,只有未绑定微信的员工才会触发该流程。 设置方法上需要分三步走:首先是后台配置验证页面URL,这是硬性要求;其次是开发验证接口处理code参数;最后是调用企业微信API完成验证闭环。技术难点在于正确处理oauth2流程,尤其是安全获取suite_access_token(引用[3]的代码片段很关键)。 流程设计上员工端很简洁:收到消息→点击跳转→企业验证→自动生效。但企业后台需要做完整链路开发,包括接收参数、交换用户信息、标记验证状态等。这里要提醒用户注意state参数的安全校验,防止CSRF攻击。 考虑到用户可能继续深入技术实现,我预先准备了三个延伸方向:接口开发细节(如token管理)、常见错误处理(如code过期)、结合微信生态的应用场景。特别是错误处理部分,实践中经常遇到code失效问题,需要提示用户设计重定向机制。 最后检查所有技术点是否都有引用支撑:URL配置对应引用[1],oauth2流程对应引用[3],安全认证对应引用[2]。确保每个操作步骤都有依据,避免主观推测。 </think>以下是企业微信身份二次验证的设置方法、作用及流程详解,综合引用资料说明: --- ### **一、二次验证的核心作用** 1. **身份安全确认** 确保绑定企业微信的员工身份真实性,防止非授权人员接入企业通讯录(引用[1])。 2. **合规性要求** 满足企业级安全审计标准(如SOC2 Type2),是微信生态企业应用的安全基础(引用[2])。 3. **自动化账号激活** 验证后自动同步组织架构权限,无需手动审批(引用[3])。 --- ### **二、设置方法(管理员端)** #### **步骤1:开启二次验证** - 登录企业微信管理后台 →「我的企业」→「安全与保密」→ 启用「二次验证」 - **必填项**:企业验证页面URL(如`https://yourdomain.com/auth`)(引用[1]) #### **步骤2:开发验证接口** 需实现以下功能(引用[3]): ```python # 示例伪代码 def verify_employee(code): # 调用企业微信API换取userid api_url = f"https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token=TOKEN&code={code}" response = requests.get(api_url) userid = response.json()['userid'] # 获取员工唯一标识 # 企业自有验证逻辑(如数据库比对) if check_in_database(userid): return "验证成功" # 返回验证结果页面 ``` #### **步骤3:配置安全回调** - 在验证URL页面处理参数:`code=CODE&state=STATE`(引用[1]) - 通过`code`换取`userid`需使用**服务商凭证**(suite_access_token)(引用[3]) --- ### **三、员工验证流程** ```mermaid sequenceDiagram 员工->>企业微信: 收到绑定成功通知(带验证链接) 员工->>企业服务器: 点击链接跳转验证页?code=XXX 企业服务器->>企业微信API: 用code换取userid 企业微信API-->>企业服务器: 返回userid 企业服务器->>内部系统: 校验userid有效性 内部系统-->>员工: 显示“验证成功/失败”页面 ``` --- ### **四、关键注意事项** 1. **URL强制要求** 验证页面必须支持HTTPS,且域名需在企业微信后台备案(引用[1])。 2. **Code时效性** 获取的`code`有效期仅5分钟,需快速完成验证(引用[3])。 3. **权限隔离** 未验证员工无法查看同事信息或使用OA功能(引用[2])。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值