也许大家都有这样的经历与烦恼:当你为了使用某个网站的服务时(若你还没在该网站上注册过),你不得不先注册一个帐号。当你在一堆的网站上注册帐号后,你必需面临管理这些帐号的烦恼。也许你会这样考虑,不同网站注册的帐号信息都用同一个用户名与密码,这样也许会减轻你的烦恼,但是却给你带来的安全隐患,一旦你的帐号在某个网站泄漏后。OpenID正式基于解决这类问题而提出的一个国际标准,用于打通各大网站之间的用户体系。你可以使用某一网站的帐号去登录另一网站,只要这些网站都是实现了OpenID的服务。目前Google,Yahoo,Flickr,AOL等都支持OpenId服务。2009年2月初,Facebook也宣布加入OpenId基金会。

一、OpenID简介

OpenID官方网站http://openid.net首页对OpenID的介绍如下:OpenID is a free and easy way to use a single digital identity across the Internet.With one OpenID you can login to all your favorite websites and forget about online paperwork!其大概意思就是说:OpenID是一个单一的、免费的数字身份标识,使用它,你就可以登录你经常登录的网站。

OpenID提高了互联网服务的用户体验。显而易见,就终端用户而言,OpenID降低了用户管理多个网站帐号的烦恼,用户可以享受类似单点登录的体验。对于企业来说,OpenID降低了用户帐号管理的成本。对于应用开发者来说,OpenID是一个开放的、去中心化的,免费的、以用户为中心的身份标识体系。Java的一个优势是跨平台,大家都熟悉的那句话:Write Once,Run Anywhere(一次编写,到处运行),同样,OpenId的优势是:Register Once, Use Anywhere(一处注册,到处使用)。

OpenId是一个以用户为中心的数字身份识别框架,它具有开放、分散、自由等特性。OpenId的创建是基于这样一个概念:我们可以通过URI(或者URL网址)来识别一个网站。同样,我们也可以通过这样的方式来识别一个用户的身份。OpenId系统的身份认证就是通过URI来认证用户身份。目前绝大部分网站都是通过用户名与密码来登录认证用户身份,这就要求大家在每个你要使用的网站上注册一个帐号。如果使用OpenId,你可以在一个提供OpenId的网站上注册一个OpenId,以后你可以使用这个OpenId去登录支持OpenId的网站。这正是一处注册,到处使用的体现。

二、OpenID相关术语

  • End User:终端用户,使用OP与RP的服务
  • Relying Party依赖方:简称RP,服务提供者,需要OP鉴权终端用户的身份
  • OpenID Provider:OpenID提供者,简称OP,对用户身份鉴权
  • Identifier标识符:标识符可以是一个HTTP、HTTPS或者XRI(可扩展的资源标识)
  • User-Agent:实现了HTTP1.1协议的用户浏览器
  • OP Endpoint URL:OP鉴权的URL,提供给RP使用
  • OP Identifier:OP提供给终端用户的一个URI或者XRI,RP根据OP Identifier来解析出OP Endpoint URL与OP Version
  • User-Supplied Identifier:终端用户使用的ID,可能是OP提供的OpenID,也可以是在RP注册的ID。RP可以根据User-Supplied Identifier来解析出OP Endpoint URL、OP Version与OP_Local Identifer
  • Claimed Identifier:终端用户声明自己身份的一个标志,可以是一个URI或者XRI
  • OP-Local Identifier:OP提供的局部ID

三、OpenID认证流程

OpenID一个典型的应用场景就是:当终端用户登录一个支持OpenID的网站(RP)时,与在该网站进行用户登录方式不同(该终端用户也许没有在该网站注册过),该用户选择了以OpenID的方式登录该网站。OpenID是该用户在另一个网站(OP)注册的一个URL。RP就会根据用户提供的OpenID去发现OP,然后请求该OP对该用户身份进行鉴权。OP收到RP请求后,会要求用户登录OP认证页面进行鉴权,鉴权后,OP会提醒该用户是否容许外部网站对你鉴权。用户同意后,OP将鉴权结果返回给RP。

下面就OpenID的认证流程进行简要的介绍,下图就是OpenID的认证流程:

1. 终端用户请求登录RP网站,用户选择了以OpenID方式来登录

2. RP将OpenId的登录界面返回给终端用户

3. 终端用户以OpenID登陆RP网站

4. RP网站对用户的OpenID进行标准化,此过程非常负责。由于OpenID可能是URI,也可能是XRI,所以标准化方式各不相同。具体标准化过程是:如果OpenID以xri://、xri://$ip或者xri://$dns开头,先去掉这些符号;然后对如下的字符串进行判断,如果第一个字符是=、@、+、$、!,则视为标准的XRI,否则视为HTTP URL(若没有http,为其增加http://)。

5. RP发现OP,如果OpenId是XRI,就采用XRI解析,如果是URL,则用Yadis协议解析,若Yadis解析失败,则用Http发现。

6. RP跟OP建立一个关联。两者之间可以建立一个安全通道,用于传输信息并降低交互次数。

7. OP处理RP的关联请求

8. RP请求OP对用户身份进行鉴权

9. OP对用户鉴权,请求用户进行登录认证

10. 用户登录OP

11. OP将鉴权结果返回给RP

12. RP对OP的结果进行分析

13. RP分析后,如用户合法,则返回用户鉴权成功,可以使用RP服务

以上就是OpenId认证流程简介。OpenID4Java是一个开源库,提供了OpenID框架。OpenID4Java是对OpenID1.1和2.0规范的实现,目前它通过code.google.com系统进行维护。此项目初始代码是由Sxip捐献出来的,而后Atlassian等公司参与进来,并为实现支持2.0规范(属性交换规范)的API贡献了大量的工作。OpenID4Java项目地址:http://code.google.com/p/openid4java/

四、Yahoo OpenID服务

目前很多大公司如Google,Yahoo,AOL,Microsoft等等都支持OpenId。下面我们可以看看这个网站,他是支持openid,http://www.plaxo.com/

我们点击右上角的登录按钮,请求登录该网站,登录页面如下图所示:

与传统的登录页面不一样的是,该登录页面还提供了以OpenID方式登录的入口。我们选择使用Yahoo用户进行登录,将跳转到yahoo的登录页面,如下图所示:

输入用户名与密码,Yahoo提示您,您将要登录到外部网站Plaxo,请求您的确认,如下所示:

同意后,您将以Yahoo OpenID登录到plaxo网站。

五、OpenID的前景

光从技术角度来考量OpenID的前景时,我们都对他充满着信息,激情。OpenID的出现,确实很该用户友好的体验,更方便用户畅游互联网。但是,这只是技术上的考量。OpenID的最终用户是网民们。OpenID提出到现在,有多少人知道有OpenID的存在,甚至连身边的程序员们都很少知道,更不用说普普通通的网民们了。所以从技术化的东西到被大家所熟知的技术,OpenID还有很长的路要走。过去,国内也有不少技术人员对OpenID充满着激情,但是他们的激情是短暂的,或者不能称之为激情。总结起来,OpenID在以下某些方面还令人担忧。

一是:OpenID认知度太低,上面已解释过。

二是:密码安全度降低,只要OpenID的密码被泄露,基本上所有的网站都被泄露。这与"一处注册,到处使用"形成对应,即"一处泄露,到处泄露"。

三是:OpenID并非真正的Open,很多网站表面上支持OpenID,实际上,还是不断的骚扰OpenID用户,在他们网站上注册帐号,在背后偷偷的沉淀OpenID用户。所以,就目前来说,OpenID对于集团内各子公司用户体系的打通还是可行的,对于与外部公司是否使用OpenID还得谨慎点。

Php OpenID的更多相关文章

  1. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  2. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  3. 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样

    使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...

  4. PHP代码 如何网页获取用户的openid

    public function getOpenid($appid, $appsecret) { $SERVER_NAME = $_SERVER['SERVER_NAME']; $REQUEST_URI ...

  5. 微信开发笔记:获取用户openid,以及用户头像昵称等信息

    微信开发的时候有一个很便利的途径来进行一个用户的一步注册登录,就是使用用户的微信信息来直接进行登陆,可以省去很多不必要的麻烦.那具体这些信息是如何来获取的呢? 首先呢,我们需要对微信进行一个授权,让微 ...

  6. 微信——获取用户基本信息及openid 、access_token、code

    获取用户信息,需要获取 access_token.openid 然后调用接口https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCES ...

  7. .NET开源OpenID和OAuth解决方案Thinktecture IdentityServer

    现代的应用程序看起来像这样: 典型的交互操作包括: 浏览器与 web 应用程序进行通信 Web 应用程序与 web Api (有时是在他们自己的有时代表用户) 通信 基于浏览器的应用程序与 web A ...

  8. 微信接口-获取用户openid基本信息

    一.协助获取微信用户openid功能 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri= ...

  9. 获取openid 的步骤

    1.引导客户打开 https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid &redirect_uri=https://w ...

  10. IdentityServer4 简单使用,包括api访问控制,openid的授权登录,js访问

    写在前面 先分享一首数摇:http://music.163.com/m/song?id=36089751&userid=52749763 其次是:对于identityServer理解并不是特别 ...

随机推荐

  1. Spark Executor Driver资源调度小结【转】

    一.引子 在Worker Actor中,每次LaunchExecutor会创建一个CoarseGrainedExecutorBackend进程,Executor和CoarseGrainedExecut ...

  2. 实验六:分析Linux内核创建一个新进程的过程

    原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 题目自拟,内容围绕对Linu ...

  3. Currency Exchange

    主要找正环: #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm& ...

  4. 重新定义malloc和free 防止内存泄漏

    1, 定义供应用程序使用的头文件//libmem.h#ifndef _LIBMEM_H_#define _LIBMEM_H_ //声明自定义malloc及free函数extern void *my_m ...

  5. java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    方法1:把SpringBoot中main方法所在的class不再继承org.springframework.boot.context.web.SpringBootServletInitializer即 ...

  6. java代码调用rtx发送提醒消息

    http://www.cnblogs.com/qstar/archive/2012/02/03/Astar.html 借用一下!好东西

  7. ubuntu14.04下嵌入式工作环境搭建

    昨天作死一不小心把小红帽home目录下的东西删光了.跟着国嵌的视频学了这么久,对linux也算是有些熟悉,就决定自己在ubuntu下搭建一个工作环境.整个过程还算比较顺利,不过也有些小波折.下面把这次 ...

  8. <a>标签的href属性

    <a> 标签的 href 属性用于指定超链接目标的 URL. 语法 <a href="value"> 属性值 值 描述 URL 超链接的 URL.可能的值: ...

  9. sts 去掉启动的rss功能

    STS(spring tools suite) 每次开启都显示,比较烦人,可以在设置中禁用掉,具体方法:window->Perferences,然后查找dashboard,将启动时展示dashb ...

  10. UINavigationController 导航控制器 ,根据文档写的一些东西

    今天讲了导航控制器UINavigationController 和标签栏视图控制器UITabBarController 先来说一说导航视图控制器  UINavigationController 导航控 ...