Oauth2.0授权
对接 Marketing API的整体流程是什么
如果你要对接巨量引擎Marketing API,整体要经过以下流程:注册为开发者→申请APPID应用→使用授权URL引导广告主完成广告账户授权→使用授权后得到的auth_code换取token→使用token做相关接口调用。
那么在完成开发者注册后,接下来还需要做什么、可能会遇到什么问题、又有什么建议,由于巨量引擎Marketing API的调用和OAuth授权紧密相关,接下来我们将结合授权相关的各个关键点为你做详细介绍。
为什么要授权(简述 OAuth 2.0 模式)
授权采用的是OAuth2.0授权模式,而OAuth2.0是用于REST/APIs的代理授权框架(delegated authorization framework),它基于令牌Token的授权,在无需暴露用户密码的情况下,使应用能获取对用户数据的有限访问权限。这种模式会为开发者的应用颁发一个有时效性的令牌 token,使得第三方应用能够通过该令牌获取相关的资源。平常我们常见的第三方登录就是使用OAuth 2.0 协议的。同样地,当一个开发者要通过API获取某些广告账户的数据时,也需要得到广告账户的授权。
什么是开发者应用(APPID),怎么申请应用
可以将APPID理解为开发者的应用分组,因为一个开发者可能会需要开发多个应用程序,APPID则是帮助开发者更好地实现独立开发和管理,每个APPID都有独立的secret,并且有独立的授权URL,如上方整体流程说明的开发者应用(APPID)需要获得广告账户的授权才能得到对应广告账户的令牌token,通过token从而进行API的调用,这就是APPID的价值。需要注意的是开放平台的APPID和手机应用的appid没有任何关系,只是一个开发者分组的概念,不要弄混。
那么如何申请应用?当注册成为开发者后,在开放平台的APPID管理模块点击【添加应用】,即可进入新建APPID流程,填写好应用名称、描述等信息即可提交应用申请,我们会在1-2个工作日内完成审核,当审核通过后即可继续后续的流程。下面也将对申请APPID过程中可能遇到的疑问,为你做详细的介绍。
提示:如果还未完成开发者认证将无法新建APPID,请先按提示完成开发者认证。
怎么设置回调地址
回调地址是一个用户自定义的链接地址,用户授权完成后,Marketing API会一并将授权相关的信息和state作为参数拼接至该回调地址,并进行跳转。如何设置和接收回调可详细参考回调地址怎么设置和使用
怎么判断需要哪些权限
请结合自身的开发诉求选择需要的权限,可以提前考虑长期的对接目标,申请时一次性勾选所需的权限,例如如果希望拉取报表那么则勾选上「数据报表」权限点,其他同理。结合你的开发者角色(广告主/代理商/第三方)有如下建议:
为你提供以下几种应用场景的权限推荐,对应场景建议至少勾选相应权限点,避免有权限缺失:
授权账号的角色和user的概念及关系
巨量引擎的广告账户体系可以参考下图,***上一层是用户即user的概念,每个user下可以管理多个不同类型的账户,有两类账户类型——纵横组织、代理商。代理商和纵横组织在账户关系上可以理解为广告主账户(adv)的“集合/分组”概念,代理商和管家下会绑定多个不同的adv。
API的授权同样是基于这个账号关系进行。例如下面是广告主点击某APPID授权url后看到的界面,梦一座城(12345678906)就是登录的用户(即user),这个user下管理的所有账户都将显示出来,用户可选择希望授权的广告账户,点击同意就意味着将勾选的账户及对应权限授权给了应用(APPID),授权后开发者可用对应的token通过调用API的方式来操作user下授权的账户。
不同类型账户角色在授权时权限范围也不同,以下针对几个账户概念为你详细介绍:
如果你是授权自己公司下的账户,为了减少授权的复杂度,建议和你们公司的广告账户管理同学沟通,用一个企业公共邮箱注册的user,为这个user添加上所有希望通过API管理的广告账户,如下方的user x,然后用这个user x来授权,这样你需要授权一次既可以获得管家A、B、C的权限,也能避免使用个人user授权后人员流动导致user权限失效的问题,例如如果用小红(user y)授权,一旦user y失去管家B的权限,那么使用user y授权得到的token也将无法再调用管家B。
以上是按管家为例,代理商账号同理,也建议使用一个企业公共账号user x来集中绑定所有希望通过API管理的代理商账号,然后用公共user x进行API授权,能有效减少后续的授权及维护成本。
基于广告账户授权和基于用户(user)授权有什么区别,分别适用什么场景
授权时我们有两种授权模式:
基于广告账户授权:
基于登陆账号授权:
那么这两种模式该怎么选择,核心还是基于自身的授权目的:
再次强调,如果你是广告主或代理商类型的开发者,授权的是自己公司下的账户,建议有意识地管理授权user,使用一个公共user关联上所有希望通过API管理的广告账户,然后用这个公共user做API授权,而不是随便找一个user做授权,这样能避免人员流动带来的一系列账号权限问题。
另外,不管是基于用户授权还是基于广告账户授权,token的管理方式都没有变化,对你来说在调用/oauth2/advertiser/get/接口时会返回所有可操作的管家和代理商账号,作为开发者你不需要知道是基于哪种类型授权的。
如果账号关系发生变更对已授权的token的使用有什么影响
在授权后得到的每一个token都会记录APPID和授权user、授权广告账户、授权权限之间的关系,意味着这个APPID在用对应token调用时也不会超出当时的授权范围。每一次接口调用都会有严格的鉴权,会判断调用的广告账户是否在之前的授权范围内,并且调用的接口是否在当时授权的权限范围内,这步鉴权通过后还会进一步判断user是否仍有对应广告账户的权限,因为user下管理的广告账户是可能变化的。
例如按下图小红的场景,原来小红管理了管家B和管家C两个账号,其中某***adv3移出了管家B,同时移除了小红对管家C的管理权限,小红再访问投放平台的时候已经没有了adv3和管家C(及管家C下广告主)的操作权限,同样的,这时候用小红user y的授权token通过API也无法再调用adv3和管家C,即使之前做过API的授权。所以我们也建议避免使用个人账号做授权管理,尽可能使用一个企业邮箱注册的公共账号如userx,绑定所有希望通过API管理的广告账户,这样能减少账号关系变化带来的接口调用影响。
有几种常见疑问的场景可以自查:
需要怎么完成授权,有哪些点需要关注
当APPID申请审核通过后,就可以基于授权URL的拼接规则拼接好对应APPID的授权URL,拼接规则的具体信息可以参考:【简版授权流程说明-1授权url】;
如果授权URL没有自定义参数或者修改权限的诉求,也可以使用我们系统推荐的授权URL,可在应用详情页复制得到,如下图所示:
得到授权URL后接下来就需要引导广告主做应用授权,广告主将广告账户授权给APPID后,APPID才能使用对应token进行接口调用。广告主需要访问授权URL并且登录要授权的广告账号,登录后即可见到下图的界面,按需求选择合适的授权模式、勾选需要授权的广告账号点击同意授权即完成了授权。
如果你既是开发者也是广告主需要自己做授权操作,可能遇到以下问题,可以自查:
怎么获取auth_code
有以下方法可以获得auth_code:
怎么做后续token的换取和管理
授权之后如何获取token,并且如何通过token拉取对应的账号列表,可参考下方流程:
***步:授权后会获得auth_code,通过/oauth2/access_token/(获取Access Token)接口可以将auth_code换取对应access_token。
第二步:利用access_token通过/oauth2/advertiser/get/(获取已授权账户)接口可获取token下可操作的账号列表和对应的账号类型——管家(管理员)/管家(操作者)/代理商/广告主(说明:因为历史授权存在直接授权广告主的场景,所以会有广告主类型,但是此次升级后新的授权将不会再有广告主直接授权的情况)。
【示例说明】:如果按下方账号授权后得到的token调用/oauth2/advertiser/get/接口,返回的数据如下图:
第三步:接下来再结合账号类型,利用管家/代理商的广告主查询接口就能知道对应管家/代理商下可操作的广告主有哪些:
什么情况下token会失效,该如何处理
场景一:token超过有效期
对于短期token,access_token有效期为1天,refresh_token有效期30天,超出有效期token将失效。 当access_token超时后,可以使用refresh-token(通过/oauth2/refresh_token/接口) 刷新,每次刷新都会产生新的access_token和refresh_token,同时重置二者的有效期。
场景二:token被刷新
如果使用refresh_token刷新过,那刷新后老的access_token和refresh_token将继续保留10分钟的有效期,10分钟后会自动过期,请做好token的存储和管理工作,确保每次使用的是***的token。
场景三:广告主取消授权
如果广告主取消授权,access_token和refresh_token会立即失效,开发者将无法通过refresh_token刷新获取access_token和refresh_token。对此,开发者需要让广告主重新授权,使用新的auth_code通过/oauth2/access_token/获取token。
场景四:广告主重新授权
如果广告主重新授权,原access_token、refresh_token会立即失效,开发者需要使用新的auth_code通过/oauth2/access_token/获取token。
怎么解除授权
授权是由广告主账号完成,广告主可以在广告投放平台的服务市场中看到应用管理入口,登录广告账号后可在应用管理页面看到已授权的应用,广告主可以自助进行解除授权:进入应用详情,如果是基于广告账户授权的模式,可以选择单独解除某些广告账户的授权;而基于用户授权不支持单独解除某广告账户授权,如需解除授权可解除整个应用授权。
基于广告账户授权:
基于用户授权:
【敏感物料授权】当调用素材、评论、线索这类物料接口,提示非同主体无法调用时应该怎么处理?
原因:基于数据安全要求,对于素材URL、线索、评论这类相对敏感的物料存在主体的校验,如果开发者主体和查询的广告主主体不一致则无法查询,基于这个要求下代理商、第三方以及公司下存在多主体的广告主都可能遇到此类问题,如果希望做跨主体的物料查询可以通过敏感物料授权解决。
解决方法:可以在授权URL拼接上material_auth=1的参数,这样授权时就会新增敏感物料授权的协议和勾选,引导广告主勾选此项授权后,得到的token就拥有了对应授权账号的敏感物料操作权限,不再受限于主体的一致性。
如何在管家平台/代理商一站式平台进行角色管理和广告账号绑定?
一般来说一个user下是否可能同时管理管家和代理商的账号?
一般代理商和管家是两类投放角色,所以很少会出现一个user同时既管理代理商账号又管理管家账号,但是也不排除这种可能,逻辑上并无限制,如果一个代理商的管理员使用自己的user再开了个管家账号,就会出现同时管理两类账号的情况。但这并不影响开发者的token管理,只需要按上方介绍的token管理流程,识别好授权的账号类型,调用对应列表接口,即可兼容各种授权场景。
APPID的secret,以及auth_code换取的token分别有什么作用?
APPID审核通过后可以在应用详情页看到对应的secret,这个secret是应用的令牌,会在获取或者刷新token时用到。
而token则是在后续一系列接口调用中的令牌,token里面会记录授权的user、授权账号、授权权限等一系列关系,每一次调用都会进行接口鉴权,保证了接口调用的合规,这就是token的作用。