使用Core PHP对Silverstripe用户进行身份验证

时间:2016-11-10 08:35:42

标签: php silverstripe

我的客户有一个使用SilverStripe制作的网站和后端。现在客户想要一个移动应用程序,为此他希望我构建一个API来与数据库进行通信。不幸的是,他希望我使用其他一些框架,甚至是PDO的核心PHP实现。

我的问题:

SilverStripe如何加密其密码?如何使用纯PHP手动验证用户身份。只有加密/哈希的逻辑(如SilverStripe)用户输入就足够了。

1 个答案:

答案 0 :(得分:4)

  

不幸的是,他希望我使用其他一些框架,甚至是使用PDO的核心PHP实现

作为开发人员,您有能力告诉客户他为什么会出错。

如果网站/应用程序是使用SilverStripe构建的,那么他应该有一个非常好/特定的理由不继续使用它来在SilverStripe数据的顶部实现API - 这对于使用SilverStripe非常有意义,为了“不使用SilverStripe”而重写SilverStripe框架的部分内容毫无意义。

向您的客户提及SilverStripe实现的基础加密/散列算法不是其公共API的一部分也很重要,因此可以在不需要向开发人员发出明确通知的情况下进行更改。这可能意味着可以更改默认算法(例如,如果在blowfish算法中发现零日攻击),那么您的移动应用程序将停止工作。使用SilverStripe API不会遇到同样的问题。

以上也适用于SilverStripe的一般数据结构。让我们假设有一天他们决定从平面表转移到EAV数据库存储设计 - 他们的公共API(具有公共方法的类)将保持不变,而将可访问性与处理和数据存储分开的后端类将发生变化。 如果你自己构建它,你也必须更新你的API!

  

SilverStripe如何加密其密码?

取决于 - the default method is encryption with the blowfish algorithm,但有六个左右(在3.4.1中)implementations of the PasswordEncryptor class可以配置使用。

要使用的算法可通过Security::$password_encryption_algorithm属性或YAML配置进行配置。

每个用户可以使用Member列下PasswordEncryption数据库表中使用的不同密码加密/哈希算法 - take a look

  

如何使用普通PHP手动验证用户

理论上如果你想这样做,你需要在框架的验证器中重新创建大部分逻辑。首先看一下Member::checkPassword - 这是启动逻辑来检查成员的密码 - 这是你会关心的。

您会发现自己假设SilverStripe的大多数实现都将使用河豚加密的默认算法,并按照PasswordEncryptor::create_for_algorithmPasswordEncryptor_Blowfish::check。此时,您将看到您最终将复制一定数量的SilverStripe框架代码,以便能够实现您想要的目标。

摘要

  • 您想要实现的目标将涉及大量重复
  • 它不适用于100%的SilverStripe实施
  • 它现在可以正常工作,但在算法改变的某个时刻会中断
  • 问你的客户为什么,并说服他们改变主意(毕竟,你是专家,他们是客户)
  • 使用SilverStripe API模块(下面列出的几个)

API模块

  • silverstripe/silverstripe-restfulserver - 获得官方支持,并提供了一种简单易用的方式来开始为SilverStripe系统提供API访问。您可以对HTTP请求方法进行基本控制,并可以限制每个DataObject的访问权限。
  • colymba/silverstripe-restfulapi - 社区模块。可以说更灵活,更强大。稍微多做一些工作来设置/配置你希望它工作的方式。