OpenID协议
背景
当我们要使用一个网站的功能时,一般都需要注册想用的账号。现在的互联网应用很多,一段时间之后你会发现你注册了一堆账号密码,根本记不住。
你可能会想到所有的网站都用同一套用户名和密码,这样虽然能解决账号管理的问题,但也加大了账号密码泄露的风险。
虽然,现在的网站有提供短信验证码登录技术,但是今天我们要聊的是一个比较“古老”的技术——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优缺点
优点
对用户
简化注册登录流程:一定程度上避免了重复注册、填写身份资料的繁琐过程,不需要注册邮件确认,登录更快捷。
一处注册,处处通行:免去记忆大量账号的麻烦,一个OpenID就在任何支持OpenID的网站自由登录。
减少密码泄露风险:频繁登录各种网站,容易被垃圾网站暗地里收集密码和资料,或者冒充用户身份发送垃圾信息。
用户拥有账号信息控制权:根据对网站的信任程度,用户可以清楚的控制哪些profile信息可以被共享,例如姓名、地址、电话号码等。
对网站
共享用户资源:给所有支持 OpenID 的网站带来了价值。
已经有相当数量的高端注册用户可以直接使用,不必从零开始;
可以不负担自己建立会员系统或登录功能所需要的开发成本、机器、带宽、安全费用;
用户数据是安全的,用户数据不统一存储,用户可以任意选择、更换存储的server。没有组织,没有任何一个地方可以做root,没有任何一个机构或者个人能够从这里面获利。
缺点
任何人都可以建立一个网站提供OpenID验证服务,而网站性能参差不齐,导致OpenID的验证过程不是很稳定。
如果提供OpenID验证服务的网站突然关闭的话,可能会导致大量用户无法使用多个网站的服务。
目前几乎所有支持OpenID的网站都很谨慎地将其做为一种可供选择的辅助登录方法,这会在很大程度上阻碍OpenID的发展。
目前支持OpenID的网站还不多,其独特的使用方法并不被多数用户所熟悉。
密码安全度降低,只要OpenID的密码被泄露,基本上所有的网站都被泄露。这与"一处注册,到处使用"形成对应,即"一处泄露,到处泄露"。
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的网站
待更新...
参考
- https://www.cnblogs.com/cjsblog/p/9174797.html
- https://www.cnblogs.com/shuidao/p/3463947.html
- https://www.cnblogs.com/collinye/archive/2010/07/29/1788328.html
- OpenID简介
OpenID协议的更多相关文章
- OpenID说明
OpenID使用手册 摘要: OpenID是一种开放.离散式的用于用户数字标识的开源框架.在网络应用日益充斥的今天,作为终端用户的我们不得不在每个网站上设置帐号,并管理众多的帐号.而采用OpenID技 ...
- 在onelogin中使用OpenId Connect Implicit Flow
目录 简介 OpenId Implicit Flow 创建onelogin的配置 页面的运行和请求流程 关键代码 总结 简介 onelogin支持多种OpenId Connect的连接模式,上一篇文章 ...
- 理解OIDC协议和认证机制
当互联网应用越来越多,每个应用程序都实现了自己的身份存储.认证和授权,用户需要在应用上反复的注册与登录,体验糟糕,用户身份信息无法在多个应用间共享与同步.当使用企业应用时,企业提供了一系列应用,尽管是 ...
- openid4java 使用记录[转载]
[文章来源:http://r-j-r-a5438-163-com.iteye.com/blog/611351] 在项目中使用了openid4java进行开发,在开发过程中碰到过一些问题,在网上也找了很 ...
- IdentityServer4 登录使用数据库
业务场景: IdentityServer4 默认使用TestUser和UserStore,需要模拟和加载所有的用户数据,正式环境肯定不能这样实现,我们想从自己的数据库中读取用户信息,另外,因为 Ide ...
- CSRF(跨站请求伪造攻击)漏洞详解
Cross-Site Request Forgery(CSRF),中文一般译作跨站点 请求伪造.经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三.与前两者相比 ...
- CSRF漏洞原理说明与利用方法
翻译者:Fireweed 原文链接:http://seclab.stanford.edu/websec/ 一 .什么是CSRF Cross-Site Request Forgery(CSRF),中文一 ...
- CSRF漏洞详细说明
CSRF漏洞详细说明 通常情况下,有三种方法被广泛用来防御CSRF攻击:验证token,验证HTTP请求的Referer,还有验证XMLHttpRequests里的自定义header.鉴于种种原因,这 ...
- 第27 章 : Kubernetes 安全之访问控制
Kubernetes 安全之访问控制 本文将主要分享以下三方面的内容: Kubernetes API 请求访问控制 Kubernetes 认证 Kubernetes RBAC Security Con ...
随机推荐
- [python学习手册-笔记]004.动态类型
004.动态类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...
- Spark-2-性能监控方式
1 Spark Web UI Spark提供了一些基本的Web监控页面,对于日常监控十分有用. 通过http://master:4040(默认端口是4040,可以通过spark.ui.port修改)我 ...
- CTF练习三 —— 命令注入&命令执行绕过
这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对 ...
- HW之蓝队防守
待看文章: https://blog.csdn.net/DBappSecurity_/article/details/107364216?utm_medium=distribute.pc_releva ...
- Java项目连接数据库Mysql报错create connection SQLException
今天编写了一个Java项目,对数据库Mysql的表进行增删改查,然后遇到了这个问题 严重: create connection SQLException, url: jdbc:mysql://loca ...
- 移位运算符<<与>>
程序设计中,我们有时会看到两种运算符:<<和>>,这两种运算符均为移位运算符,属于位操作运算符中的一种,分别为<<(左移)和>>(右移). 其中,左移运 ...
- 使用Attribute限制Action只接受Ajax请求
原博文 https://www.cnblogs.com/h82258652/p/3939365.html 代码 /// <summary> /// 仅允许Ajax操作 /// </s ...
- 安装篇二:CentOS 6.9系统安装
具体安装流程,请查下面安装图片 安装时五个选项说明如下:
- 【程序包管理】Linux程序包管理之rpm安装总结
rpm简介 rpm( Red Hat Package Manager )是一个开放的软件包管理系统.它工作于Red Hat Linux及其他Linux系统,成为Linux中公认的软件包管理标准. rp ...
- Windows 安装 Go语言开发环境
Windows 安装 Go语言开发环境 下载安装包 下载地址:http://www.golangtc.com/download 32 位请选择名称中包含 windows-386 的 msi 安 ...