账户授权管理

1、前言

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

国内的头条、腾讯等基本都是 Oauth2.0 授权模式;

参考地址:
巨量引擎(头条):https://open.oceanengine.com/labels/7/docs/1696710502277120
广点通(腾讯):https://developers.e.qq.com/docs/api/authorize?version=1.3&_preview=1
磁力引擎(快手):https://developers.e.kuaishou.com/docs?docType=DSP&documentId=2070

授权管理大致流程

  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、获取/刷新令牌

令牌、以及刷新令牌都是有时间限制,一般获取的时候,会返回有效时间;需要写脚本定时刷新;

按照 refresh_token 进行批量获取与更新;SQL: update xxx set xxx where refresh_token = xxx

  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 '广告账户管理';
posted @ 2023-05-27 17:11  蜗牛噢  阅读(248)  评论(0编辑  收藏  举报