API认证

anwei发表于:2019年12月06日 20:08:43

准备条件

介绍在进行认证及后续接口使用中需要提前准备的参数。

准备项

说明

项目公钥(X-Client-Id)

GrowingIO分配的项目公钥,请求时用来做身份校验的一串字符码。是所有接口的公共请求头参数。

获取方式:登录 GrowingIO 平台,选择对应的项目后,单击界面右上角-Lo08UtW7H58ehFKeZ4g-Lsu2CWi8CGylwC7jWSB-LsuPIbtjENP0zZy9KaU2019-10-10_18-59-32.png选择【项目概览】,在项目概览页面的基本信息中可以查看当前项目的项目ID、项目公钥、项目私钥。 项目 ID 也是集成 SDK 时 setAccountId 所用的部分。详细请参考项目概览

项目私钥

GrowingIO分配的项目私钥,生成加密签名时使用。

获取方式:同上

项目ID(ai)

GrowingIO分配的项目ID。

获取方式:同上

project_uid

项目UID。

登录GrowingIO平台,选择对应的项目后,页面 URL中projects后的值。

示例:

选择项目后页面URL为https://www.growingio.com/admin/projects/nxog09md/dashboard当前项目的UID为nxog09md。详细请参考获取项目UID

tm

当前请求的时间戳。

-Lo08UtW7H58ehFKeZ4g-Lqjd40ZrNG64ua_H6jf-LqjiNM7cKZcm3SS-w_nE68EA5E58FA3E4BDBFE794A8E6B581E7A88B.png

接口使用流程

为保证数据安全,GrowingIO所有的API服务,请求Head中需要携带认证码。



生成加密签名auth

auth是通过认证算法计算出来的加密签名。

auth计算示例代码

Java版本示例代码

public String authToken(String secret, String project, String ai, Long tm) throws Exception {  
   String message = "POST\n/auth/token\nproject="+project+"&ai="+ai+"&tm="+tm;  
   Mac hmac = Mac.getInstance("HmacSHA256");  
   hmac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));  
   byte[] signature = hmac.doFinal(message.getBytes("UTF-8"));  
   return Hex.encodeHexString(signature);
 }
 
 authToken("这里是GrowingIO给项目分配的私钥", "项目UID", "项目ID", "申请时间戳")


Scala版本示例代码

import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
import org.apache.commons.codec.binary.Hex

def authToken(secret: String, project: String, ai: String, tm: Long) = { 
   val messages = s"POST\n/auth/token\nproject=$project&ai=$ai&tm=$tm"
   val hmac = Mac.getInstance("HmacSHA256") 
   hmac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")) 
   val signature = hmac.doFinal(messages.getBytes("UTF-8")) 
   Hex.encodeHexString(signature)
}

authToken("这里是 GrowingIO 给项目分配的私钥", "项目UID", "项目ID", "申请时间戳")



PHP版本示例代码

<?php

function authToken($secret, $project, $ai, $tm) {    
        $str = "POST\n/auth/token\nproject=${project}&ai=${ai}&tm=${tm}";    
        $signature = hash_hmac("sha256", $str, $secret);    
        return $signature;
}

authToken("这里是 GrowingIO 给项目分配的私钥", "项目UID", "项目ID", "申请时间戳")
?>


Python版本示例代码

import hashlib
import hmac

def authToken(secret, project, ai, tm): 
     message = ("POST\n/auth/token\nproject=" + project + "&ai=" + ai + "&tm=" + tm).encode('utf-8')  
     signature = hmac.new(bytes(secret.encode('utf-8')), bytes(message), digestmod=hashlib.sha256).hexdigest()  
     return signature
     
authToken("这里是 GrowingIO 给项目分配的私钥", "项目UID", "项目ID", "申请时间戳")


申请认证码Authorization

调用此接口,获取到的code字段值即为认证码。此认证码将作为其他业务接口的请求头参数。

认证码使用说明:

  • 获取新认证码后旧码失效。

  • 认证码使用期限为自生成起30天,为防止多人使用出现的认证错误,建议每次使用都重新生成。(除接口存在并发请求的情况)

请求类型

POST

URL

https://www.growingio.com/auth/token

请求参数


Post body 采用 raw 格式上传而不是 key-value 键值对方式上传。如:project=123abc&ai=2a1b4018cd954ec2bcc69da5138bdb96&tm=1465020309123&auth=ab3i5dazoo58314l0qqrj1aslfj1ldfaqeroqi

请求头参数如下:

名称

类型

是否必传

描述

X-Client-Id

String

GrowingIO为各项目分配的公钥,请求时用来做身份校验的一串字符码。

请求body参数如下:

名称

类型

是否必传

描述

ai

String

GrowingIO中的项目ID。

project

String

项目UID。

在GrowingIO中打开项目,浏览器URL中project字段后的值,即为UID。

tm

Long

申请时间戳。

auth

String

通过认证算法计算出来的加密签名。获取方式请参考:获取加密签名auth


返回示例

 {     
     "status":"success",     
     "code":"2RhY0XZ9xyBfayAPm0aa5CoJhDJkEUcmRiBJBT6XyeIXhHrdz334Tf3I85Esm74Q"  
 }


code字段值即为认证码。


公共请求头参数

公共请求参数是指每个接口都需要使用到的请求参数。

请求参数

类型

描述

X-Client-Id

string

GrowingIO为各项目分配的公钥。

Authorization

string

认证后获取到的认证码。请参考申请认证码Authorization