我正在PHP中創建一個REST API,並且我在理解我與過期令牌有關的概念時遇到了一些問題。我有用於認證部分的MYSQL和Json Web令牌。PHP REST API令牌過期流程
DB結構
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`name` varchar(35) CHARACTER SET utf8 NOT NULL,
`lastname` varchar(35) CHARACTER SET utf8 DEFAULT NULL,
`password` text CHARACTER SET utf8 NOT NULL,
`email` varchar(50) CHARACTER SET utf8 NOT NULL,
`gender` enum('male','female') CHARACTER SET utf8 DEFAULT NULL,
`description` text CHARACTER SET utf8,
`email_verification` enum('unverified','verified','','') CHARACTER SET utf8 NOT NULL DEFAULT 'unverified',
`updated` datetime NOT NULL,
`created` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `device_tokens` (
`id` int(11) NOT NULL,
`device_id` tinyint(4) NOT NULL,
`device_version` varchar(10) DEFAULT NULL,
`user_id` int(11) NOT NULL,
`token` text NOT NULL,
`update` datetime NOT NULL,
`created` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOGIN
我創建的用戶名和密碼POST請求,如果確認是正確的我返回一個訪問令牌(JSON網絡令牌)其中包含以下數據:
- 電郵
- 名
- user_creation_date
- 到期時間
註銷 我創建具有的access_token,DEVICE_TYPE和user_ID的POST請求。但是如果令牌已經過期會發生什麼?我剛剛刪除?
另一個端點
for example
/pets?id=1
我創建具有的access_token,USER_ID和xx_id GET請求,所以才返回數據。我驗證令牌是否正確,以及令牌是否與正在發出請求的用戶相對應。但是,如果令牌已過期會發生什麼情況?我創造另一個?在我必須退還另一個未過期的令牌的情況下,是否應該註銷用戶並再次詢問密碼和電子郵件?
我不明白什麼是做到這一點的最佳方式。在我創建的關於認證的其他文章中,許多用戶建議我使用第三方認證系統,但我想自己開發它。
感謝所有
首先,感謝您的幫助。所以我創建了一個訪問令牌和一個刷新令牌,並將其發送給客戶端。客戶端存儲這兩個字段,並且在發出請求並且訪問令牌過期時,客戶端必須使用refresh令牌發出另一個請求? – JIFT
是的,你是對的。但是,如果訪問令牌已過期或無效,則使用不同的響應代碼。如果它已過期,客戶端應發送刷新令牌。如果無效,用戶必須重新登錄。 @JIFT –