Php OpenID

也许大家都有这样的经历与烦恼:当你为了使用某个网站的服务时(若你还没在该网站上注册过),你不得不先注册一个帐号。当你在一堆的网站上注册帐号后,你必需面临管理这些帐号的烦恼。也许你会这样考虑,不同网站注册的帐号信息都用同一个用户名与密码,这样也许会减轻你的烦恼,但是却给你带来的安全隐患,一旦你的帐号在某个网站泄漏后。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还得谨慎点。

时间: 2024-11-03 21:32:49

Php OpenID的相关文章

java微信授权获取OPENID,ACCESS_TOKEN,用户信息

获取微信的openId流程 1.获取微信code 使用接口 : appId 是当前开发者的appId 不是用户的  path  是回调地址 这个链接是授权链接,当重定向这个链接的时候,会展示授权页,点击授权之后 跳入你path的请求接口    回调中带了一个参数code获取到就行 https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+path+"&

微信openid和UnionID (多公众号如何判断是否是同一人)

以下内容源于网络,因为非博客园信息,有想收藏,只能直接复制粘贴了,还希望原稿人员理解. 微信公众平台更新,为开发者提供UnionID机制 经开发者反馈,由于同一公司下多个公众号之间需要用户帐号互通,微信开放平台提供了UnionID机制,来解决此问题. 通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通. 1. 将多个公众号绑定到同一个微信开放平台(open.weixin.qq.co

获取微信用户唯一标识openid | 小程序

一.基础知识 ? 接口地址https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code? 请求参数appid:小程序的唯一标识secret:小程序的app secretjs_code:用户的登录凭证code(使用wx.login({})可获取到)grant_type:填写authorization_code? 返回

paip.微信菜单直接跳转url和获取openid流程总结

#------不能直接跳转,贝儿提示不安全的链接.. #-------使用auth跳转. //todox 直接转到..  direct goto ViewButton skrechCard = new ViewButton("刮刮卡o428,view," + "https://open.weixin.qq.com/connect/oauth2/authorize?" + "appid="+appId+"&" + &qu

微信公众平台如何获取用户的OpenID

如何获取用户的OpenID,对于微信开发模式下的开发来说,那就是一个非常简单的小功能了.简单介绍一下我是怎样去获取OpenID的. 微信服务器与公众账号服务器交互的信息可以分为3类:请求消息.事件和响应消息. (1)请求消息指用户发送给公众账号的信息包含: 文本消息.图片消息.语音消息.视频消息.小视频消息. 地理位置消息.链接消息 (2)事件指用户对公众账号的做出的某种操作时,会使得微信服务器通过事件推送的形式通知到公众账号服务器,从而开发者可以获取到该信息.包含:关注/取消关注事件.扫描带参

一个功能完备的.NET开源OpenID Connect/OAuth 2.0框架——IdentityServer3

今天推荐的是我一直以来都在关注的一个开源的OpenID Connect/OAuth 2.0服务框架--IdentityServer3.其支持完整的OpenID Connect/OAuth 2.0标准,使用它就可以轻易地搭建一个单点登录服务器. 说是一直关注,是因为1年前,要为一个平台搭建一个OAuth 2.0服务器,当时由于IdentityServer3还处于开发阶段,核心还不稳定,扩展功能也不完备.无奈只好熟读OAuth 2.0的规范,并根据www.asp.net网站上的一个简单示例自己实现了

ASP.NET 中OAUTH 2.0 及OPENID CONNECT的介绍

    了解以下内容对ASP.NET 5中的验证中间件应用有很大帮助! OAUTH2是目前很多大型网站都使用的对外提供开放资源接口的应用标准,比入taobao\alipay\腾讯\豆瓣等.它和目前的另外一种OPENID标准是不同的两个概念,OPENID是提供用户验证的,而OAUTH是提供授权的,是OPENID的一个升级版本,由两个机构负责维护的.OPENID的最新标准OpenID Connect[(Identity, Authentication) + OAuth 2.0 = OpenID Co

支付宝&腾讯的OpenID之路

     10年前上网很简单,那时我只用记住三个账号:QQ.21cn邮箱和中国联众.10年后的今天,应用或服务层次不穷:盛大网游.淘宝.豆瓣.人人.微博--太多的账号和密码我已经没办法记住.如果有一个id可以登陆所有的网站,而且id所关联的个人信息.关系圈子以及"江湖地位"在各个网站都能共享,岂不是一件很酷的事情?这个通用id的服务就是OpenID,我认为随着互联网和移动互联网的不断发展,未来的竞争一定在于OpenID,拥有良好账户体系的公司将是互联网的强者. OpenID不是一个新的

微信公众号开发及时获取当前用户Openid及注意事项

目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及时获取当前用户Openid及注意事项 前言 这篇主要是承接上篇的网页授权获取用户基本信息的后文,也是对第一种静默授权之后,用户点击公众号内链接时,如何再次取得当前用户的OpenId的大致讲解和一些注意事项. 看过上一篇的小伙伴都知道,我们在用户关注的时候就已经将该用户的基本信息存入数据库中,那么如果

微信授权获取用户的openid

用户同意授权获取code,通过php的curl 把access_token和openid给爬下来,再根据access_token和openid把微信用户的基本信息给爬下来其中json_decode()记得写true 不然返回的是对象不是数组 标签: <无> 代码片段(1)[全屏查看所有代码] 1. [代码][PHP]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 3