【PHP SDK for OpenStack/Rackspace APIs】身份验证
在你使用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】身份验证的更多相关文章
- 云计算OpenStack核心组件---keystone身份认证服务(5)
一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等 ...
- 无责任Windows Azure SDK .NET开发入门(二):使用Azure AD 进行身份验证
<編者按>本篇为系列文章,带领读者轻松进入Windows Azure SDK .NET开发平台.本文为第二篇,将教导读者使用Azure AD进行身分验证.也推荐读者阅读无责任Windows ...
- 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证-2.2身份验证开发]
2.2身份验证开发 在我们的案例中,我们是用户通过Web应用程序进行身份识别. 上面的图示说明了如下的一些概念 l Azure AD 是标识提供程序,负责对组织的目录中存在的用户和应用程序的标识进行验 ...
- 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证]
二.使用Azure AD进行身份验证 之所以将Azure AD 作为开始,是应为基本上我们所有应用都需要进行安全管理.Azure Active Directory (Azure AD) 通过以下方式简 ...
- openstack中的身份管理
原文:http://blog.csdn.net/xxfigo/article/details/8785748 原作者关于openstack的一系列文章http://blog.csdn.net/xxfi ...
- 宣布正式发布 Windows Azure 多重身份验证
身份和访问管理是安全之锚,是企业 IT 部门的首要任务.它是随时随地向员工.合作伙伴和客户提供访问的关键所在.今天,我们非常高兴地宣布正式发布 Windows Azure 多重身份验证,从而为 IT ...
- Ruby学习笔记7: 添加身份验证(adding Authentication)
我们已经完成了Category & Product页面内容的增删改查,再加入一个身份验证即可成为一个较完整的Rails App了.本文就来完成这个任务. We now need to give ...
- ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释
ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). l Windows身份验证—常结合应用程序自定义身份验证使用使用这种身份验证模式时,AS ...
- 003-官网安装openstack之-keystone身份认证服务
以下操作均在控制节点进行 1.控制节点安装keystone服务 概念理解: Keystone是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, 它实现了OpenStack的Ident ...
随机推荐
- android Bitmap围绕一个点进行旋转
在项目中需要使用定位功能,也就是一个点围绕一个圆心进行旋转,查看了canvas的函数也就只有一个 canvas.drawBitmap(bitmap, matrix, paint)通过使用Matrix来 ...
- 死锁 android ANR
以下为一段ANR的LOG,主要是在WindowManagerService.java和ActivityManagerService.java中实现. W/WindowManager( 2183): K ...
- linux+nginx+mysql+php高性能服务器搭建
1.安装基础包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freet ...
- 14 - XML、JSON、PLIST对比和APP生命周期
XML中间的 数据表达/传输数据的语言 优点:特别强大 强大到很多平台都有基于XML的独立语言,如MXML.HTML 缺点:传输小型数据时,特别啰嗦 size / speed = time JSON ...
- Robot Framework与Web界面自动化测试学习笔记:如何判断单选框的选中状态
单选按钮是个常见的html元素,在网页中往往提供一组单选按钮来做选项. 这样在自动化测试用例中需要判断当前选中的按钮是否与预期的一直. 可以这样来操作: ${value} Get Element ...
- perl 读取cookie
use LWP::UserAgent; use HTTP::Date qw(time2iso str2time time2iso time2isoz); use Net::Ping; use Sock ...
- pycURL的内存问题
pycURL的内存问题 最近用pycURL写了一个工具,注册账号用的.写是写好了,但是发现内存占用超大.40个线程运行一天跑到了3.7G的内存. 于是着手调查这个问题. 调查方法就是用python的g ...
- 基于visual Studio2013解决C语言竞赛题之0612递归
题目
- boost 分析命令行参数
#include <boost/program_options.hpp> #include <iostream> #include <vector> using n ...
- Linux 经典电子书共享下载
Linux 经典电子书共享下载 Linux网络管理员指南--Linux领域两位领导人物的作品—相当于“Linux 文档项目”.rar vim用户手册_603.0.pdf [Linux系统管理技术手册( ...