热门标签 | 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;

}

}



推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 在 ExtJS 中,类的别名(alias)是开发过程中非常有用的一个特性。通过别名,开发者可以使用简短且易于记忆的名称来引用复杂的类名。本文将详细探讨如何在 ExtJS API 中使用和定义别名,并提供实例说明。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 自 Node.js 6.3 版本起,调试功能已内置在核心模块中,无需额外安装 node-inspector 等工具。通过简单的命令即可启动调试模式,并利用 Chrome 浏览器进行高效的代码调试。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • Composer Registry Manager:PHP的源切换管理工具
    本文介绍了一个用于Composer的源切换管理工具——Composer Registry Manager。该项目旨在简化Composer包源的管理和切换,避免与常见的CRM系统混淆,并提供了详细的安装和使用指南。 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 本文介绍如何在SQL Server中对Name列进行排序,使特定值(如Default Deliverable Submission Notification)显示在结果集的顶部。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
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社区 版权所有