在你使用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自定义控件大全

    1,自定义Edittext, TextView,带底线的Edittext, TextView 2.自定义圆形ImageView,圆角ImageView 3,下拉刷新LinearLayout 4,多点触 ...

  2. python package的概念

    主目录下面文件夹pack,可以按照 import pack.mo as mo 来调用模块,意为把pack文件夹当作一个包

  3. 标准I/O库函数的缺陷

    标准IO库存在着两个缺陷.首先,它是在某一台特定类型的机器上实现的,而没有考虑其他的具有不同特性的机器.这样就可能导致在其中的一台机器上运行很好的程序,在另外一台机器上却出现错误,而这其中的原因仅仅是 ...

  4. Arcgis镶嵌数据集java代码操作

    转自:http://www.cdtarena.com/javapx/201307/9105.html 镶嵌数据集结合了之前arcgis管理影像的栅格目录和栅格数据集,为解决海量影像管理提供了很好的方案 ...

  5. Gradle的简介与安装

    Gradle介绍 Gradle是一个基于JVM的构建工具,它提供了: 像Ant一样,通用灵活的构建工具 可以切换的,基于约定的构建框架 强大的多工程构建支持 基于Apache Ivy的强大的依赖管理 ...

  6. Android_简单笔记一

    入门学习Android的简单笔记(已经安装好了开发环境ADT) 一.关于 AndroidManifest.xml文件 1. android:icon和android:label定义了应用程序安装后显示 ...

  7. iOS 使用Block实现函数回调

    事实上.iOS中的Block就是C++中的函数指针,实现方式都是一样的,以下贴出一个简单的实践. 首先,创建一个回调的类 BlockStudy.h // // BlockStudy.h // Bloc ...

  8. mysql 初识之日志文件篇

    日志文件 1. err日志     error log 记录mysql在运行的过程中所有较为严重的警告和错误信息,以及mysql server每次启动和关闭的详细信息.系统在默认情况下关闭error ...

  9. 使用BAT方法结束进程

    @echo off taskkill /f /im GAM.exe taskkill /f /im GCL10.exe http://www.cnblogs.com/FKdelphi/p/501540 ...

  10. Atitit.dwr3 不能显示错误具体信息的解决方式,控件显示错误具体信息的解决方式 java .net php

    Atitit.dwr3 不能显示错误具体信息的解决方式,控件显示错误具体信息的解决方式 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处 ...