首页 > 其他分享 >OAuth2

OAuth2

时间:2024-09-01 16:15:08浏览次数:12  
标签:OAuth2 用户 access token code 应用 第三方

以业界标杆微信开放平台的网站应用微信登录给第三方授权为例,尝试解答这个问题。先看微信提供的交互流程图:

可以看出,当微信用户同意授权给第三方应用时,会把授权临时票据code以重定向的方式返回给用户,用户浏览器重定向到第三方应用(同时携带code),第三方应用拿这个code,再加上自己的appid和app_secret请求微信开放平台,获取到微信开放平台返回的access_token。之后第三方应用去请求微信开放平台的资源,只要带上这个access_token去访问就好了。这里顺便多提一句,这里的appid和app_secret是第三方应用提前向微信开放平台注册备案的。这里的疑问点是为什么用户同意授权后,不直接返回access_token,而是返回code? 可以从以下思路考量:如果想直接返回access_token,那么需要在用户发起确认授权的那个请求里带上第三方应用的appid和app_secret,这样才能换到access_token。但是app_secret是第三方应用的私钥,不能给到用户的,因为非常危险。所以一个理解重点是,要换取access_token的三要素:用户的同意授权+第三方appid+第三方app_secret。当这三个要素都具备后,才可以获取access_token。因为用户是拿不到第三方appid+第三方app_secret,所以是不可能从用户侧直接获取到access_token的。这个access_token一定需要从第三方应用侧获取。上面是以微信开放平台的方案为例讲解,如果我们不采用微信的app_secret机制,只要传appid就能换access_token出来,此时是否安全呢?这样是不是就可以少了换code再换access_token这个流程?

这个方案下,如果授权后直接返回access_token给用户浏览器的,然后重定向到第三方应用,第三方应用存储这个access_token。这个会有什么问题吗?

问题在于,我这个access_token暴露在用户浏览器了(用户前端),这种方式并不安全,会被窃取。如果把access_token放在第三方应用的server侧进行请求,这样就安全多了,要实现这点,就得有一个授权服务器把access_token告诉第三方应用后台的方式。考虑这些方案:

  • 授权服务器主动通知方案。当得到用户授权后,就主动给第三方应用后台发一条消息通知这个access_token,当然这里需要提前注册第三方应用后台的通知的地址。但是即使第三方应用后台拿到这个access_token,他也不知道这个access_token对应的是我平台上的哪个用户。即access_token没法跟第三方平台的用户进行关联。
  • code方案。授权后直接返回code给用户浏览器,并携带code重定向给第三方应用后台。此时第三方后台拿到code后,从JWT或者session_id中解析出用户在第三方应用的uid等信息(因为此时用户处于第三方平台的登录态中),这样code和第三方应用的uid就对应上了,此时拿着code去请求access_token,拿到的access_token就是已知uid的access_token。这样一对比,即使是在无app_secret机制的场景下,code方案也是更为合理的。

链接:https://www.zhihu.com/question/27446826/answer/2916005175

标签:OAuth2,用户,access,token,code,应用,第三方
From: https://www.cnblogs.com/leifonlyone/p/18391380

相关文章

  • Spring Boot 与 Spring Security 的集成及 OAuth2 实现
      我的主页:2的n次方_   在现代Web应用开发中,安全性是至关重要的。无论是保护用户的敏感数据,还是确保API只允许经过授权的请求访问,开发者都需要一个强大且灵活的安全框架来实现这些需求。SpringSecurity作为Spring框架的安全模块,能够为应用提供全面的安全保......
  • FastAPI oauth2 + jwt 延长每个请求的exp时间
    根据fastapi的示例,我们可以使用ouath2和json网络令牌为用户创建登录:fromdatetimeimportdatetime,timedelta,timezonefromtypingimportAnnotatedfromfastapiimportDepends,FastAPI,HTTPException,statusfromfastapi.securityimportOAuth2PasswordBearer,O......
  • OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
    文章目录认证的具体实现环境的搭建基础版授权服务搭建引入依赖创建数据表yml配置配置SpringSecurity定义认证授权的配置类授权服务器存储客户端信息修改授权服务配置,支持密码模式基础版授权服务测试授权码模式测试密码模式测试**测试校验token接口**整合JWT使用jwt基......
  • oauth2协议
    什么是OAUTH2协议:首先是几个概念问题:资源:用户信息,在微信中存储资源拥有者:用户认证服务:微信负责认证用户的身份,也负责为客户端颁发令牌客户端:携带令牌请求微信获取用户信息仍以微信简单概述来说授权码模式:1.用户扫码登录,网站向用户申请授权(A)2.用户同意授权(B)3.网站获取授......
  • Google OAuth2 redirect_uri_mismatch 在生产中出现错误,但在本地工作
    我正在开发一个项目,需要使用OAuth2身份验证更新组织的GoogleDrive令牌。我的代码在本地计算机上运行良好,但是当我将其部署到服务器时,遇到无效的错误redirect_url。这是我的代码的相关部分:defupdate_drive_gtoken(data:schema.UpdateDriveToken,sql:Session,......
  • 在Spring Boot中实现OAuth2.0认证
    在SpringBoot中实现OAuth2.0认证大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!OAuth2.0是一种用于授权的协议,它使得用户可以授权第三方应用程序访问他们在某服务提供商上的资源,而无需共享他们的凭据。SpringBoot提供了对OAuth2.0的原生支持,可以方......
  • SpringBoot Security OAuth2实现单点登录SSO(附源码)
    文章目录基础概念1.用户认证2.单点登录(SSO)3.授权管理4.安全性和配置逻辑实现配置认证服务器配置SpringSecurity两个客户端页面展示本篇小结更多相关内容可查看附源码地址:https://gitee.com/its-a-little-bad/SSO.git基础概念SpringBootSecurity和OAut......
  • 使用Java实现OAuth2.0认证
    使用Java实现OAuth2.0认证大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!OAuth2.0认证简介OAuth2.0是一种开放标准的授权协议,允许用户授权第三方应用访问其资源,而无需将用户名和密码提供给第三方应用。在Web开发中,OAuth2.0已经成为一种常见的认证机制,用......
  • 转-OAuth2.0 原理流程及其单点登录和权限控制
    原文链接单点登录是多域名企业站点流行的登录方式。本文以现实生活场景辅助理解,力争彻底理清OAuth2.0实现单点登录的原理流程。同时总结了权限控制的实现方案,及其在微服务架构中的应用。1什么是单点登录1.1多点登录传统的多点登录系统中,每个站点都实现了本站专用的帐号数......
  • 转-OAuth2.0 原理流程及其单点登录和权限控制
    原文链接单点登录是多域名企业站点流行的登录方式。本文以现实生活场景辅助理解,力争彻底理清OAuth2.0实现单点登录的原理流程。同时总结了权限控制的实现方案,及其在微服务架构中的应用。1什么是单点登录1.1多点登录传统的多点登录系统中,每个站点都实现了本站专用的帐号数......