热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在PHP中为各个方法添加身份验证:针对不同方法参数实施认证(基于Restler3框架)

在PHP中使用Restler3框架为不同方法添加身份验证时,可以根据方法参数的特定值来限制访问。例如,在`Simple.php`文件中定义的`Simple`类中,可以通过检查`$name`参数的值来决定是否允许调用`item`方法。这种细粒度的认证机制可以提高系统的安全性和灵活性。具体实现方式包括在方法内部进行条件判断,并结合框架提供的认证工具来实现访问控制。

如果参数具有特定值,我想限制对方法的访问.让我们以此类为例:

Simple.php:

class Simple

{

function item($name)

{

if($name == "somerestricted")

{

// Here should be an authentication check (or somewhere else), hopefully, using an iAuthenticate class

// Later, there will be a check using a database to determine if authentication will be required

// So user/password may vary

if($authenticated)

{

// Proceed

}

else

{

// ???

}

}

else

{

echo "Hi!";

}

}

}

使用此身份验证类:

BasicAuthentication.php:

class BasicAuthentication implements iAuthenticate

{

const REALM = 'Restricted API';

function __isAllowed()

{

if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))

{

$user = $_SERVER['PHP_AUTH_USER'];

$pass = $_SERVER['PHP_AUTH_PW'];

if($user == 'laterfetched' && $pass == 'fromdatabase')

{

return true;

}

}

header('WWW-Authenticate: Basic realm="'.self::REALM.'"');

throw new RestException(401, 'Basic Authentication Required');

}

}

Index.php(网关):

addAuthenticationClass( ‘BasicAuthentication’);

$R-> addAPIClass( ‘简单’);

$R->手柄();

简单/项目方法现在可公开访问.但是,如果我将项目转换为受保护的函数,则每个请求都需要身份验证.这不是我想要做的.只有simple / item / somerestricted应该要求身份验证.

那么有没有办法将iAuthenticate限制为特定的参数值?如果没有,我怎么能解决这个问题呢?

用户名和密码在生产使用中会有所不同(取决于给定的参数).

我正在使用Restler rc4.

解决方法:

你已经使你的混合api成为公共的,如果用户通过身份验证,它将增强结果

一种方法如下所示.它在Restler中使用隐藏属性

class Simple

{

/**

* @var \Luracast\Restler\Restler

*/

public $restler;

/**

* @access hybrid

*/

function item($name)

{

if ($name == "somerestricted") {

if ($this->restler->_authenticated) {

// Proceed

} else {

// ???

}

} else {

echo "Hi!";

}

}

}

另一种(推荐)方式是使用iUseAuthentication接口

use Luracast\Restler\iUseAuthentication;

class Simple implements iUseAuthentication

{

protected $authenticated;

/**

* @access hybrid

*/

function item($name)

{

if ($name == "somerestricted") {

if ($this->authenticated) {

// Proceed

} else {

// ???

}

} else {

echo "Hi!";

}

}

public function __setAuthenticationStatus($isAuthenticated = false)

{

$this->authenticated = $isAuthenticated;

}

}



推荐阅读
author-avatar
blank
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有