多种认证、授权模型的比较

更新日期: 2018-08-23 阅读: 3.8k 标签: 前端

本文主要列举在如今前后端分离、手机App大行其道的现状下,用户认证、授权的几种做法及对比。PS. 本文假设你已经理解了各种认证模式的具体细节。


OAuth2.0的几种模式

OAuth2.0是一个被广泛采用的事实标准,它同时包含认证和授权两种模式,我们来看一下它有几种模式:

Grant typeClient ownerUser context?Client typeApp type
Authorization CodeThird-partyYconfidentialWeb app
Authorization Code, without client secretThird-partyYpublicUser-agent app
Authorization Code, without client secret, with PKCEThird-partyYpublicNative app
OAuth2 Implicit(deprecated)Third-partyYpublicUser-agent app, Native app
PasswordFirst-partyYbothWeb app, User-agent app, Native app
Client CredentialsThird-partyNconfidentialWeb app

名词定义:

  • User: 自然人。
  • Client: 索要Authorization Code和Access Token的程序。

Client owner:

  • First-party: 第一方client,即client开发者/厂商和Resource Server是同一个人/厂商。
  • Third-party: 第三方client,即client开发者/厂商和Resource Server不是同一个人/厂商。OAuth 2.0主要解决的是第三方client的授权问题。

User context:

  • Y: 代表被授权的资源是和当前User相关的。
  • N: 代表被授权的资源是和Client相关的。

Client type:

  • Confidential: 这类Client和Authorization Server/Resource Server的通信是秘密进行的。
  • Public: 这类Client和Authorization Server/Resource Server的通信是公开进行的。

App type:

  • web app: 这类App的代码在服务器上执行,用户通过User-Agent(浏览器)下载App渲染的html页面,并与之交互。比如,传统的MVC应用。
  • user-agent app: 这类App的代码是直接下载到User-Agent(浏览器)里执行的。比如,前后端分离App、SPA。
  • native app: 这类App安装在用户的设备上,可以认为这类App内部存储的credential信息是有可能被提取的。比如,手机App、桌面App。


仅做认证的模式

ModeClient belongUser ContextApp type
SessionFirst-partyYWeb app
SSOFirst-partyYWeb app
JWTFirst-partyYWeb app, User-agent app, Native app

详细说明以上三种模式:

Session模式: 就是我们传统的Web app所使用的技术,用户输入账号和密码登录系统,服务端返回一个名字叫做SESSIONID的Cookie,之后User-agent和服务端每次交互都会携带这个Cookie,通过这种方式来做到用户登录状态的保持。

SSO模式: 其实是Session模式的变种,只不过把认证从Session模式的本地认证变成了利用SSO服务器做认证。已知SSO类型有:CAS、SAML。

JWT模式: 它和Session模式的区别在于:

  1. 用户会话信息不通过Cookie携带,而是放在Header里,这个信息我们叫做Token。
  2. Token里包含了加密的、不可篡改的当前登录用户的信息,SESSIONID只是一个代号,是没有这个信息的。
  3. 服务端可以做到无状态,因为用户信息在Token里已经存在,再也不需要维护Session了。

JWT模式可以使用SSO吗?答案是可以的,但是有条件,在SSO认证流程的最后一步——获取用户信息——的通信必须是confidential的。

对于Web app来说只要它接入了SSO,获取用户信息的通信本来就是confidential的,它获得用户信息之后构造JWT并返回就可以了。

对于User-agent app和Native app来说,需要为它做一个中介Web app,这个Web app和SSO通信,然后构造JWT返回给User-agent app。


来源:https://chanjarster.github.io/

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/1030

相关推荐

前端和后端的区别_为什么很多人选择前端?

什么是前端什么是后端,前端开发和后台开发是有区别的,工作的内容和负责的东西是完全的不同的,下面简单说一下:前端更容易入门,每天调整界面的展示,通过代码 完成优美的界面和酷炫的交互。后端入门稍困难,每天关注的是业务逻辑的处理,数据的增删改查,性能的优化

掘金前端课程(小册)推荐

大家好,本期内容给大家推荐一些优质的前端掘金课程,比较适合初学者及工作几年的前端小伙伴,里面的内容讲解的比较详细,作者也是一线的大厂工作者。有兴趣的小伙伴快来打卡看一下吧

什么是前端? web1.0、web2.0时代的网页制作,前端开发都有哪些内容等

前端基础-什么是前端:一、 web1.0时代的网页制作,二、 web2.0时代的前端开发,三、 Web前端能做什么?四、 为什么要学习前端开发,五、 前端开发都有哪些内容,六、 开发环境

前端开发,如何写出优秀js代码

前端开发如何写出优秀js代码,什么样的javascript代码才是最优秀的的呢?我总结的大概分为三点:性能好,简单优雅,通俗易懂,这篇文章就将围绕这这3点来说明。

解读前端热更新原理

热更新:浏览器的网页通过websocket协议与服务器建立起一个长连接,当服务器的css/js/html进行了修改的时候,服务器会向前端发送一个更新的消息,如果是css或者html发生了改变,网页执行js直接操作dom,局部刷新,如果是js发生了改变,只好刷新整个页面。

前端开发,你的优势是什么?

每个前端开发都要有自己的优势,总结一下我的优势:1、工作年限长、经验多;2、基础相对扎实;3、逻辑思维能力合格;4、业务需求分析能合格。

前端权限控制

权限管理一般分以下 3 个基础概念:功能点,角色,用户。它们之间的关系一句话就能说清楚:一个用户可以拥有多个角色,而一个角色可以包含多个功能。

前端需要了解的后端知识

一名有前端工程师,除了掌握自身知识体系外,在业余时间也应该了解下后端的知识时间,由于前端与后端工作是最最密切相关的,多学习些后端知识对自身也是大有好处的。当然除了上述这些,计算机网络、数据结构和算法、计算机组成和原理、离散数学等知识都要涉及。

女生30 岁转行做前端开发,晚吗?

30岁转行做前端程序开发!请把“晚吗”去掉。50多岁大爷都学编程了。你还担心啥?先从年龄上来说,这个年龄进入IT职业,那是相当棒的黄金时间,有目标,有干劲,有新颖的思想,而且仍是女孩子。

前端常用的新手引导库,总有一款适合你!

在产品发布新版本或者有新功能上线时,经常需要新手引导功能来引导用户了解应用,下面就来分享几个开箱即用的新手引导组件工具库,帮你快速实现新手引导功能!

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!