1、前言
本文只包括通用流程概括,不涉及具體操作流程;
國內的頭條、騰訊等基本都是 Oauth2.0 授權模式;
授權管理大致流程
- 申請開發者應用;
- 準備跳轉鏈接,獲取授權的 auth_code;
- 通過auth_code獲取令牌( access_token、refresh_token) 等;
- 定時刷新令牌;
引用巨量引擎(頭條)的授權流程圖
2、申請開發者應用
大多數情況下,申請一個通用的開發者應用接受其他不同主體的授權;對於部分需要特殊操作的賬戶,則另外申請應用然後授權;
開發者應用所屬主體優劣對比:
》第三方主體:
- 優勢:只需申請一次開發者應用,可以同時管理多個公司(主體)的賬號;
- 劣勢:不支持部分涉及敏感操作接口(如頭條抖音評論操作、視頻素材的url等);
》同廣告主賬戶主體:
- 優勢:基本所有接口都可操作;
- 劣勢:如果有多個公司(主體)則需要逐個去申請開發者應用;
對於不同媒體、不同主體,開發者應用管理也是需要考慮的問題,可以考慮存進數據庫中:
點擊查看代碼:開發者應用管理表.sql
CREATE TABLE `mk`.`develop_app` (
`id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
`media_id` VARCHAR(30) NOT NULL COMMENT '媒體ID:toutiao=頭條、gdt=廣點通',
`company` VARCHAR(50) NOT NULL COMMENT '所屬公司/主體',
`app_id` VARCHAR(100) NOT NULL COMMENT '應用ID',
`app_secret` VARCHAR(100) NOT NULL COMMENT '應用密鑰',
`app_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '應用名稱',
`scop` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '授權範圍',
`remark` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '備註'
`uptime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(`id`),
UNIQUE KEY (`media_id`, `company`, `app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '開發者應用表';
3、跳轉/回調鏈接
基本操作流程:MK平臺點擊授權按鈕 -> 跳轉服務器生成鏈接並重定向到媒體授權頁面 -> 進行授權並確認,帶上auth_code並跳轉回調鏈接 -> 獲取令牌等;
這裏主要涉及自建MK平臺兩個接口:
- 生成授權跳轉鏈接;
- 接收授權後code回調接口;
一般授權要考慮:媒體和主體,如果多個應用也可以直接指定,所以前端鏈接,可以如下:
https://xxx.com/auth/link?media_id=xxx&company=xxx&app_id=xxx
獲取對應應用信息,生成跳轉url,在重定向即可(下面用頭條的舉例),redirect_uri 需要填入我們的回調地址,接受code信息
https://open.oceanengine.com/audit/oauth.html?app_id=XXX&state=xxx&scope=xxx&redirect_uri=xxx
回調地址(這個地址需要提前設計好,申請應用的時候需要填入),auth_code 爲媒體回調的附加參數
https://xxx.com/auth/token?media_id=xxx&company=xxx&auth_code=xxx
拿到授權碼之後就可以獲取令牌了
4、獲取/刷新令牌
令牌、以及刷新令牌都是有時間限制,一般獲取的時候,會返回有效時間;需要寫腳本定時刷新;
- 根據上面的授權碼, 調用媒體的接口,獲取令牌;
- 判斷授權類型,如果是管家賬戶,則再調接口獲取旗下所有賬戶;
- 獲取每個賬號信息,存入數據庫中;
點擊查看代碼:廣告賬戶管理.sql
CREATE TABLE `mk`.`ad_users` (
`id` INT(11) unsigned NOT NULL AUTO_INCREMENT,
`media_id` VARCHAR(30) NOT NULL COMMENT '媒體ID:toutiao=頭條、gdt=廣點通',
`company` VARCHAR(50) NOT NULL COMMENT '所屬公司/主體',
`advertiser_id` VARCHAR(100) NOT NULL COMMENT '賬戶ID',
`advertiser_name` VARCHAR(100) NOT NULL COMMENT '賬戶名',
`access_token` VARCHAR(250) NOT NULL COMMENT '令牌access_token',
`refresh_token` VARCHAR(250) NOT NULL COMMENT '刷新令牌refresh_token',
`access_token_expires_in` INT(11) DEFAULT 0 COMMENT 'access_token過期時間',
`refresh_token_expires_in` INT(11) DEFAULT 0 COMMENT ' refresh_token過期時間',
`remark` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '備註'
`uptime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(`id`),
UNIQUE KEY (`media_id`, `company`, `advertiser_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '廣告賬戶管理';