OAuth2入门基础

2023-12-24 20:46:07

前言:

在OAuth2之前,如果是关注我的老粉因该是知道我之前是发布过关于微信小程序授权登录的,那个也就是调用了微信定义的方法。返回用户的名称,头像,地址、、、但是是获取不到登录的密码的。今天的OAuth2更加的标准,安全。

OAuth2是什么?

OAuth2是一种开放标准的授权协议,用于授权第三方应用程序访问受保护的资源。它允许用户授权第三方应用程序代表其获取受保护的资源,而无需将用户名和密码直接提供给第三方应用程序。

在OAuth2中,有四个主要的角色:

  1. 资源所有者(Resource Owner):通常是指最终用户,即授权自己的资源给第三方应用程序。
  2. 客户端(Client):第三方应用程序,请求访问资源的代表。
  3. 授权服务器(Authorization Server):负责对资源所有者进行身份验证并颁发访问令牌。
  4. 资源服务器(Resource Server):存储受保护的资源,并根据访问令牌控制对资源的访问。

下面是OAuth2的基本授权流程:

  1. 客户端向授权服务器发起授权请求,请求包括客户端ID、重定向URI等信息。
  2. 授权服务器验证客户端的身份,并要求资源所有者进行身份验证。
  3. 资源所有者同意授权,并将授权码返回给客户端,或者直接将访问令牌返回给客户端(取决于授权方式的不同)。
  4. 客户端使用授权码或访问令牌向授权服务器请求访问令牌。
  5. 授权服务器验证客户端的身份和授权码/访问令牌,并颁发访问令牌。
  6. 客户端使用访问令牌向资源服务器请求受保护的资源。
  7. 资源服务器验证访问令牌,并向客户端返回所需的资源。

Spring Security提供了对OAuth2的支持,可以方便地实现OAuth2的授权流程。通过配置Spring Security的OAuth2相关组件,如AuthorizationServerConfigurer、ResourceServerConfigurer等,可以灵活地定义授权服务器和资源服务器的行为,包括认证方式、授权方式、访问令牌的管理等。

需要注意的是,OAuth2的安全性非常重要,开发者应该仔细考虑和实施相应的安全措施,以防止潜在的安全漏洞和攻击。

画的时序图:

OAuth2的四种模式

1.授权码模式

是最常用的模式,也是最繁琐的模式,同时也是最安全的模式。

1.2.3:用户通过浏览器访问第三方应用(client)的一张照片,但浏览器没有权限

4:通过请求重定向至授权页面,等待用户授权

5.6:用户授权完成,授权服务器返回一个 code 和 client_id 给浏览器

7.8.9:浏览器拿着code去请求client,client拿着code去和授权服务器换取Access_token和 Refresh_token ??

? ? ? ? ps: refresh_token 的作用是刷新AccessToken。认证服务器会提供一个刷新接口,我们传入Refresh_token,认证服务器通过后会返回一个新的AccessToken,起到一个更新迭代的过程。 ? ??

?10.11:client拿着Accesstoken去和资源服务器换取照片信息,资源服务器验证access_Token的合法性,没问题就允许访问可控资源,返回照片列表给client

12.13:client拿到照片列表给到浏览器,浏览器返回视图给用户看

? ? ? ? ps:也可以把访问照片理解成为,登录第三方应用

2.简化模式


简化模式相比于授权码模式,少了code换取token这一步,但不安全,token可以被恶意脚本获取,同时token有效期短,浏览器关闭即失效。

可以看到浏览器请求授权,授权服务器问用户是否授权,用户同意之后,直接返回token给到浏览器,类似于我们的?

? ? ? ? ?ps:一般简化模式用于没有服务器端的第三方单页面应用,因为没有服务器端就无法使用授权码模式,适用于纯静态页面(前端),这个模式下access_token容易泄露且不可刷新

3.密码模式?
密码模式是用户直接将自己的用户名密码交给client(App),client用用户的用户名密码直接换取AccessToken。

?该模式需要用户直接将账号密码发给client,后client用其换取Access_token和 Refresh_token ??

这种模式十分简单,但是却意味着直接将用户敏感信息泄漏给了client,因此这就说明这种模式只能用于client是我们自己开发的情况下。因此密码模式一般用于我们自己开发的,第一方原生App或第一方单页面应用。

? ? ? ? ps:一般用在强信任的两个系统,比如两个产品都是同一个公司

3.密码模式?

密码模式是用户直接将自己的用户名密码交给client(App),client用用户的用户名密码直接换取AccessToken。

4.客户端模式?

只要client请求,我们就将AccessToken发送给它。

这种模式适用于内部系统之间的验证,应用维度的共享资源,不需要用户授权,适合后台服务间的认证和访问

?严格来说,客户端模式并不属于oauth框架所要解决的问题,在这种模式下,已经与用户没有关系了,单纯的数据客户端以自己的名义要求资源提供商提供服务,不存在授权问题。

总结
本文主要介绍了OAuth2的基本概念和四种认证模式,这四种模式各有优缺点,其中最常用的是授权码模式,如果是公司层面使用的话,还得考虑其他因素。

还有的就是不用登录,直接进入

文章来源:https://blog.csdn.net/m0_73647713/article/details/135179795
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。