API文档

身份验证

概述

大多数发送到DomainTools API的请求都需要身份验证。我们支持两个
具有不同安全级别的身份验证方案。选择一个最好的
适合您的实现。

保护API凭证是非常重要的。您的帐户将被
收费的所有查询验证与您的密钥,即使您后来确定
请求是欺骗性的。

公开密钥认证

这是最容易实现的身份验证方案,但也是最不安全的。
您应该在设计应用程序时采取预防措施,以确保您的密钥是安全的
不妥协。

https://api.domaintools.com/v1/domaintools.com?api_username=example&api_key=xxxxxx
必需的参数 价值
api_username API用户名
api_key API密钥

签名验证

HMAC,或散列消息身份验证码,是我们首选的身份验证
计划。遵循RFC2104的基本原理,提供了一个
简单但安全的方法保护你的API密钥。它包括传递
由api用户名、当前日期和时间以及请求URI组成的散列。
然后使用您的身份验证密钥对该散列进行签名。
结果是请求在短时间内过期
而且,最重要的是,它不包含您的身份验证密钥。

必需的参数 价值
api_username API用户名
时间戳 当前时间戳,ISO 8601格式
2011 - 02 - 01 - t14:37:59 - 0800
2011 - 02 - 01 - t22:37:59z
2011 - 02年- 02 - t10:37:59 + 1200
签名 请求的HMAC签名,使用MD5、SHA1或SHA256哈希算法

要创建签名,需要构建一个包含api用户名和时间戳的字符串
ISO 8601格式,以及您正在请求的URI。然后,该字符串与
你的api密钥使用HMAC函数给出签名。

在创建签名时,请遵循以下准则:

  • 1) URI是你的请求的api.domaintools.com之后的URL的一部分。/ v1 / yourdomain.com/whois
  • 2)时间戳应采用ISO 8601格式,并包含时区偏移量
  • 3)散列的时间戳值和传递给API的时间戳参数需要相同
  • 4)确保你的服务器时间是准确的,并且你总是使用一个新的时间戳
  • 5)哈希算法只能使用MD5、SHA1或SHA256

您可能会在您的首选产品中发现对HMAC身份验证的内置支持
编程语言。我们支持多种哈希算法
遵循HMAC标准,以确保尽可能广泛的支持。


注意:以下代码示例仅用于教学目的。

PHP

< ?php类DTSigner {private $api_username;私人美元api_key;公共函数__construct($api_username, $api_key) {$this->api_username = $api_username;$this->api_key = $api_key;}公共函数时间戳(){返回gmdate("Y-m-dTH:i:sZ");}公共函数符号($timestamp, $uri){返回hash_hmac('md5', $this->api_username . xml) {美元的时间戳。美元的uri, $ this - > api_key);}} //使用DTSigner $api_username = 'your_username'的例子; $api_key = 'xxxxx-xxxxx-xxxxx-xxxxx-xxxxx'; $uri = '/v1/yourdomain.com/whois'; $host = 'api.domaintools.com'; $signer = new DTSigner($api_username, $api_key); $timestamp = $signer->timestamp(); $signature = $signer->sign($timestamp, $uri); echo 'https://' . $host . $uri . '?api_username=' . $api_username . '&signature=' . $signature . '×tamp=' . $timestamp; ?>

Python

#!/usr/bin/env python import hmac import hashlib from datetime import datetime类DTSigner(对象):def __init__(self, api_username, api_key): self。Api_username = Api_username self。api_key= api_key def timestamp(self): return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') def sign(self, timestamp, uri): params = ''.join([self.api_username, timestamp, uri]) return hmac.new(self.api_key.encode('utf-8'), params.encode('utf-8'), digestmod=hashlib.sha1).hexdigest() if __name__ == "__main__": api_username = 'your_username' api_key = 'xxxxx-xxxxx-xxxxx-xxxxx-xxxxx'; uri = '/v1/yourdomain.com/whois' host = 'api.domaintools.com' signer = DTSigner(api_username, api_key) timestamp = signer.timestamp() signature = signer.sign(timestamp, uri) print 'https://{0}{1}?api_username={2}&signature={3}×tamp={4}'.format( host, uri, api_username, signature, timestamp)

这个认证也可以通过使用我们的官方为您处理Python API

鲁比(人名)

要求'openssl'类DomainToolsSigner def self。get(username, key, uri) timestamp = Time.now.utc.strftime("%Y-%m-%dT%H:% m:%SZ") data = username+timestamp+uri digester = OpenSSL::Digest::Digest.new("md5") #可以是sha1 | sha256 signature = OpenSSL::HMAC. get(" username, key, uri ")Hexdigest(消化器、密钥、数据)"api_username=#{username}&signature=#{signature}×tamp=#{timestamp}" end end api_username= 'your_username';Api_key = 'xxxxx-xxxxx-xxxxx-xxxxx-xxxxx';Uri = '/v1/yourdomain.com/whois';Host = 'api.domaintools.com';authentication = DomainToolsSigner。Get (api_username,api_key, uri)将“https://#{host}#{uri}?”#{认证}”

Java

进口javax.crypto.Mac;进口java.security.SignatureException;进口javax.crypto.spec.SecretKeySpec;进口java.text.SimpleDateFormat;进口java.util.Date;public class DTSigner {private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";api_username;字符串api_key;private SimpleDateFormat timeFormatter;public DTSigner(String api_username, String api_key)Api_username = Api_username; this.api_key = api_key; this.timeFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); } public String timestamp() { Date now = new Date(); return this.timeFormatter.format(now); } public String getHexString(byte[] b) { String result = ""; for (int i=0; i < b.length; i++) { result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring(1); } return result; } public String sign(String timestamp, String uri) throws java.security.SignatureException { String Result; try { String data = new String(this.api_username + timestamp + uri); SecretKeySpec signingKey = new SecretKeySpec(this.api_key.getBytes(), HMAC_SHA1_ALGORITHM); Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); mac.init(signingKey); byte[] rawSignature = mac.doFinal(data.getBytes()); Result = this.getHexString(rawSignature); } catch(Exception e) { throw new java.security.SignatureException("Failed to generate HMAC : " + e.getMessage()); } return Result; } public static void main(String args[]) { String api_username = "your_username"; String api_key = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"; String uri = "/v1/yourdomain.com/whois"; String host = "api.domaintools.com"; try { DTSigner signer = new DTSigner(api_username, api_key); String timestamp = signer.timestamp(); String signature = signer.sign(timestamp, uri); System.out.println("https://" + host + uri + "?api_username=" + api_username + "&signature=" + signature + "×tamp=" + timestamp); } catch(Exception e) { System.out.println("Error trying to sign query"); } } }

c#

使用系统;使用先;使用text;使用System.Security.Cryptography;命名空间DTSigner{类程序{公共静态字符串时间戳(){返回DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");} public static String符号(String api_username, String key, String timestamp, String uri) {ASCIIEncoding encoder = new ASCIIEncoding();Byte [] data =编码器。(api_username + timestamp + uri);HMACSHA1 hmac = new HMACSHA1(编码器. getbytes (key));CryptoStream cs = new CryptoStream(流。Null, hmac, CryptoStreamMode.Write); cs.Write(data, 0, data.Length); cs.Close(); String hex = BitConverter.ToString(hmac.Hash); return hex.Replace("-","").ToLower(); } public static void Main(string[] args) { String api_username = "your_username"; String key = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"; String uri = "/v1/yourdomain.com/whois"; String host = "api.domaintools.com"; String timestamp = Program.timestamp(); String signature = Program.sign(api_username, key, timestamp, uri); Console.WriteLine("https://" + host + uri + "?api_username=" + api_username + "&signature=" + signature + "×tamp=" + timestamp); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }
一般信息
产品