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

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

本文主要列举在如今前后端分离、手机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://www.fly63.com/article/detial/1030

前端开发,脱离菜鸟层次的二个关键点

我个人吧,一直认为学习前端技术是比较简单的事情,只要你真的是一步一个脚印的在前进,那你自然会有相应的结果可以收获。这里面包含二个关键点,一,脚踏实地;二,不断努力。

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

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

解读前端热更新原理

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

你不知道的前端SDK开发技巧

作为一个SDK,我们的目标是让使用者能够减少查看文档的时间,所以我们需要提供一些类型的检查和智能提示,一般我们的做法是提供JsDoc,大部分编辑器可以提供快捷生成JsDoc的方式,另一种做法是使用Flow或者TypeScript

Web前端体系的脉络结构

Web前端技术由 html、css 和 javascript 三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。

关于前端数据&逻辑的思考

这里我是基于典型的MVC模型,那么为了将现有代码重构为理想的模型,我需要做以下几步:拆分组件,逻辑处理,抽象、聚合数据

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

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

web前端的一些不为人知的冷知识点_html篇整理

web前端HTML篇冷知识点——这是一篇关于前端的技巧使用,或许你做前端很多年了,但是下面的这些你可能闻所未闻。现在这里给大家整理出来,分享给前端的小伙伴们。

web前端的一些不为人知的冷知识点_CSS篇整理

CSS篇整理:关于CSS的恶作剧、简单的文字模糊效果、垂直居中、多重边框、实时编辑CSS、创建长宽比固定的元素、CSS中也可以做简单运算

web前端的一些不为人知的冷知识点_Js篇整理

Js篇整理:生成随机字符串、整数的操作、重写原生浏览器方法以实现新功能、关于console的恶作剧、万物皆对象、If语句的变形、禁止别人以iframe加载你的页面、console.table

点击更多...

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