在你使用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. android的fragment基本介绍

    可以分为下面的几部分: 使用支持库 创建一个Fragment 创建一个动态UI 多个Fragment之间的通信 1.使用支持库 如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容. 如果您的 ...

  2. DH11数字温湿度传感器

    DH11数字温湿度传感器是一种集温度.湿度一体的复合传感器,它能把温度和湿度物理量通过温.湿度敏感元件和相应电路转化成方便计算机.PLC.智能仪表等数据采集设备直接读取的数字量.DHT11由电阻式感湿 ...

  3. 什么是C# Lambda表达式?形如:p=>p.abc

    这里介绍C# Lambda表达式,它实际上和匿名方法没有什么不同.Lambda的输入参数就对应着delegate括号里面的参数,由于C# Lambda表达式可以推断参数的类型,所以这里的参数无需声明. ...

  4. C++自增和自减运算符(--和++)

    在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如:++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)--i ...

  5. Python中的循环与跳出

    --start-- for循环: for i in range(3): user_input = input("Your username:") passwd = int(inpu ...

  6. awk 的逻辑运算字符

    既然有需要用到 "条件" 的类别,自然就需要一些逻辑运算啰-例如底下这些:运算单元代表意义> 大于小于>= 大于或等于小于或等于== 等于!= 不等于值得注意的是那个 ...

  7. CSS3_3D效果(IE10_火狐_谷歌)

    好久没写博客了,看了下记录,上次最后写的最后一篇已经是8月1号了,最近有些小东西整理下,当巩固吧 废话少说,直奔本文主题 css3提供了很多新鲜好玩的东西,transform就是其中一个,可以进行 2 ...

  8. WebStorm 7.0 注册码

    User Name: EMBRACE License Key:===== LICENSE BEGIN =====24718-1204201000001h6wzKLpfo3gmjJ8xoTPw5mQvY ...

  9. Introduction to the Build Lifecycle

    Introduction to the Build Lifecycle Table Of Contents Build Lifecycle Basics Setting Up Your Project ...

  10. Windows的TCP协议参数

    注册表编辑器:regedit 表项:HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\Services\Tcpip\Parameters 窗口扩大因子 & ...