OAuth 2

OAuth 2是授权框架,用于保护Web应用程序。介绍了其身份验证组件,包括资源服务器、用户、客户端和授权服务器。重点阐述了OAuth 2最常见的四种授权方式,即授权码授权类型、密码授权类型、客户端凭据授权类型以及刷新令牌获取新的访问令牌,每种方式都有详细流程说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OAuth 2通常用于保护Web应用程序,在大多数情况下,OAuth 2被称为授权框架,其主要目的允许第三方网站或应用程序访问资源。在一个大的组织中,通常会使用多个应用程序,每个应用程序独立地管理凭据,这样会有许多缺点。如果将凭证管理的职能隔离在系统的一个组件中会更好,用户可以使用相同的凭据就可以登陆任何应用程序。这个组件称为授权服务器。

OAuth 2身份验证组件:

资源服务器:托管用户所拥有资源的应用程序。资源服务器会保存用户的所有数据。它只允许客户端在用户同意的情况下使用数据。客户端可以使用从授权服务器获得的证明来使用数据

用户(资源所有者):拥有由资源服务器暴露的资源的个体。用户需要访问和更改他所拥有数据,可以通过允许客户端使用它的数据。

客户端:以用户名义访问该用户所拥有的资源的应用程序。它可以是一个web或移动应用。用户使用这个应用程序访问或改变它拥有的数据。客户端使用客户端ID和客户端密钥来标识自己。注意这些凭据与用户凭据不同。客户端在发送请求时需要自己的凭据来标识自己。

授权服务器:授权客户端访问由资源服务器暴露的用户资源的应用程序。当授权服务器决定授权客户端以用户的名义访问资源时,它会发出一个令牌。客户端使用此令牌向资源服务器证明它已被收授权服务器授权。如果它有一个有效的令牌,则资源服务器将允许客户端访问它请求的资源

OAuth 2最常见的四种授权方式

授权码授权类型

        1,客户端将用户重定向到需要进行身份验证的授权服务器端点。例如我们正在使用应用程序X,并且需要访问一个受保护的资源。为了访问该资源,应用程序X需要我们进行身份验证。它会打开一个授权服务器的页面,其中包含登陆表单,我们必须用凭据填写该表单。注意这里用户直接与授权服务器交互,不会向客户端应用程序发送凭据。

        同时用户会调用授权端点,并在请求中使用一下详细信息。带有code值的response_type,它会告知授权服务器客户端需要一个授权码。client_id具有客户端ID的值,它会标识应用程序本身。redirect_uri,告知授权服务器在成功进行身份验证之后将用户定向到何处,有时授权服务器已经知道每个客户但的默认重定向uri,就可以不需要发送重定向uri。scope被授权的权限。state。定义一个跨站请求伪造令牌。

        身份验证成功后,授权服务器将根据重定向uri回调客户端,并提供授权码和状态值。客户端会检查状态值是否与它在请求中发送的状态值相同。

        2,使用授权码授权类型获取令牌

        客户端将使用该授权码调用授权服务器以获取令牌。此请求包含code,步骤1接收到的授权码。这将证明用户经过了身份验证。client_id和client_secret,它们是客户端的凭据。redirect_uri,用户验证与步骤1的uri相同。authorization_code值的grant——type,标识所有用此流程的类型,确定执行哪个身份验证流程。最为响应,返回access_token。

        3,使用授权码授权类型调用受保护资源

        客户但要在授权请求头中使用访问令牌,可以调用受保护的资源。

       为什莫不直接返回access_token。因为授权码,会证明用户经过了身份验证,并对客户端进行了授权。如果直接获取,无法确保收收到的令牌是正确的客户端。

         优点:让用户可以允许客户端执行指定操作,而不需要与客户端共享凭据。

密码授权类型

        也称为资源所有者凭据授权类型。使用此流程的应用程序会假定客户端收集用户凭据,并使用这些凭据进行身份验证,然后从授权服务器获得访问令牌。

        1,使用密码授权类型时请求访问令牌。当请求访问令牌时,客户端请求发送信息:具有password值的grant_type。client_id和client_secret,客户端对其自身进行身份验证的凭据。scope,已授权权限。username和password 用户凭据。客户端在响应中收到回一个访问令牌。

        2,使用令牌调用资源

        使用令牌调用资源服务器上的端点。

        密码授权类型,客户端与用户共享凭据。由于这个原因,这个类型只适用于资源所有者‘信任’客户端的情况。即使授权服务器和客户端都是由同一组织构建的,也应该首先考虑使用授权码授权类型,而将密码授权类型作为第二个选项。

客户端凭据授权类型

        客户端凭据授权类型与密码授权类型类似。唯一的例外是对访问令牌的请求不需要任何用户凭据。

        1,客户端向授权服务器发送请求。client_credentials值的grant_type,client_id和client_secret值,代表客户端凭据。scope,已授权的权限。

        2,用令牌调用资源服务器上的端点。

刷新令牌获取新的访问令牌

        当使用授权码或密码授权类型流程时,授权服务器将返回一个刷新令牌和一个访问令牌。一旦客户端有了一个刷新令牌,那么当访问令牌过期时,客户端应该发送一个请求。具有refresh_token值的grant_type,具有刷新令牌值的refresh_token,client_id和client_secret,scope。

        为了响应此请求,授权服务器会发出一个新的访问令牌和一个新的刷新令牌。

### OAuth 2.0 协议详解 #### OAuth 2.0 的作用及工作流程 OAuth 2.0 是一种用于授权的开放标准协议,旨在让应用能够安全地获取有限制条件下的用户数据访问权限。该协议允许第三方服务在不暴露用户凭证的情况下获得用户的同意来访问特定的数据或执行某些操作[^1]。 具体来说,在OAuth 2.0的工作流中,当客户端请求受保护资源时,会重定向到授权服务器让用户登录并确认授权许可;一旦得到批准,则返回给客户端一个临时性的授权码。接着,客户端利用此授权码向授权服务器换取长期有效的访问令牌(access token),之后便可以凭借这个令牌去调用API接口完成相应功能[^2]。 #### 应用场景举例 - **社交媒体分享**:网站可以通过集成社交平台提供的SDK实现一键分享按钮的功能,而无需保存用户的账号密码信息。 - **跨站单点登录(SSO)**:多个关联站点之间共享同一套认证体系,简化了多处注册繁琐过程的同时提高了用户体验度。 - **云存储同步**:个人电脑上的文件夹可自动上传备份至云端空间,期间涉及到了对远程服务器上私有资料的操作权利授予问题。 - **移动支付绑定银行卡**:手机APP里添加银行账户选项时往往也需要经过类似的验证环节以确保资金流转的安全可靠。 ```python import requests def get_access_token(client_id, client_secret, authorization_code, redirect_uri): url = 'https://example.com/oauth/token' payload = { 'grant_type': 'authorization_code', 'client_id': client_id, 'client_secret': client_secret, 'code': authorization_code, 'redirect_uri': redirect_uri } response = requests.post(url, data=payload) return response.json().get('access_token') ``` 上述代码展示了如何使用Python发送HTTP POST请求交换授权码为访问令牌的过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值