[PHP] 實現oauth下的單點登陸


整體流程是 ,參照騰訊企業郵的對外開放API , 傳遞client_id + client_secret就可以獲取到access_token , 拿着access_token+ 用戶的標識 , 去請求一個登陸地址 , 獲取到登陸地址直接跳轉過去就能登陸成功 

 

1. 首先在管理后台 , 申請生成自己的client_id  +  client_secret

重置秘鑰 , 停用秘鑰都會使當前企業的舊秘鑰和access_token失效

 

 

 

2. 通過自定義規則生成簽名串

獲取所有get傳遞的參數值 , 使用字典序排序 , 拼接在一起 ,拼接上自己的秘鑰進行sha1加密 , 作為GET參數signature

<?php
//從企管后台獲取到以下參數
$client_secret="af0c7c2ac7b5687d6c4ed5e6a2a7e058780c1aac";
$client_id="appdev.sinanet.com";
//生成簽名
$_GET['grant_type']='client_credentials';
$_GET['client_id']=$client_id;
$_GET['ts']=time();//秒數時間戳
$args = array_values($_GET);
sort($args, SORT_STRING);
$args = implode($args);
$sign = sha1($args . $client_secret);
$_GET['signature']=$sign;

//最終傳遞的GET參數
var_dump($_GET);

3. 獲取access_token接口

重新獲取token會使舊的token失效

GET /openapi/token?

grant_type=client_credentials&

client_id=appdev.sinanet.com&

ts=1587628159&

signature=ad90ca4f8395c679243c4264bd2159dd59a0f82b  

{
    "result": true,
    "errno": 0,
    "msg": "",
    "data": {
        "access_token": "e3ea1a05893f5906893a37c51e4458bdb7361794",
        "expire_in": 7200
    }
}

4. 通過access_token + 用戶標識 獲取本企業內的員工登陸地址 , 登陸地址是一次性的 , 過期時間300秒

GET /openapi/get_login_url?

access_token=e3ea1a05893f5906893a37c51e4458bdb7361794&

email=shihan2@xxxxx.com 

{
    "result": true,
    "errno": 0,
    "msg": "",
    "data": {
        "login_url": "http://xxx/cgi/openapi_login.php?ts=1587628586&authKey=7883171fa07d5a149ef5f8e4fd401c925286c2cf&email=shihan2@xxx.com",
        "expire_in": 300
    }
}

5.直接往登陸地址上跳 , 記錄cookie session等身份信息 , 再跳到真正的系統  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM