OpenID 背景知识介绍
传统的身份认证是将用户信息存放在一个独立 的系统中,可能是目录服务器,数据库,本地文件系统或自定义的系统。认证时 ,用户提供用户名和密码,与用户信息系统进行核对,确认用户是否合法。而 OpenID 是一个去中心化的网上身份认证系统。对于支持 OpenID 的网站,用户 不需要记住像用户名和密码这样的传统验证标记。取而代之的是,他们只需要预 先在一个作为 OpenID 身份提供者(Identity Provider)的网站上注册,通过 在身份提供者网站的认证而完成支持 OpenID 的网站的认证,从而大大简化了身 份验证过程。
任何网站都可以使用 OpenID 来作为用户登录的一种方式 ,任何网站也都可以作为 OpenID 身份提供者。因为 OpenID 既解决了问题而又 不需要依赖于中心性的网站来确认数字身份,所以正在被越来越多的大网站采用 ,例如 Google, Facebook,myOpenID 和 Yahoo,他们都是 OpenID 身份提供 者。目前主流的 OpenID 规范有两种,一种是 OpenID 2.0,一种是 OAuth 1.0 。Google,myOpenID 和 Yahoo 采用的是 OpenID 2.0 规范,Facebook 采用的 是 OAuth 1.0 规范。
OpenID 规范只定义了基本的认证机制,在应用当 中,往往还需要与 OpenID 身份提供者之间进行用户属性的交换,因此在 OpenID 规范基础之上,还有两个关于属性交换的协议,SREG(Simple Registration)和 AX(Attribute Exchange)。SREG 只定义了一些常用的属性 ,例如 nickname,email 和 fullname。AX 更加复杂一些,它实际上可以交换 任何信息,只要交换的双方都定义了该属性。
WebSphere Portal 8.0 对 OpenID 的支持
WebSphere Portal 作为一个信息提供者,从 8.0 版本开始支持 OpenID , 用户可以通过配置指定自己支持哪些 OpenID 身份提供者,在登录界面选择适当 的身份提供者进行认证,从而达到认证 WebSphere Portal 的目的,进一步访问 网站内的个性化信息和服务。从实现角度讲,WebSphere Portal 是基于 WebSphere 应用服务器的,WebSphere 应用服务器本身提供一种插入点——信任 关联拦截器(Trust Association Interceptor,TAI),可以通过实现 TAI 来 完成认证的交接,WebSphere Portal 8.0 正是实现了 TAI,从而在 WebSphere 应用服务器和 OpenID 身份认证者之间建立信任关系。另外,即使配置了 OpenID 身份提供者,WebSphere Portal 用户仍然可以按照原有的方式进行登录 。
WebSphere Portal 中配置 OpenID 有两种方式,用户可以根据自己的 需要选择一种方式将外部用户整合到 WebSphere Portal 中,当然二者也可以混 合使用:
WebSphere Portal 中的一个用户与 OpenID 身份提供者的一个用户绑定,二 者一一对应。这种映射关系会存储到用户的属性中,具体存储在哪个属性里可以 在 WebSphere Portal 中进行定制。
将 OpenID 身份提供者的用户整体作为一个 WebSphere Portal 用户。管理 员可以统一为这些用户设置权限,而不需要他们在 WebSphere Portal 中重新注 册用户。这种配置方式对用户使用来说需要的步骤较少,而管理员需要做更多的 配置步骤。
这两种不同的配置方式中属性交换的配置位置是不同的。本文会以 OpenID 2.0 规范为例,具体介绍 WebSphere Portal 中配置 OpenID 的这两种方式和一 些使用示例。
OpenID 身份提供者用户与 WebSphere Portal 用户一一映 射的配置
这种配置方式中,OpenID 身份提供者的一个用户可以与 WebSphere Porta 的用户绑定,一一映射,例如 OpenID 身份者的一个用户名为 portal80user1, 与 WebSphere Portal 的用户 user1 绑定。当然,这不意味着 OpenID 身份提 供者的每个用户都与 WebSphere Portal 的用户映射,也不要求 WebSphere Portal 中的每个用户都与 OpenID 身份提供者的用户映射,这种映射关系可以 由用户自身指定,因此它存储在用户的某个属性里,具体存储在哪个属性是可以 定制的。
配置步骤
WebSphere Portal 可以同时配置多个 OpenID 身份提供者,例如 Google, Yahoo 和 myOpenID,管理员可以决定选择与哪些 OpenID 身份提供者配置。但 在配置之前,必须保证 WebSphere Portal 服务器的系统时间是正确的。假定 WebSphere Portal 服务器是安装在 Linux 操作系统上,管理员希望配置 Google 和 Yahoo 两个 OpenID 身份提供者,具体配置过程如下。
1. 运 行 enable-identityprovider-tai 任务
首先管理员需要运行 enable- identityprovider-tai任务:
./ConfigEngine.sh enable- identityprovider-tai -Didp.providerlist=openid \
-Dopenid.servicenames=Google,Yahoo - Dopenid.servicenames.endpoints=\
https://www.google.com/accounts/o8/id,http://me.yahoo.com \
-DWasUserId=wpsadmin -DWasPassword=wpsadmin
该任务中使用的定制参数含义如下:
-Didp.providerlist
指定支持的 OpenID 身份提供者类型列表。如果是配置 Google 和 Yahoo 等 满足 OpenID 2.0 规范的身份提供者,那么该参数值是 openid ,如果是配置 FaceBook 等满足 OAuth 1.0 的身份提供者,那么该参数值是 facebook。在我 们的假定情况下,这个参数应该是 openid。
-Dopenid.servicenames
如果配置 OpenID 2.0 的身份提供者,该参数应列出需要配置的身份提供者 列表。在我们的假定情况下,这个参数应该是 Google,Yahoo。
-Dopenid.servicenames.endpoints
OpenID 身份认证者的端点 URL,如果配置了多个身份认证者,这里应该一一 列出,所以这个参数列表中参数的个数应该和 -Dopenid.servicenames一致。在 我们假定的情况下,这个参数应该是 https://www.google.com/accounts/o8/id,https://me.yahoo.com/。
值得注意的是,这个任务是可以反复运行的,第二次运行的结果会覆盖前一 次,也就是说,如果用户想增加一个支持的 OpenID 身份提供者,在重新运行这 个任务时,必须在参数中把原有的身份提供者和新增的身份提供者都列出。
2. 修改 Profile Management 和 Login 两个 portlet 的配置参数
为了在界面中显示那些为支持 OpenID 设计增加的元素,需要对 Profile Management 和 Login 两个 Portlet 进行额外的配置。这些配置必须 以管理员的身份去做。
首先作为管理员登录 WebSphere Portal,浏览到 Administration>Portlet Management>Portlets,找到 Login Portlet, 点击 Configure portlet 按钮,修改以下参数并保存:
show_idp_option
是否显示 Login portlet 中为支持 OpenID 而设计的元素,缺省是 false, 在我们的假定情况中应该设置成 true。
show_idp_max
显示的 OpenID 身份提供者的最大数目。缺省是 4,在我们的假定情况下可 以设置成 2。
providername.image
身份提供者的图标。Login portlet 缺省没有这个参数,需要管理员添加。 如果配置多个身份提供者,会有多个这样的参数。在我们的假定情况中,需要添 加下面的两个参数。如果没有指定,图标上的内容(文字)会是身份提供者的名 字。
Google.image: https://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif
Yahoo.image: http://l.yimg.com/a/i/ww/met/yahoo_logo_us_061509.png
然后找到 Profile Management portlet,点击 Configure portlet 按钮 ,修改以下参数并保存:
show_idp_option
是否显示 Login portlet 中为支持 OpenID 而设计的元素,缺省是 false, 在我们的假定情况中应该设置成 true。
show_idp_max
显示的 OpenID 身份提供者的最大数目。缺省是 4,在我们的假定情况下可 以设置成 2。
providername.image
身份提供者的图标。Login portlet 缺省没有这个参数,需要管理员添加。 如果配置多个身份提供者,会有多个这样的参数。在我们的假定情况中,需要添 加两个参数,如下所示。如果没有指定,图标上的内容(文字)会是身份提供者 的名字。
Google.image: https://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif
Yahoo.image: http://l.yimg.com/a/i/ww/met/yahoo_logo_us_061509.png
3. 拷贝必要的文件
将以下文件拷贝至 AppServer_root\lib\ext 目录下:
PortalServer_root\prereqs.infra\prereq.commons.httpclient\lib \ext\commons-codec-1.3.jar PortalServer_root\prereqs.infra\prereq.commons.httpclient\lib\ext\comm ons-httpclient-3.0.1.jar
4. 获取 OpenID 身份提供者的 SSL 证书
作为管理员登录到 WebSphere 集成解决方案控制台(Integrated Solutions Console),浏览至 Security>SSL certificate and key management,在 Configuration settings 下点击 Manage endpoint security configurations,在 Outbound>hostname>nodes>node_name>servers 中,选择 WebSphere_Portal,然后在 Related Items 中选择 Key stores and certificates。
单击 NodeDefaultTrustStore,在 Additional Properties 中选择 Signer certificates。
然后为每个 OpenID 身份提 供者单击 Retrieve from port,填入以下信息:
Host
OpenID 身份提供者的端点,不包含协议头。在我们假定的情况中,为 Google 应该输入 www.google.com,为 Yahoo 应该输入 me.yahoo.com。
Port
OpenID 身份提供者的端口号,通常是 443。
Alias
为 SSL 证书指定别名,名字可以是任意的,但最好能标识身份提供者。例如 为 Google 可以输入 Google,为 Yahoo 可以输入 Yahoo_cert 等。
点击 Retrieve signer information,获取身份提供者的 SSL 证书,然后保 存。在我们假设的情况下,这里会分别为 Google 和 Yahoo 获取证书并保存。
5. 重启 WebSphere Portal 服务器
在 wp_profile_root/bin目 录下运行以下命令,重启 WebSphere Portal 服务器,使得以上配置生效。
./stopServer.sh WebSphere_Portal -username admin_userid - password admin_password ./startServer.sh WebSphere_Portal
配置完成后,WebSphere Portal 的登录页面会如图一所示。
图 1. 配置 OpenID 后 WebSphere Portal 的登录页面