前言

identity4 其实是openid connection, 那么我们还听说过openid 还有 oauth 2.0

那么下面就介绍一下Oath 2.0和openid 还有 openid connection

正文

网上说openid 是身份认证, 然后oauth2.0 是授权。

真的是这样吗?

直接看官网。

https://openid.net/what-is-openid/

OpenID allows you to use an existing account to sign in to multiple websites, without needing to create new passwords.

You may choose to associate information with your OpenID that can be shared with the websites you visit, such as a name or email address. With OpenID, you control how much of that information is shared with the websites you visit.

With OpenID, your password is only given to your identity provider, and that provider then confirms your identity to the websites you visit.  Other than your provider, no website ever sees your password, so you don’t need to worry about an unscrupulous or insecure website compromising your identity.

OpenID is rapidly gaining adoption on the web, with over one billion OpenID enabled user accounts and over 50,000 websites accepting OpenID for logins.  Several large organizations either issue or accept OpenIDs, including Google, Facebook, Yahoo!, Microsoft, AOL, MySpace, Sears, Universal Music Group, France Telecom, Novell, Sun, Telecom Italia, and many more.

这上面介绍了,openid 作用是做到去中心化登录,实现信息共享。

You may choose to associate information with your OpenID that can be shared with the websites you visit, such as a name or email address. With OpenID, you control how much of that information is shared with the websites you visit.

上面提及到了,你能选择自己的哪些信息被共享给你要登录的网站, 也就是授权给网站可以去idp(identity provider)获取哪些信息。

openid 要做的是实现去中心化登陆,实现信息共享,信息共享才是最终目的。

那么有 openid 感觉已经可以搞定了,已经实现我们的信息共享的目的了,要啥oauth(open oauthorization)。

openid 的确目的是为了去中心化登录,让用户选择自己的信息进行授权给对应的网站,但是关键是如何授权呢? openid 可没有指定什么授权。

来看下oauth 提供的方案,不仅提供了网站还提供给了桌面等授权:

看:https://oauth.net/2/

OAuth 2.0 is the industry-standard protocol for authorization. 

OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices. 

This specification and its extensions are being developed within the IETF OAuth Working Group.

这里说明了oauth2.0 专注于,对网站、桌面端提供授权。

很多人这里就开始联想了,认为oauth 2.0 是对openid的补充。

其实oauth 2.0 跟 openid 没有任何关系。 openid 是实现去中心化登录实现信息共享, oauth 2.0 是为了实现对第三方应用授权。

oauth 2.0 中就没提到登录这回事, 比如访问我的某个url,我就会给你一个access_token,你通过我的这个access_token 就可以访问我的计算功能的api,我就不需要你登录。

同样openid,也不一定要使用你oauth 2.0去授权, 未来还会出现其他方案的嘛。

所以也不要说什么openid 管什么认证,oauth 2.0 管什么授权,搞得他们好像有啥关系一样。openid 是一套去中心化身份认证,为了实现信息共享。

有些人提及左边是openid 认证,右边是oauth 授权,我个人认为这是不正确的。这个就是实现openid,授权用的是oauth 2.0 方案。

那么openid connection 是什么呢?

https://openid.net/connect/

OpenID Connect 1.0 is a simple identity layer on top of the OAuth 2.0 protocol. It allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server,

 as well as to obtain basic profile information about the End-User in an interoperable and REST-like manner.

OpenID Connect allows clients of all types, including Web-based, mobile, and JavaScript clients, to request and receive information about authenticated sessions and end-users. The specification suite is extensible, allowing participants to use optional features such as encryption of identity data, discovery of OpenID Providers, and session management, when it makes sense for them.

这里可以看到openid connection 结合了openid这种去中心化身份验证的场景加上了oauth 2.0的授权方式,是他们的结合体。

里面也说了openid2.0 和 openidconnection的区别:

OpenID Connect performs many of the same tasks as OpenID 2.0, but does so in a way that is API-friendly, and usable by native and mobile applications. OpenID Connect defines optional mechanisms for robust signing and encryption. Whereas integration of OAuth 1.0a and OpenID 2.0 required an extension, in OpenID Connect, OAuth 2.0 capabilities are integrated with the protocol itself.

好了,现在知道他们的区别了,关于auth2.0 还是有必要看一下的,比较要学的是identity4,然后identity4基于openid connection,openid connection 授权又是在oauth 2.0 的基础上。

看阮一峰的网址吧,太清晰了,没有从新整理的必要性:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

这里新手值得注意这里的授权和我们的获取token 访问api授权不一样。

怎么不一样呢? 这里解释一下。

比如我们以前的是去获取到了token,然后呢,通过角色或者什么策略去访问这个api,判断是否是这个角色可以访问。

这种授权可以理解为内部授权。

OAuth协议一般用于用户决定是否把自己在某个服务商上面的资源(比如:用户基本资料、照片、视频等)授权给第三方应用访问。

可以看到这里oauth 协议呢,指的是第三方授权,这个很重要,而不是说在你们内部获取一个token,然后这个token 验证用户是否可以访问这个接口。

举个例子,简书通过qq登录可以获取到qq的头像,名字等。如果你授权后, 简书就可以拿到你qq的头像和名字,否则就拿不到。

我们内部的授权是针对的是内部的资源(api等),第三方授权针对的是开放的资源,比如说在服务器的名字头像等。

还是以简书这个例子来说。

比如简书上跳转到qq,然后可以勾选哪些信息授权给简书(有些是不能选的,因为简书要求一定要获取,不获取就不给你登录),用户输入账户密码后,就跳转到了简书。

想下面这种灰色的就是不能去掉的。

当我们登录完后跳转到简书后,发现简书有了我的qq头像了。

我们来抓包看下:

当qq 登录完成之后:

这里302跳转会简书。

请求了简书的这个callback。

拿到这个code 后,获取access_token,然后access_token 可以获取到用户的openid,通过openid 和 access_token获取到用户的头像和名字。

这样看可能还是会迷糊。

直接现场演示如何接入qq。

qq 第三方登陆提供了两种模式:

一种是service-side 模式, 这种对应的是authorization code 模式。

另外一种是client-side 模式,implisit grant type 模式。

别人已经写了,所以这里就不写了。

https://www.php.cn/js/js-Server-side.html

implicit grant type 模式可能别人有误解哈,有些人直接翻译过来是简易模式, 认为这种方式不安全,感觉没人会使用。

其实不是的,这种模式用的还挺多的。

下面是不同场景。

举个例子,比如隔壁前端部门要做个工具,他们纯粹调用你们部门的api,那么直接implicit grant type 模式就好了。

他们不需要服务器保存什么数据,只需要授权api 访问就好了。这样安全达到了,且又让项目复杂度变得更加简单。

之所以有几种模式,是因为场景不同, 需要的安全程度不一样。

identity 章节开始了,上面只是个人整理,主要是介绍了一下概念,主要介绍openid是中心化登录的一套信息共享方案, 同样oauth 2.0 跟openid 没有任何关系,准备来说oauth 2.0 是一个对第三方授权的方案,所以整理一下概念,如有错误望请指出。

identity4 系列————开篇概念的更多相关文章

  1. 【转】Entity Framework技术导游系列开篇与热身

    转自:http://blog.csdn.net/bitfan/article/details/12779517 Entity Framework走马观花 之 把握全局 ================ ...

  2. [翻译svg教程]svg学习系列 开篇

    目录 [翻译svg教程]svg学习系列 开篇 [翻译svg教程 ]svg 的坐标系统 [翻译svg教程]svg 中的g元素 [翻译svg教程]svg中矩形元素 rect [翻译svg教程]svg中的c ...

  3. FPGA与simulink联合实时环路系列—开篇

    FPGA与simulink联合实时环路系列—开篇 作为网络上第一个开源此技术,笔者迫不及待地想将此技术分享出来,希望大家多多支持.笔者从2011年接触FPGA以来,从各个方面使用FPGA,无论是控制. ...

  4. WPF Step By Step 系列 - 开篇 ·

    WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...

  5. Windows 8实例教程系列 - 开篇

    原文:Windows 8实例教程系列 - 开篇 2012年10月26日,微软发布Windows 8操作系统以及自主品牌平板电脑Surface,Windows作为世界上最流行的操作系统,发布一周内,下载 ...

  6. JVM基础系列开篇:为什么要学虚拟机?

    跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试.但我经过了几年的学习和实战,我发现其实学习虚拟机并 ...

  7. JVM规范系列开篇:为什么要读JVM规范?

    许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,<Java虚拟机规范>才是最为官方.准确的一个文档,了解这个规范可以让 ...

  8. Spark系列-核心概念

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...

  9. XAML实例教程系列 - 开篇(一)

    XAML实例教程系列 - 开篇 2012-05-14 11:47 by jv9, 5588 阅读, 8 评论, 收藏, 编辑 去年,曾答应银光中国论坛的朋友推出一个关于XAML语言实例教程系列,帮助学 ...

随机推荐

  1. 【Java面试】什么是幂等?如何解决幂等性问题?

    一个在传统行业工作了7年的粉丝私信我. 他最近去很多互联网公司面试,遇到的很多技术和概念都没听过. 其中就有一道题是:"什么是幂等.如何解决幂等性问题"? 他说,这个概念听都没听过 ...

  2. CXP 协议中upconnection 与downconnection的说明及其区别

    概述 CXP定义了一个DEVICE和HOST之间点对点的连接协议.CXP的一个连接包含了一个MASTER物理连接和若干可选的SLAVE连接,每一个连接都定义了一组逻辑通道用于传输图像数据.实时触发.设 ...

  3. 素性测试+PollardRho

    素数判定 暴力 本质上是检查其是否能够不用其本身进行质因数分解. 直接枚举从区间 \([2,n)\) 的数看其是否整除 \(n\) 即可.但是其实发现我们只要枚举到 \(\sqrt n\) 即可,复杂 ...

  4. 【SpringBoot】快速入门

    博客主页:准Java全栈开发工程师 00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小.觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为 ...

  5. HMS Core新闻行业解决方案:让技术加上人文的温度

    开发者们,你希望用户如何获取新闻? 有的人靠手机弹窗知天下事,有的人则在新闻应用中尽览每一篇文章:有的人一目十行,有的人则喜欢细细咀嚼:有的人主动探索,有的人则想要应用投其所好. 科技在不断刷新着用户 ...

  6. NC24083 [USACO 2017 Dec P]Greedy Gift Takers

    NC24083 [USACO 2017 Dec P]Greedy Gift Takers 题目 题目描述 Farmer John's nemesis, Farmer Nhoj, has N cows ...

  7. java反序列化漏洞专项

    背景条件:java的框架,java的应用程序,使用序列化,反序列化操作非常多.在漏洞挖掘中,代码审计中,安全研究中,反序列化漏洞是个重点项,不可忽视.尤其是java应用程序的rce,10个里面有7个是 ...

  8. Entry键值对对象和Map集合遍历键值对方式

    我们已经知道,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在IMap 中是一一对应关系, 这一对对象又称做Map 中的一个Entry(项).Entry将键值对的对应 ...

  9. Docker安装NextCloud使用MySQL

    安装 1.拉取并启动MySQL,最好把数据可目录挂载到宿主机,以便容器被误删后恢复: docker run --name=nextcloud_db \ -e MYSQL_ROOT_PASSWORD=X ...

  10. 绿色安装MySQL5.7版本----配置my.ini文件注意事项

    前言 由于前段时间电脑重装,虽然很多软件不在C盘,但是由于很多注册表以及关联文件被删除,很多软件还需要重新配置甚至卸载重装. 使用MySQL时就遇到了这种情况,在修改配置文件无效的情况下选择了重新安装 ...