在你使用php-opencloud之前必须先取得云服务提供商的身份验证。这是整个过程中最简单也是最让人沮丧的部分。

说它最简单是因为你只需要两部分信息:

  • 云服务提供商的身份验证端点
  • 用来身份验证的证书

只要你通过了身份验证,云服务提供商就会向你提供一个服务目录(http://docs.rackspace.com/auth/api/v2.0/auth-client-devguide/content/Sample_Request_Response-d1e64.html),该目录包含了提供商所有不同服务的链接。你只要指定你想要使用的服务,提供商的库就会自动找到相应的链接。

首先你要确定你使用的是Rackspace云还是OpenStack云,包含对应的top-level文件。这些被叫做Connection类,他们用来建立授权用户和指定云部署之间的链接。他们在任何php-opencloud中都是需要的。

OpenStack云的身份验证

首先要包含top-level文件

<?php
require '/path/to/php-opencloud.php';

这可以让你通过简单的new OpenStack声明来访问OpenStack对象。如果你省略了use,你就不得不通过完整命名空间来范文OpenStack: new \OpenCloud\OpenStack。

接下来,使用相应的证书来创建OpenStack对象。

$endpoint = 'https://your-cloud-provider/path';
$credentials = array(
'username' => 'YOUR USERNAME',
'password' => 'YOUR PASSWORD'
);
$cloud = new OpenStack($endpoint, $credentials);

(注意:tenantname值不是所有的installations中都需要的)

在这个例子中,$credentials是一个关联数组 (或者哈希数组)。Keys(username,password)是OpenStack分派给你的username和password。

Rackspace公有云的身份验证

首先要包含Rackspace命名空间的top-level:

<?php
use OpenCloud\Rackspace;

接下来,使用相应的证书创建Rackspace对象:

$endpoint = 'https://identity.api.rackspacecloud.com/v2.0/';
$credentials = array(
'username' => 'YOUR USERNAME',
'apiKey' => 'YOUR API KEY'
);
$cloud = new Rackspace($endpoint, $credentials);

用你自己账户的username和apikey来替换上面的。如果你没有API key,参见:https://mycloud.rackspace.com/a/`username`/account/api-keys。注意Rackspace英国用户和美国用户的$endpoint是不同的。

设置CRUL选项

Php-opencloud库使用标准CRUL方法执行HTTP请求。如果你要传递附加选项到CURL中,你可以把它们作为Rackspace和OpenStack可选的第三参数。这个参数必须是option/value对的关联数组。例如,如果你代码中要使用HTTP代理:

$options = array(CURLOPT_PROXY=>'proxy-name');
$cloud = new \OpenCloud\OpenStack($endpoint, $credentials, $options);

证书缓存

请注意,你只需要身份验证一次即可;php-opencloud库将把它们缓存在内存中重复使用直到过期为止,届时将自动重新验证。只有当你的凭证改变(比如更改了密码)或者使用了其他账户时,你才需要重新创建一个OpenStack或者Rackspace对象。

如果您的PHP进程是高度瞬态(例如, 每次在浏览器中浏览,web页面就重新加载),那么您可以缓存的凭据(例如,使用APC或本地磁盘文件),这样就不必为每个请求确认。Php-opencloud提供了两个方法来导出和导入证书。

反复重新验证可以产生身份验证服务器上的负载和可能降所有用户的低性能。此外,一些部署将会限制你的验证频率。

导出证书

OpenStack::ExportCredentials()方法可以以数组形式导出当前的证书(authorizationtoken, expiration, tenant ID,和servicecatalog):

$cloud = new \OpenCloud\OpenStack('URL', array('username'=>'xx','password'=>'yy'));
$cloud->Authenticate(); // retrieves credentials from identity service
$arr = $cloud->ExportCredentials();
store_credentials_in_cache($arr);

在这个例子中,Authentiate()方法从身份服务中检索证书;store_credentials_in_cache()函数(不是php-opencloud提供的,这是一个虚构的例子)把证书存储到浏览器的APC缓存中。当然,你可以创建一个函数将证书保存到本地文件中,数据库中或者其他你需要的地方。

导入证书

OpenStack::ImportCredentials()方法用来导ExportCredentials()方法创建的证书数组:

$cloud = new \OpenCloud\OpenStack('URL', array('username'=>'xx','password'=>'yy'));
$arr = load_credentials_from_cache();
$cloud->ImportCredentials($arr);

这个例子中,假设的函数load_credentials_from_cache()读取ExportCredentials()方法之前保存的证书。

注意ImportCredentials()方法必须在其他OpenStack方法前使用。因为当需要token的时候OpenStack会重新验证。

$cloud = new \OpenCloud\OpenStack('URL', array('username'=>'xx','password'=>'yy'));
// this automatically re-authenticates against the identity service
$nova = $cloud->Compute(...);
// this accidentally overwrites the new credentials with the old one
$cloud->ImportCredentials(...);

也就是说,这可能不会提高效率,实际上这可能造成身份服务请求的数量成倍提高(因为缓存证书可能失效,迫使下次请求的时候重新验证)。

翻译自:https://github.com/rackspace/php-opencloud/blob/master/docs/userguide/authentication.md

【PHP SDK for OpenStack/Rackspace APIs】身份验证的更多相关文章

  1. 云计算OpenStack核心组件---keystone身份认证服务(5)

    一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等 ...

  2. 无责任Windows Azure SDK .NET开发入门(二):使用Azure AD 进行身份验证

    <編者按>本篇为系列文章,带领读者轻松进入Windows Azure SDK .NET开发平台.本文为第二篇,将教导读者使用Azure AD进行身分验证.也推荐读者阅读无责任Windows ...

  3. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证-2.2身份验证开发]

    2.2身份验证开发 在我们的案例中,我们是用户通过Web应用程序进行身份识别. 上面的图示说明了如下的一些概念 l Azure AD 是标识提供程序,负责对组织的目录中存在的用户和应用程序的标识进行验 ...

  4. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证]

    二.使用Azure AD进行身份验证 之所以将Azure AD 作为开始,是应为基本上我们所有应用都需要进行安全管理.Azure Active Directory (Azure AD) 通过以下方式简 ...

  5. openstack中的身份管理

    原文:http://blog.csdn.net/xxfigo/article/details/8785748 原作者关于openstack的一系列文章http://blog.csdn.net/xxfi ...

  6. 宣布正式发布 Windows Azure 多重身份验证

    身份和访问管理是安全之锚,是企业 IT 部门的首要任务.它是随时随地向员工.合作伙伴和客户提供访问的关键所在.今天,我们非常高兴地宣布正式发布 Windows Azure 多重身份验证,从而为 IT ...

  7. Ruby学习笔记7: 添加身份验证(adding Authentication)

    我们已经完成了Category & Product页面内容的增删改查,再加入一个身份验证即可成为一个较完整的Rails App了.本文就来完成这个任务. We now need to give ...

  8. ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). l  Windows身份验证—常结合应用程序自定义身份验证使用使用这种身份验证模式时,AS ...

  9. 003-官网安装openstack之-keystone身份认证服务

    以下操作均在控制节点进行 1.控制节点安装keystone服务 概念理解: Keystone是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, 它实现了OpenStack的Ident ...

随机推荐

  1. word2vec 中的数学原理具体解释(三)背景知识

      word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas M ...

  2. C++多态原理

    C++的多态性是通过动态绑定实现的 非虚函数是在编译时绑定的; 通过对象进行的函数(虚函数,非虚函数)也是编译时绑定的; C++编译器在编译的时候,要确定每个对象调用的函数(要求此函数是非虚函数)的地 ...

  3. typedef和define

    typedef int INT; #define INTPTR1 (int*) typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性. #define是一 ...

  4. CentOS6.5 搭建基础PHP环境(yum安装)

    转载:闲来无事 » CentOS6.5 搭建基础PHP环境(yum安装) yum安装php环境只需要几条简单的命令就可以实现,OK,各位客官,菜来了.首先确保你的yum源可用,或者网络是通的,不然下载 ...

  5. Qt学习之路:自定义Model三篇,自定义委托等等

    http://devbean.blog.51cto.com/448512/d-8/p-2

  6. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  7. [C++Boost]程序参数项解析库Program_options使用指南

    介绍 程序参数项(program options)是一系列name=value对,program_options 允许程序开发者获得通过命令行(command line)和配置文件(config fi ...

  8. Web网页中内嵌Activex的Activex插件开发 .

    转载自: http://blog.csdn.net/tttyd/article/details/5258096 源代码下载 http://files.cnblogs.com/tttyd/Activex ...

  9. 一步一步重写 CodeIgniter 框架 (1) —— url 如何映射到具体的方法

    CodeIgniter 框架最显著的特征就是 MVC 模式,它的做法就是提取 url 中的'分段', 映射到某个类的某个方法,从而由该方法来输出最终显示的页面内容.那么我们第一课中就是实现一个这样的原 ...

  10. Java Socket实现HTTP客户端来理解Session和Cookie的区别和联系

    HTTP协议本身是无状态的,即使是同一台电脑同一个浏览器打开同一个页面两次,服务器不知道这两次请求是同一个客户端发送过来的,两次请求是完全独立的.例如,第一次请求时已经登录了,第二次再请求服务器会“忘 ...