背景

当我们要使用一个网站的功能时,一般都需要注册想用的账号。现在的互联网应用很多,一段时间之后你会发现你注册了一堆账号密码,根本记不住。

你可能会想到所有的网站都用同一套用户名和密码,这样虽然能解决账号管理的问题,但也加大了账号密码泄露的风险。

虽然,现在的网站有提供短信验证码登录技术,但是今天我们要聊的是一个比较“古老”的技术——OpenID,看看之前的技术是怎么解决密码太多不便于管理的问题的。

写这篇文章的目的更多的是兴趣使然,因为实践过程中不太可能会单纯的使用OpenID登录,国内也几乎没见到支持OpenId的网站,至少主流的大厂没支持。但是我个人觉得,用不到并不代表你一定不需要知道,了解技术发展的历史,不仅可以给我们借鉴,而且能提升自己的技术底蕴。(哈哈,有点装X~~)

基础概念

在正式介绍OpenID之前,我再啰嗦几个基础概念。

  • Authentication: 身份鉴别,简称认证,简单讲就是怎么鉴定你就是某个人;

  • Authorization Server/Identity Provider:把负责 认证的服务 称为 AuthorizationServer 或者 IdentityProvider,简称IDP;

  • Authorisation: 资源访问,简称授权,简单讲就是给某个人赋予某些权限;

  • Service Provider/Resource Server:把负责提供资源(API调用)的服务称为 ResourceServer 或者 ServiceProvider,简称 SP

OpenID相关的几个概念

  • User:网站访问者操作的浏览器
  • RP:Relying Party ;服务提供者,就是用户要访问的网站。
  • OP:OpenID Provider ;OpenID提供者,就是提供OpenID注册的服务商。

OpenID简介

OpenID 是由LiveJournal和SixApart开发的一套身份验证系统,是一个以用户为中心的数字身份识别框架,它具有开放、分散、自由等特性。

OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,我们也可以通过这种方式来作为用户的身份认证。它不基于某一应用网站的注册程序,而且不限制于单一网站的登录使用。OpenID帐号可以在任何OpenID应用网站使用,从而避免了多次注册、填写身份资料的繁琐过程。简单言之,OpenID就是一套以用户为中心的分散式身份验证系统,用户只需要注册获取OpenID之后,就可以凭借此OpenID帐号在多个网站之间自由登录使用,而不需要每上一个网站都需要注册帐号。

OpenID的工作流程

假设你已经拥有一个在A网站(A网站就是OP角色)注册获得的OpenID帐号,B网站(B网站就是RP角色)支持OpenID帐号登录使用,而且你从未登录过。此时你在B网站的相应登录界面输入你的OpenID帐号进行登录的时候,浏览器会自动转向A网站的某个页面进行身份验证。这时你只要输入你在A网站注册时候提供的密码登录A网站,对B网站进行验证管理(永久允许、只允许一次或者不允许)后,页面又会自动转到B网站。如果你选择了允许,那就会登录进入B网站。这个时候你就可以以你的OpenID帐户身份实现B网站的所有功能。

上面描述了B网站使用A网站提供的OpenID进行登录,你也可以使用这个OpenId登录其他支持OpenID的网站。

OpenID的获取流程

  • 首先用户选择一个OpenID 服务提供者,来注册 OpenID 帐号(跟传统的网站注册无异),注册后用户得到一个 OpenID网址(OpenID URL),如http:/collinye.openid.com ,可以简单的理解为用户名。
  • 访问支持 OpenID 的网站,在登录时,输入你的 OpenID网址,通常此类登录页面的输入框会有如上图所示 OpenID 标志,然后点登录。
  • 之后,会跳转你的OpenID 服务提供者的网站,并要求你输入注册时填写的密码,验证密码通过后会询问你是否允许该网站使用你的 OpenID 进行登录,经过允许后会跳转回原网站,并显示登录成功,之后你就可以以注册者的身份访问该网站。

认证流程

  • 终端用户请求登录RP网站,用户选择了以OpenID方式来登录;
  • RP将OpenID的登录界面返回给终端用户;
  • 用户输入OpenID,RP网站对用户的OpenID进行标准化,此过程比较复杂,因为OpenID可能是URI,也可能是XRI,所以标准化方式各不相同;
  • RP和OP进行连接;
  • RP请求OP对用户身份进行登录检查,OP对用户登录检查,如果用户还没有登录,请求用户进行登录认证;
  • 用户登录OP、登录完检测RP请求哪些信息,如果没有需有用补填(OpenID主要负责认真,用户首次登陆注册可能还需要其他必要信息,可以在这个步骤补全);

  • OP将登录结果返回给RP,RP对OP的结果进行分析,RP分析后,如用户合法,则返回用户登录成功,可以使用RP服务。

OPENID优缺点

优点

对用户

  1. 简化注册登录流程:一定程度上避免了重复注册、填写身份资料的繁琐过程,不需要注册邮件确认,登录更快捷。

  2. 一处注册,处处通行:免去记忆大量账号的麻烦,一个OpenID就在任何支持OpenID的网站自由登录。

  1. 减少密码泄露风险:频繁登录各种网站,容易被垃圾网站暗地里收集密码和资料,或者冒充用户身份发送垃圾信息。

  2. 用户拥有账号信息控制权:根据对网站的信任程度,用户可以清楚的控制哪些profile信息可以被共享,例如姓名、地址、电话号码等。

对网站

  1. 共享用户资源:给所有支持 OpenID 的网站带来了价值。

  2. 已经有相当数量的高端注册用户可以直接使用,不必从零开始;

  3. 可以不负担自己建立会员系统或登录功能所需要的开发成本、机器、带宽、安全费用;

  4. 用户数据是安全的,用户数据不统一存储,用户可以任意选择、更换存储的server。没有组织,没有任何一个地方可以做root,没有任何一个机构或者个人能够从这里面获利。

缺点

  1. 任何人都可以建立一个网站提供OpenID验证服务,而网站性能参差不齐,导致OpenID的验证过程不是很稳定。

  2. 如果提供OpenID验证服务的网站突然关闭的话,可能会导致大量用户无法使用多个网站的服务。

  3. 目前几乎所有支持OpenID的网站都很谨慎地将其做为一种可供选择的辅助登录方法,这会在很大程度上阻碍OpenID的发展。

  4. 目前支持OpenID的网站还不多,其独特的使用方法并不被多数用户所熟悉。

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

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

OpenID发展历程--OIDC

原始的OpenID,也就是OpenID 1.0,它并不是真正的商业应用,但这个协议让行业领导者思考什么是可能的。

OpenID 2.0设计更为完善,提供良好的安全性保证。然而,其自身存在一些设计上的局限性,最致命的是其中依赖方必须是网页,但不能是本机应用程序;此外它还要依赖XML,这些都会导致一些应用问题。

OIDC,OpenID Connect是OpenID的第三代技术。OpenID Connect从SAML和OpenID 1.0/2.0中做了大量借鉴。OIDC不仅支持用户认证,还支持用户授权。

后面的文章中会介绍OIDC的相关内容。

支持OpenID的网站

待更新...

参考

OpenID协议的更多相关文章

  1. OpenID说明

    OpenID使用手册 摘要: OpenID是一种开放.离散式的用于用户数字标识的开源框架.在网络应用日益充斥的今天,作为终端用户的我们不得不在每个网站上设置帐号,并管理众多的帐号.而采用OpenID技 ...

  2. 在onelogin中使用OpenId Connect Implicit Flow

    目录 简介 OpenId Implicit Flow 创建onelogin的配置 页面的运行和请求流程 关键代码 总结 简介 onelogin支持多种OpenId Connect的连接模式,上一篇文章 ...

  3. 理解OIDC协议和认证机制

    当互联网应用越来越多,每个应用程序都实现了自己的身份存储.认证和授权,用户需要在应用上反复的注册与登录,体验糟糕,用户身份信息无法在多个应用间共享与同步.当使用企业应用时,企业提供了一系列应用,尽管是 ...

  4. openid4java 使用记录[转载]

    [文章来源:http://r-j-r-a5438-163-com.iteye.com/blog/611351] 在项目中使用了openid4java进行开发,在开发过程中碰到过一些问题,在网上也找了很 ...

  5. IdentityServer4 登录使用数据库

    业务场景: IdentityServer4 默认使用TestUser和UserStore,需要模拟和加载所有的用户数据,正式环境肯定不能这样实现,我们想从自己的数据库中读取用户信息,另外,因为 Ide ...

  6. CSRF(跨站请求伪造攻击)漏洞详解

    Cross-Site Request Forgery(CSRF),中文一般译作跨站点 请求伪造.经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三.与前两者相比 ...

  7. CSRF漏洞原理说明与利用方法

    翻译者:Fireweed 原文链接:http://seclab.stanford.edu/websec/ 一 .什么是CSRF Cross-Site Request Forgery(CSRF),中文一 ...

  8. CSRF漏洞详细说明

    CSRF漏洞详细说明 通常情况下,有三种方法被广泛用来防御CSRF攻击:验证token,验证HTTP请求的Referer,还有验证XMLHttpRequests里的自定义header.鉴于种种原因,这 ...

  9. 第27 章 : Kubernetes 安全之访问控制

    Kubernetes 安全之访问控制 本文将主要分享以下三方面的内容: Kubernetes API 请求访问控制 Kubernetes 认证 Kubernetes RBAC Security Con ...

随机推荐

  1. CSS-backgroound和radial-giadient的常见用法

    前言 这里主要介绍下css中background和radial-giadient径向渐变的使用,工作中用到的地方可能也不太多,但是每次用到了都需要查阅官网,查资料就比较麻烦,这里记录一下我自己整理的常 ...

  2. 女朋友突然问我DNS是个啥....

    女朋友突然问我DNS是个啥.... 今天晚上我正在床上躺着刷手机,然后我女朋友突然说她的电脑坏了.说连着WIFi上不了网,让我给她看一下.(这就是有个程序员男朋友的好处) 然后我拿到电脑看了一下发现访 ...

  3. 【Tomcat 源码系列】Tomcat 整体结构

    一,前言 在开始看源码细节之前,首先要想好要看的问题.想好问题之后,我们该如何寻找要看的代码呢? 其实,这就好像去爬山的时候,突然想去上厕所,如果有一副地图,那么我们可以很快就找到厕所的位置.带着问题 ...

  4. 六个步骤,从零开始教你搭建基于WordPress的个人博客

    摘要:WordPress是使用PHP语言开发的博客平台,是免费开源的.用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,也可以把WordPress当作一个内容管理系统(CMS)来使用 ...

  5. MySQL-实体映射关系和连接查询

     一 数据库实体的映射关系 1. 一对一:学生表和学生档案表,一个学生只有一个对应的档案. 2. 一对多/多对一:一个球队友多个球员(一对多),多个球员属于一个球队(多对一) 3. 多对多:一个学生可 ...

  6. css 07-浮动

    07-浮动.md #文本主要内容 标准文档流 标准文档流的特性 行内元素和块级元素 行内元素和块级元素的相互转换 浮动的性质 浮动的清除 浏览器的兼容性问题 浮动中margin相关 关于margin的 ...

  7. ECharts的下载和安装(图文详解)

    首先搜索找到ECharts官网,点击进入. 找到下载 进入就看到第三步,就点击在线制作 点击进入之后就自己可以选择里面的形状图,就在线制作.最后生成echarts.min.js 点击下载后就会生成js ...

  8. 网站开发学习Python实现-Django的models学习-生鲜项目(6.3.2)

    @ 目录 1.说明 2.模型类的设计 3.代码的具体实现 4.详情地址 关于作者 1.说明 models是django的很重要的部分,所以深入研究. 本文章的所研究项目为黑马教育python课程中的项 ...

  9. vue element ui 上传 请求接口

    在页面上 http-request: 覆盖默认的上传行为,可以自定义上传的实现 <el-upload  class="avatar-uploader"  action=&qu ...

  10. 记一次真实的webpack优化经历

    前言 公司目前现有的一款产品是使用vue v2.0框架实现的,配套的打包工具为webpack v3.0.整个项目大概有80多个vue文件,也算不上什么大型项目. 只不过每次头疼的就是打包所耗费的时间平 ...