php接口如果验证响应头,php – 使用令牌实现RESTful API验证(Yii/Yii2)

有关处理安全接口的信息

专注于一次提供所有好的(RESTful)认证的解决方案,这可能是:

> SSL(最重要的是,否则“HTTP-Auth”会更少,每个人都可以读出你的请求头/身体Man-in-the-middle-attack)

> oAuth(或更好的oAuth2!)

> HTTP-Auth

>令牌(包括有限的生命周期,刷新,可能包括IP / DeviceUID检查逻辑 – >如果它是移动的!)

>盐生成密码

>用于ID / ENV / CLIENT检查的自定义HTTP头或者什么。

>用于请求和响应的加密身体数据以防止数据操作

提示:个人用户数据应该被加密!

也许是一个解决方案

以上您可以看到关于安全接口的标准信息。为了确保持久的安全性,您可以像下一部分一样尝试。我不知道你的AppSidePersitence。也许它的sqlLite或类似的东西。这就是为什么我不指示一个基于代码的DB-Schema,就像我对Yii做的那样。您将需要Yii应用程序(后端)中的存储/持久性,并在应用程序(客户端)内存储时间和令牌。

您的YiiDBModel

-- -----------------------------------------------------

-- Table `mydb`.`user`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `mydb`.`user` (

`id` INT NOT NULL,

`username` VARCHAR(255) NOT NULL,

`password` VARCHAR(255) NOT NULL,

`lastLogin` DATETIME NULL,

`modified` DATETIME NULL,

`created` DATETIME NULL,

PRIMARY KEY (`id`))

ENGINE = InnoDB;

----------------------------------------------------

-- Table `mydb`.`authToken`

-- -----------------------------------------------------

CREATE TABLE IF NOT EXISTS `mydb`.`authToken` (

`id` INT NOT NULL,

`userId` INT NOT NULL,

`token` VARCHAR(255) NOT NULL,

`created` DATETIME NOT NULL,

PRIMARY KEY (`id`, `userId`),

INDEX `fk_authToken_user_idx` (`userId` ASC),

UNIQUE INDEX `token_UNIQUE` (`token` ASC),

CONSTRAINT `fk_authToken_user`

FOREIGN KEY (`userId`)

REFERENCES `mydb`.`user` (`id`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB;

您的AppPersitenceModel

妥善处理您的令牌并确保登录安全

>您在Yii-Application端生成的任何令牌都将与YiiApp-Database中的“创建的”-Datetime一起存储(请参阅表authToken)。每个用户只有一个“令牌”,它将在正确的“登录”-Request之后生成。这样,您不需要在“登录”时检查令牌。由模式定义,“令牌”是唯一的!我认为没有必要处理历史数据(旧令牌已过期)。

>一旦用户登录被Yii验证为“成功”,就会生成一个包含当前时间戳的新用户令牌,这个记录将存储在您的YiiApp-DB中。在您的YiiApp中,您需要配置一个“到期时间”,将被添加到当前时间戳,例如,如果您想使用“时间戳”:当前时间戳记为:1408109484,您的到期时间设置为3600 3600秒= 1小时)。所以你的过期日期时间将通过API发送(1408109484 3600)。顺便说一句。提示:您不需要发送诸如“代码”的属性:200.响应代码包含在请求/响应头数据中。

** 200 OK响应 – 示例,用户登录成功后,保存计算的“过期”-date:**

{

"error": null,

"content": {

"expires": 1408109484,

"token": "633uq4t0qdtd1mdllnv2h1vs32"

}

}

>重要提示:您要保护的每个请求都需要使用生成的User-“token”发送。哪些可能存储在您的设备存储器中。您可以处理您的“登录状态” – 如果您使用HTTP-Response-Codes权限,则为真RESTful(例如200 OK)(如果一切正常)或401(未经授权,用户未被填写或会话已过期)。您需要在Yii方面验证您的用户请求。从传入请求中读出令牌,由于数据库中给定的令牌进行验证,并将“创建”-DB与当前传入的请求时间(HTTP请求)进行比较。

**请求 – 示例,任何安全请求的默认模式:**

{

"token": "633uq4t0qdtd1mdllnv2h1vs32"

"content": {

"someDataYouNeed" : null

}

}

** 401未经授权的响应 – 示例,令牌过期:**

{

"error": 1, // errorCode 1: token is expired

"content": {

"someDataYouNeed" : null

}

}

** 401未经授权的响应 – 示例,用户未登录(YiiDB中不存在令牌):**

{

"error": 2, // errorCode 2: user is not logged in

"content": {

"someDataYouNeed" : null

}

}

>保持用户会话活着?这很简单只需将authToken-Table中的“created”-Date更新为当前请求时间。每次都会这样做,用户发送有效的请求。这样,如果用户仍然处于活动状态,会话将不会过期。在数据库中更新到期日期字段之前,请确保您的数据库令牌未过期。如果在会话到期时没有请求发送,则保持活动将不再可能。

对不起,但添加PHP代码会太多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值