关闭

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

时间: 2018-08-23阅读: 1701标签: 前端

本文主要列举在如今前后端分离、手机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/
站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1030

大前端时代下的热修复平台建设

随着移动需求的增加、移动项目的拓展,如果移动端应用出现 Bug 不能及时得到修复,影响的不仅仅是用户体验,还会造成业务上的损失,因此,建立一套完整的热修复平台迫在眉睫。

前后端分离的优缺点

前后端分离已经成为互联网项目开发的业界标准使用方式,通过 nginx + Tomcat 的方式(也可以中间加一个 nodejs) 有效的进行解耦,并且前后端分离会为以后的大型分布式架构,弹性计算架构,微服务架构

企业需要什么样的Web前端人才?

随着互联网行业的发展,web前端工程师成为一个很吃香的职业,只要你足够优秀就能收获高薪?企业需要什么样的web前端人才?首先来看看根据对互联网企业对Web开发工程师的招聘要求分析得出结果:

前端权限控制

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

现在学web前端还来得及吗?

前端是个最近几年火起来的工种,而且持续火热中,有个词叫水涨船高,来的人多了,竞争多了,标准也就提高了。现在对前端工程师的要求跟当年前已经不能同日而语了。

web前端程序员真的这么值钱吗?

对于互联网公司来说用户就是上帝,做好客户体验一切才有可能。所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用。

中台微服务了,那前端呢?

文章中详细描述了基于 DDD 设计思想的中台微服务设计方法以及分布式架构实施过程中的关注点等内容。中台建设完成后,通过微服务实现了后端应用的解耦,提高了中台应用的弹性伸缩能力

为什么说转行应该首选Web前端职业?

现在找工作越来越难难,而且一年比一年就业压力大,为什么学习web前端却如此火爆呢?转行首选web前端呢?职业价值提升的技术人员,Web前端工程师可能是你一个不错的选择。

不会Js能混前端么?能拿到高薪么?

有很多企业不注重前端开发,当然也就不会给你高薪了,这样的企业以小企业居多。他们一般对前端开发的认识很片面,认为前端开发就是做页面;在国内前端开发必须掌握的技能有两个

如何从零基础成为优秀的Web前端开发人员?

你想成为一名Web开发人员,有一个问题,在技术行业还没有经验。你可能上了很多课程并且也写了很多个人项目,但是简历上经验一栏却始终和你没有什么关系。转型到一个新的领域并不是那么容易,你想知道你是否已经准备好了

点击更多...

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