賬戶授權管理

1、前言

本文只包括通用流程概括,不涉及具體操作流程;

國內的頭條、騰訊等基本都是 Oauth2.0 授權模式;

授權管理大致流程

  1. 申請開發者應用;
  2. 準備跳轉鏈接,獲取授權的 auth_code;
  3. 通過auth_code獲取令牌( access_token、refresh_token) 等;
  4. 定時刷新令牌;

引用巨量引擎(頭條)的授權流程圖

image

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平臺兩個接口:

  1. 生成授權跳轉鏈接;
  2. 接收授權後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、獲取/刷新令牌

令牌、以及刷新令牌都是有時間限制,一般獲取的時候,會返回有效時間;需要寫腳本定時刷新;

  1. 根據上面的授權碼, 調用媒體的接口,獲取令牌;
  2. 判斷授權類型,如果是管家賬戶,則再調接口獲取旗下所有賬戶;
  3. 獲取每個賬號信息,存入數據庫中;
點擊查看代碼:廣告賬戶管理.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 '廣告賬戶管理';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章