추천: "PHP 비디오 튜토리얼"
php api 인터페이스
실제 작업에서는 PHP를 사용하여 API 인터페이스를 작성하는 것이 일반적입니다. PHP가 인터페이스를 작성한 후 프런트 데스크는 링크를 통해 인터페이스에서 제공하는 데이터를 얻을 수 있으며 반환되는 데이터는 다음과 같습니다. 일반적으로 2가지로 나누어집니다. 이 경우 xml과 json의 경우 이 과정에서 서버는 요청의 출처를 알 수 없습니다. 다른 사람이 데이터를 얻기 위해 불법적으로 우리 인터페이스를 호출할 수도 있으므로 보안 검증을 사용해야 합니다.
검증 원리
개략도
Principle
프론트 데스크가 인터페이스를 호출하려면 여러 매개 변수를 사용하여 서명을 생성해야 합니다.
타임스탬프: 현재 시간
난수: 무작위로 생성된 난수
비밀번호: 프론트엔드 및 백엔드 개발 중에 양측 모두에게 알려진 식별자, 비밀 코드와 동일
알고리즘 규칙: 합의된 작업 규칙, 위의 세 가지 매개변수는 알고리즘 규칙을 사용하여 서명을 생성할 수 있습니다.
프런트엔드는 서명을 생성하고 인터페이스에 액세스해야 할 때 타임스탬프, 난수 및 서명이 URL을 통해 백엔드로 전달됩니다. 백그라운드에서 타임스탬프와 난수를 가져온 후 동일한 알고리즘 규칙을 통해 서명을 계산한 다음 전달된 서명과 비교하여 동일하면 데이터를 반환합니다.
알고리즘 규칙
프런트엔드와 백엔드 상호작용에서 알고리즘 규칙은 매우 중요합니다. 프런트엔드와 백엔드 모두 알고리즘 규칙을 통해 서명을 계산해야 합니다. 당신은 그것을 좋아합니다.
내 알고리즘 규칙은
1 타임스탬프, 난수, 비밀번호를 첫 글자 순서대로 정렬합니다
2 그런 다음 문자열로 연결합니다
3 sha1 암호화 수행
4 그런 다음 MD5 암호화 수행
5 자본으로 전환하세요.
프론트 데스크
여기에는 실제 프론트 데스크가 없습니다. 프론트 데스크 대신 PHP 파일을 직접 사용하고 CURL을 통해 GET 요청을 시뮬레이션합니다. 저는 TP 프레임워크를 사용하고 있으며 URL 형식은 pathinfo 형식입니다.
소스 코드
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/3/16 0016 * Time: 15:56 */ namespace Client\Controller; use Think\Controller; class ClientController extends Controller{ const TOKEN = 'API'; //模拟前台请求服务器api接口 public function getDataFromServer(){ //时间戳 $timeStamp = time(); //随机数 $randomStr = $this -> createNonceStr(); //生成签名 $signature = $this -> arithmetic($timeStamp,$randomStr); //url地址 $url = "http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}"; $result = $this -> httpGet($url); dump($result); } //curl模拟get请求。 private function httpGet($url){ $curl = curl_init(); //需要请求的是哪个地址 curl_setopt($curl,CURLOPT_URL,$url); //表示把请求的数据已文件流的方式输出到变量中 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $result = curl_exec($curl); curl_close($curl); return $result; } //随机生成字符串 private function createNonceStr($length = 8) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return "z".$str; } /** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ private function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; } }
서버측
확인을 위해 포그라운드 데이터 허용
소스 코드
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/3/16 0016 * Time: 16:01 */ namespace Server\Controller; use Think\Controller; class ServerController extends Controller{ const TOKEN = 'API'; //响应前台的请求 public function respond(){ //验证身份 $timeStamp = $_GET['t']; $randomStr = $_GET['r']; $signature = $_GET['s']; $str = $this -> arithmetic($timeStamp,$randomStr); if($str != $signature){ echo "-1"; exit; } //模拟数据 $arr['name'] = 'api'; $arr['age'] = 15; $arr['address'] = 'zz'; $arr['ip'] = "192.168.0.1"; echo json_encode($arr); } /** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ public function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; } }
결과
string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
요약
이 방법 는 그 중 하나의 방법일 뿐인데 실제로는 보안 검증을 수행하는 방법은 다양합니다.
위 내용은 PHP 개발 API 인터페이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!