我們建立一個User服務供其他服務呼叫以實現認證和鑑權。
建立檔案UserService.php
checkToken 方法接收兩個引數,一個token,一個permission,首先驗證token獲得user,對user的鑑權將在以後的許可權認證教程補充。
如果認證成功,將返回user.
在配置檔案server.php增加一個json-rpc服務,監聽埠為9504
[
'name' => 'jsonrpc-http',
'type' => Server::SERVER_HTTP,
'host' => '0.0.0.0',
'port' => 9504,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
SwooleEvent::ON_REQUEST => [Hyperf\JsonRpc\HttpServer::class, 'onRequest'],
],
],
用postman測試服務,我的介面地址 http://192.168.137.200:9504
post 請求
{"jsonrpc":"2.0","method":"/user/checkToken","params":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI1ZGNhM2RjZjE2NDQzIiwiaWF0IjoxNTczNTM1MTgzLCJuYmYiOjE1NzM1MzUxODMsImV4cCI6MTU3MzU0MjM4MywidXNlcl9pZCI6MX0.s0_ADx2399sIajxHW_-LnQY7ftbVhH1qEFbRT60qNYA",[]],"id":"1"}
正確返回
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"user_id": 1,
"username": "admin",
"nick_name": "超級管理員",
"real_name": "超級管理員",
"sex": 0,
"phone": "",
"avatar": "",
"last_login_at": null,
"created_at": "2019-11-04 15:16:18",
"status": 1
}
}
錯誤返回
{
"jsonrpc": "2.0",
"id": "1",
"error": {
"code": -32000,
"message": "Token未驗證透過",
"data": {
"class": "Phper666\\JwtAuth\\Exception\\TokenValidException",
"message": "Token未驗證透過"
}
}
}
這裡可能有人會有疑問,這個服務是公開的,是不是誰都可以呼叫,答案肯定是否定的,我們的服務將部署在Docker私有網路,外部是無法訪問到的,這個後面會講到。
部落格:《PHP 微服務練兵》系列教程
本作品採用《CC 協議》,轉載必須註明作者和本文連結