禅道与企业微信集成单点登录

背景

公司使用企业微信做为办公管理系统。为了公司人事相关研发系统统一授权认证,实现业务系统账号与企业微信挂钩,做到统一管理授权,以此才有了禅道与企业微信集成单点登录研究。

集成步骤

集成步骤大致分为三个部分:

一、企业微信创建配置应用

首先登录企业微信管理,后在“我的企业》企业信息”中获取企业ID
在这里插入图片描述
其次在应用管理中创建应用,获取AgentId、Secret等应用接口授权信息。配置可见范围、管理员、及应用主页地址。应用主页地址为禅道sso.php的访问地址。
在这里插入图片描述
以及配置开发者接口启用配置开发者接口可信域名,企业微信授权登录授权回调域,及企业可信IP
在这里插入图片描述

二、禅道配置第三方应用免密登录

详细配置见官方文档禅道配置第三方应用免密登录

三、禅道配置更新集成登录代码

在禅道的安装目录(例如:/data/zentao/zentaopms/www/)下创建sso.php文件,复制以下代码至sso.php中,并根据一、二点获取的相关信息以下配置内容:

	define('CORPID', "企业ID");
	define('AGENTID', "应用ID");
	define('CORPSECRET', "应用Secret");
	define('ZENTAO_PREURL', "禅道应用跟地址(例如:https://www.zentao.net)");
	define('ZENTAO_CODE', "禅道第三方应用代号");
	define('ZENTAO_SECRET', "禅道第三方应用秘钥");

禅道集成登录项目代码如下:

<?php

	error_reporting(1);
	define('IN_SYS', true);
	
	define('CORPID', "企业ID");
	define('AGENTID', "应用ID");
	define('CORPSECRET', "应用Secret");
	define('ZENTAO_PREURL', "禅道应用跟地址(例如:https://www.zentao.net)");
	define('ZENTAO_CODE', "禅道第三方应用代号");
	define('ZENTAO_SECRET', "禅道第三方应用秘钥");

	function HTTPGET($url){
        //初始化
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 120);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        //执行请求
        $content = curl_exec($ch);
        curl_close($ch);
        $content = is_json($content) ? json_decode($content,true) : $content;
        return $content;
    }

	function HTTPPOST($url, $parm){
		//初始化
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_TIMEOUT, 120);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
		curl_setopt($ch, CURLOPT_POST, 1);

		$json_data = json_encode($parm);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
	
		//执行请求
		$content = curl_exec($ch);
		curl_close($ch);
		$content = is_json($content) ? json_decode($content,true) : $content;
		return $content;
	}

	function is_json($string) {
    	json_decode($string);
    	return (json_last_error() == JSON_ERROR_NONE);
	}


	$code = $_GET["code"];

	if($code == null || $code == "" ) {
		$oauthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . CORPID . "&redirect_uri=" . ZENTAO_PREURL . "/sso.php&response_type=code&scope=snsapi_privateinfo&agentid=".AGENTID."&state=".AGENTID."#wechat_redirect";
		header("Location:" . $oauthUrl);
		exit;
	}

	//获取Token	
	$resJson = HTTPGET("https://qyapi.weixin.qq.com/cgi-bin/gettoken?".http_build_query(
		array('corpid'=> CORPID,'corpsecret'=> CORPSECRET))
	);
	$accessToken = $resJson["access_token"];

	//获取用户身份票据
	$resJson = HTTPGET("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?".http_build_query(
		array('access_token' => $accessToken,'code' => $code))
	);
	$user_ticket = $resJson["user_ticket"];
	$userid = $resJson["userid"];
	if($userid == null) {
		$userid = "nobody";
	}
	$resJson = HTTPPOST("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=".$accessToken, array(
		'user_ticket' => $user_ticket
	));

	$account = $userid;
	$email = $resJson["email"];
	if($email != null && $email != "" ) {
		$account = str_replace(".", "", explode("@", $email)[0]);
	}

	$code  = ZENTAO_CODE;
	$key   = ZENTAO_SECRET;
	$time  = time();
	$token = md5($code . $key . $time);

	$ssoUrl = ZENTAO_PREURL . "/api.php?m=user&f=apilogin&account=".$account."&code=".$code."&time=".$time."&token=".$token;
	header("Location:" . $ssoUrl);
	exit;

成果截图

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
根据提供的引用内容,实现企业微信扫码登录需要以下步骤: 1. 在企业微信后台创建应用: - 登录企业微信后台,点击左侧菜单的“应用管理”。 - 点击“创建应用”,填写应用名称、Logo等信息。 - 在“应用可见范围”中选择需要访问应用的部门或成员。 - 在“权限管理”中选择需要的权限,例如获取成员信息、获取部门信息等。 - 点击“创建”完成应用的创建。 2. 获取应用的AgentId和Secret: - 在应用列表中找到刚创建的应用,点击进入应用详情页。 - 在详情页中可以找到AgentId和Secret,这些信息将在后续的开发中使用。 3. 在禅道中实现企业微信扫码登录: - 在禅道的登录页面中添加企业微信扫码登录的入口。 - 当用户点击企业微信扫码登录时,生成一个随机的state参数,并将其保存在session中。 - 生成企业微信扫码登录的URL,包括应用的AgentId、重定向URL和state参数。 - 将用户重定向到生成的URL,用户将在企业微信中扫描二维码并确认登录。 - 企业微信将用户重定向回重定向URL,并附带code和state参数。 - 在重定向URL的处理逻辑中,验证state参数是否与之前保存的一致。 - 使用code参数调用企业微信的接口,获取用户的openid和access_token。 - 根据openid和access_token,可以获取用户的详细信息,例如姓名、头像等。 - 根据用户的信息,在禅道中创建或更新用户的账号信息。 - 将用户登录到禅道,完成企业微信扫码登录的过程。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值