聊聊微服务安全之认证与授权

引言

如今微服务架构已经是互联网应用的事实标准。相比传统单体应用,微服务架构给我们带来了诸多好处:快速迭代、松耦合、独立部署、高可靠、技术栈选择灵活等等,但与此同时它也给我们引入了分布式系统的复杂性和由此带来的各种挑战。其中一个挑战就是如何在微服务架构下保证应用访问的安全。

应用安全是个很宽泛的领域,本文将只讨论认证和授权。相对于单体应用,微服务架构下的认证和授权涉及的场景更多更复杂:用户访问、外部系统调用、微服务内部调用等。如何针对各种场景设计一整套灵活、安全、高效的认证和授权方案对微服务开发者来说无疑是个巨大的挑战。

基本概念

认证和授权是两个不同的概念,却很容易被混淆。理清他们的职责范围和关联关系有助于开发者进行清晰的架构思考与设计。

认证

认证(authentication)是指用户证明自己身份的过程,它解决的是 “我是谁?”的问题。一般应用系统里面会给每个用户分配一个UID,在这个应用系统中UID就代表用户的身份,决定了该用户能做什么和不能做什么。但光有UID还不够,因为谁都可以声称自己是该UID的主人,所以用户在登录应用系统的时候除了出示UID,还要出示密钥(credential),只有当出示的密钥和用户注册时设置的密钥匹配的时候才算认证通过。

授权

授权(authorization)则是指用户证明自己身份后,应用系统进一步判断用户可以访问哪些系统资源的过程,它解决的是“我能做什么?”的问题。授权往往是伴随认证来完成的。

会话管理

由于HTTP是无状态的,请求与请求之间相互独立,所以用户登录后必须要使用一种方式来记住这个登录的状态,并且把这个用户的一连串的交互请求关联起来,这样用户就不必每个请求都带上密钥了,这就是会话(SESSION)的最大作用。当然会话还可以存储其他用户的信息,比如语言偏好、时区设置等,这里只关注其在用户认证和授权方面的作用。因此,一般来说一套完整的认证和授权方案应当包含三个部分:用户认证、会话管理和权限检查(如下图所示)。

认证技术

针对Web应用,近十几年来业界出现过很多认证方法,下面列举一些常用的:

Integrated Windows Authentication (IWA) 

微软出品,与Windows账号体系(包括AD)完美结合,使用它用户可以以Windows用户的身份来自动登录你的应用,它能给Windows用户提供了一个比较好的单点登录的体验。它的底层支持Kerberos /NTLM协议,细节请参考官方文档 ,这里就不介绍了。以前IIS盛行的时候用的比较多,现在淘汰的差不多了。

HTTP Basic

这种方式以前用的比较多,比如好多古老的路由器登录的时候都会弹出下图这样的登录框,那就是使用的HTTP Basic认证:

这个协议通过HTTP头携带Base64编码后的用户名密码,示例:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

细节请参考rfc7617

这种方式实现起来非常简单,当然缺点也很明显,Base64 只能称为编码,而不是加密,所以最好使用HTTPS传输。现在基本没有Web应用采用HTTP Basic认证了,但还可以把它用于内部API调用的认证。

HTTP DIGEST

摘要认证是针对Basic认证存在的诸多问题而进行的改良方案,主要通过传递用户名,密码等计算出来的摘要来解决在网络上明文发送密码的问题,示例:

Authorization: Digest username="Mufasa",

       realm="[email protected]",

       uri="/dir/index.html",

       algorithm=MD5,

       nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",

       nc=00000001,

       cnonce="f2/wE4q74E6zIJEtWaHKaf5wv/H5QzzpXusqGemxURZJ",

       qop=auth,

       response="8ca523f5e9506fed4657c9700eebdbec",                //用户名,密码等计算出来的摘要

       opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"

细节请参考rfc7616

现在基本也没有Web应用采用HTTP Digest认证,但还可以把它用于内部API调用的认证。

HTTP Form认证

我们平时在登陆各大互联网站时所看到的登陆页面基本都是基于Form认证,业界没有关于Form认证的标准,但大家的实现却大同小异, 基本的流程是:

  1. 用户在登录页面输入用户名/密钥并点击提交按钮。这里密钥可以是密码、一次性Token(OTP)、指纹、虹膜、面部特征等,甚至可能是多种密钥结合(multifactor authentication
  2. 浏览器把用户名和密钥发送给服务器,HTTP请求的Body一般是Form类型的,也可以使用其他类型如JSON。所以其实叫Form认证并不确切。
  3. 服务器验证用户名密码

这种方式跟HTTP Basic一样是明文传输的密钥,所以最好用HTTPS来传输。HTTP Form认证如今仍然Web应用最流行的身份验证方式。

SSL 客户端认证

一般的HTTPS网站只开了SSL单向认证,也

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Security 是一个强大的安全框架,提供了身份认证授权机制。身份认证是指验证用户是否是可信用户的过程,授权是指决定用户是否有权限执行特定操作的过程。 Spring Security 提供了很多内置的身份验证机制,如基于表单的身份认证、基于HTTP基本身份验证、OpenID身份验证等。同时,它还支持各种自定义身份认证机制。 在授权方面,Spring Security 可以为应用程序提供很好的访问控制。它支持基于角色、基于权限和基于表达式等多种授权方式,同时也支持自定义授权机制。 Spring Security 可以与各种技术集成,如Spring框架、Spring Boot、OAuth、CAS等。通过使用 Spring Security,开发者可以方便地为他们的应用程序提供强大的身份验证和授权功能,以保护他们的应用程序免受各种安全攻击。 ### 回答2: Spring Security是一个由Spring社区开发的安全框架,为Spring应用程序提供了全面的安全性。它提供了许多有用的功能,可以轻松地实现基于角色的用户权限控制和身份验证。Spring Security使得开发人员可以专注于开发特定的应用程序功能,而不必从零开始开发身份认证授权功能。 Spring Security提供了多种身份验证和授权机制。最常见的身份验证机制是基于用户名和密码的验证方式。Spring Security提供了基本的用户名密码认证,也可以集成第三方身份验证系统,例如LDAP或CAS,实现单点登录功能。Spring Security的授权机制使用基于角色或基于资源的授权策略,可以实现细粒度的授权控制。 Spring Security提供了多种配置方式,包括XML配置、Java配置和注解配置。XML配置方式提供了完全控制的能力,Java配置方式提供了更加优雅的配置方式,而注解配置方式则提供了更加简洁明了的配置方式。使用Spring Security,开发者可以灵活地选择使用哪种配置方式。 Spring Security的核心是安全过滤器链。每个过滤器都集中处理一个特定的安全问题。通过为过滤器链添加或删除过滤器,可以自定义应用程序的安全行为。 总之,Spring Security是一个非常强大和灵活的安全框架,可以帮助开发人员轻松实现应用程序的身份认证授权功能。开发人员可以根据自己的需求选择合适的身份认证授权机制,并通过配置方式实现灵活和优雅的安全策略。 ### 回答3: Spring Security是一个基于Spring框架的应用安全框架,提供了一整套的认证(authentication)和授权(authorization)机制,为Java应用程序提供了安全保护。它可以控制web应用程序的访问权限,保护用户信息的安全性,还可以进行单点登录(SSO)等操作。 在Spring Security中,认证授权是两个核心概念。认证是指验证用户身份的过程,包括用户名称和密码的验证。Spring Security提供了多种认证方式,如基于表单的认证、HTTP基本认证等。授权则是指决定用户能够访问哪些资源的过程。Spring Security利用安全框架来控制对URL的访问,以及哪些用户具有哪些权限来访问应用程序中的功能。 Spring Security使用过滤器链(filter chain)来保护应用程序。这个过滤器链包括了许多安全性过滤器,它们通过拦截HTTP请求和响应来提供安全保护。每个过滤器都扮演了不同的角色,完成不同的操作。例如,UsernamePasswordAuthenticationFilter用于处理基于表单的用户认证请求,而AccessDecisionManager用于决定用户是否有权访问特定的资源。 Spring Security还提供了许多有用的功能,例如自定义表单登录、注销、记住我、角色层次结构等。它还可以与许多常见的身份验证和授权方案进行集成,如LDAP、OAuth2等。Spring Security的强大功能和灵活性使得它成为一个非常流行的Java认证授权框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值