在我的博客项目中,我选用的是Authlib,它是国内的一名Python资深开发者@lepture开发的一款全面完善的OAuth认证库。...大家可能在别的教程里会看到用的是flask-oauthlib,它们的作者其实是同一人,而且在2019年的今天,我绝对会推荐你用Authlib而不是flask-oauthlib。...两个函数是Authlib需要用来获取和更新令牌用的。...跳转google认证地址的URL中需要包含回调的地址,而这个地址必须和之前在Google API Console中配置的地址一致(可以允许是子页面)。现在我们就可以使用第三方登录了。...进一步简化 大家可以发现这样使用我们必须知道Google的认证地址、令牌地址和一些额外请求参数,虽然我们可以查阅[Google OAuth文档]获取这些信息,但这多少也是一种负担。
起因 项目突然要接入TX云,理所应当的要使用tx的单点登录了。于是乎,经过各方推荐,使用了大名鼎鼎的Authlib库。 初体验 经过各方文档,整理了一下,在Flask中使用Authlib相当简单。...其中refresh_token为access_token过期后,下次去OAuth2服务器请求新的Token的字段。如果在注册Authlib对象时写了update方法,即可自动更新token。.../setting.py中读取你设置的{YOUR_NAME}_CLIENT_ID和{YOUR_NAME}__CLIENT_SECRET。...经过进入Authlib的源码中深入调查,发现在fetch_token()这一步中,用OAuth服务器返回的code、states等参数向获取token的接口发请求时直接报404了。...反复查看文档发现地址并没有填错,最后发现,TX云那边使用的是GET方法拿token,而OAuthlib的fetch_token()方法默认使用的是POST方法!!!
“expires_in”值是访问令牌有效的秒数。访问令牌的有效期取决于您使用的服务,并且可能取决于应用程序或组织自己的策略。您可以使用此时间戳来抢先刷新您的访问令牌,而不是等待带有过期令牌的请求失败。...您可以检查此特定错误消息,然后刷新令牌并再次尝试请求。 如果您使用的是基于 JSON 的 API,那么它可能会返回带有错误的 JSON 错误响应invalid_token。...要使用刷新令牌,请使用 向服务的令牌端点发出 POST 请求grant_type=refresh_token,并在需要时包括刷新令牌和客户端凭据。...最安全的选择是授权服务器在每次使用刷新令牌时发出一个新的刷新令牌。这是最新的安全最佳当前实践中的建议,它使授权服务器能够检测刷新令牌是否被盗。...如果刷新令牌因任何原因过期,那么应用程序可以采取的唯一操作是要求用户重新登录,从头开始新的 OAuth 流程,这将向应用程序颁发新的访问令牌和刷新令牌。
步骤一:请求 OAuth 登录页 Request Token URL - 未授权的令牌请求服务地址慕课网请求 QQ 登录页面时使用的带有特定参数的 URL 步骤二:用户使用第三方账号登录并授权 身份认证通过后...,会跳转到第一步的 redirect_uri,并携带 code 参数 步骤三:返回登录结果 User Authorization URL - 用户授权的令牌请求服务地址用户 QQ 登录授权之后需要请求的一个带有特定参数的...AccessToken 和 RefreshToken 数据传输原理 [imooc]带有 AccessToken 参数的特定 URL=>[post]=>[QQ]open Authorization API...=>[xml/json]=>[imooc]带有 AccessToken 参数的特定 URL AccessToken 和 RefreshToken 生命周期解析 AccessToken - 具有较长生命周期...,可能和现有项目冲突 批量替换 SDK 中常量名称为不常见名称 8.整合 SDK 到 Web 项目中–请求访问 QQ 登录页面 $oauth = new Oauth(); $oauth->qq_login
主体:主体是指进行认证和授权的实体,可以是用户、系统或第三方应用程序。在开发中,可以采用前端页面按钮权限控制和后台统一权限控制的方式来确保安全访问。...Cookie和Session有什么区别?如果没有Cookie,Session还能进行身份验证吗?Cookie和Session是用于进行身份验证和状态管理的两种机制,在实现上有一些区别。...由于你在之前登录银行A的网页时,浏览器会自动发送之前的Cookie信息,恶意网页中的请求也会带有相同的Cookie。...OAuth2.0是一种开放标准的授权协议,用于在第三方应用程序和服务之间进行安全的认证和授权。在OAuth2.0中,用户可以通过授权服务器将其身份验证信息与第三方应用程序共享。...JWT(JSON Web Token)令牌是一种轻量级的认证和授权机制,它是由一串经过Base64编码的JSON数据组成的令牌。
客户在向FTGO 应用程序发出的每个后续请求中都会包括会话令牌 当用户使用其用户ID和密码登录时,客户端会向FTGO应用程序发出包含用户凭据的POST 请求。...在服务中实现身份验证的另一个问题是不同的客户端以不同的方式进行身份验证。纯API客户端使用基本身份验证为每个请求提供凭据。其他客户端可能首先登录,然后为每个请求提供会话令牌。...API Gateway 调用的服务需要知道发出请求的主体(用户的身份)。它还必须验证请求是否已经过通过身份验证。解决方案是让 API Gateway 在每个服务请求中包含一个令牌。...透明令牌的一个流行的标准是 JSON Web令牌(JWT)。JWT是在访问双方之间安全地传递信息(例如用户身份和角色)的标准方式。...客户端在向 API Gateway 发出的请求中包含访问令牌和刷新令牌。 6.
客户在向FTGO 应用程序发出的每个后续请求中都会包括会话令牌 当用户使用其用户ID和密码登录时,客户端会向FTGO应用程序发出包含用户凭据的POST 请求。...在服务中实现身份验证的另一个问题是不同的客户端以不同的方式进行身份验证。纯API客户端使用基本身份验证为每个请求提供凭据。其他客户端可能首先登录,然后为每个请求提供会话令牌。...APIGateway 调用的服务需要知道发出请求的主体(用户的身份)。它还必须验证请求是否已经过通过身份验证。解决方案是让 API Gateway 在每个服务请求中包含一个令牌。...透明令牌的一个流行的标准是 JSON Web令牌(JWT)。JWT是在访问双方之间安全地传递信息(例如用户身份和角色)的标准方式。...客户端在向 API Gateway 发出的请求中包含访问令牌和刷新令牌。 6.
客户在向 FTGO 应用程序发出的每个后续请求中都会包括会话令牌 当用户使用其用户 ID 和密码登录时,客户端会向 FTGO 应用程序发出包含用户凭据的 POST 请求。...在服务中实现身份验证的另一个问题是不同的客户端以不同的方式进行身份验证。纯 API 客户端使用基本身份验证为每个请求提供凭据。其他客户端可能首先登录,然后为每个请求提供会话令牌。...它还必须验证请求是否已经过通过身份验证。解决方案是让 API Gateway 在每个服务请求中包含一个令牌。服务使用令牌验证请求,并获取有关主体的信息。...透明令牌的一个流行的标准是 JSON Web 令牌(JWT)。JWT 是在访问双方之间安全地传递信息(例如用户身份和角色)的标准方式。...客户端在向 API Gateway 发出的请求中包含访问令牌和刷新令牌。
基本介绍 过去十年来,OAuth2授权协议备受争议,您可能已经听说过很多"return_uri"技巧、令牌泄漏、对客户端的CSRF式攻击等等,在这篇文章中,我们将介绍三个全新的OAuth2和OpenID...OAuth注册请求格式是标准化的,即使在黑盒测试场景中也可能。...(通过登录表单提交或任何其他方式) 请求用户同意与外部方共享数据 将用户重定向回外部方(使用参数中的代码/令牌) 在我们看到的许多OAuth服务器实现中,这些步骤是通过使用三个不同的控制器来分隔的,例如...最明显的方法是: 在会话中存储"client_id "和"redirect_uri" 参数 在HTTP查询参数中为每个步骤传递这些参数,这可能需要对每个步骤进行有效性检查,验证程序可能不同 创建一个新的...,当访问"/confirm_access"时,它从URL获取所有参数,并毒害模型/会话,现在当用户批准第一个请求时(因为"client_id"是可信的),授权令牌就会泄漏到恶意网站 注意:您可能会注意到第一个请求中的
但是,标准的 OAuth 授权代码流程要求向 OAuth 服务器的令牌端点发出 POST 请求,该端点通常与应用程序位于不同的域中。这意味着以前无法通过 JavaScript 使用此流程。...OAuth 交换和后端内部的令牌管理,从不将其暴露给 JavaScript 前端,并避免在 JavaScript 中管理令牌的所有固有风险。...POST 请求并解析 JSON 响应。...检查授权服务器是否返回授权码,并将其交换为访问令牌 向令牌端点发送 POST 请求,其中包括code_verifier它在上一步中创建的参数 更新 UI 以指示错误消息或显示返回的访问令牌 使用会话历史管理...在实践中,您可能会使用一个 JavaScript 库在幕后为您处理这个问题,但了解它在幕后是如何工作的仍然很有用! OAuth 2.0 PKCE Flow
SAML SAML 基本上是您浏览器中的一个会话 cookie,可让您访问网络应用程序。它在您可能希望在 Web 浏览器之外执行的设备配置文件类型和场景方面受到限制。...简而言之,REST 是通过网络推送 JSON 数据包的 HTTP 命令。 开发人员构建了很多 API。API 经济是您今天可能在董事会中听到的一个常见流行语。...您需要为您的申请获得牌照。这就是您的应用程序徽标在授权对话框中的显示方式。 OAuth 令牌 访问令牌是客户端用来访问资源服务器 (API) 的令牌。他们注定是短暂的。...不在 OAuth 规范中,是Device Flow。没有网络浏览器,只有电视之类的控制器。用户代码是从授权请求返回的,必须通过访问带有浏览器的设备上的 URL 来兑换授权。...ID 令牌是 JSON Web 令牌 (JWT)。JWT(又名“jot”)比基于 XML 的巨大 SAML 断言小得多,可以在不同设备之间高效传递。JWT 包含三个部分:标头、正文和签名。
SAML SAML 基本上是您浏览器中的一个会话 cookie,可让您访问网络应用程序。它在您可能希望在 Web 浏览器之外执行的设备配置文件类型和场景方面受到限制。...简而言之,REST 是通过网络推送 JSON 数据包的 HTTP 命令。 开发人员构建了很多 API。API 经济是您今天可能在董事会中听到的一个常见流行语。...这就是您的应用程序徽标在授权对话框中的显示方式。 OAuth 令牌 访问令牌是客户端用来访问资源服务器 (API) 的令牌。他们注定是短暂的。以小时和分钟来考虑它们,而不是几天和一个月。...不在 OAuth 规范中,是Device Flow。没有网络浏览器,只有电视之类的控制器。用户代码是从授权请求返回的,必须通过访问带有浏览器的设备上的 URL 来兑换授权。...ID 令牌是 JSON Web 令牌 (JWT)。JWT(又名“jot”)比基于 XML 的巨大 SAML 断言小得多,可以在不同设备之间高效传递。JWT 包含三个部分:标头、正文和签名。
在登录中使用Max Retry和监禁功能。 对所有敏感数据使用加密。 JWT(JSON 网络令牌) 使用一个随机的复杂密钥 ( JWT Secret) 使暴力破解令牌变得非常困难。...使令牌到期 ( TTL, RTTL) 尽可能短。 不要在 JWT 有效载荷中存储敏感数据,它可以很容易地被解码。 身份验证 始终验证redirect_uri服务器端以仅允许列入白名单的 URL。...始终尝试交换代码而不是令牌(不允许response_type=token)。 使用state带有随机哈希的参数来防止 OAuth 身份验证过程中的 CSRF。...输入 根据操作使用正确的 HTTP 方法:GET (read)、POST (create)、PUT/PATCH (replace/update)和,如果请求的方法不适合请求的资源,则使用DELETE (...持续集成和光盘 使用单元/集成测试覆盖率审核您的设计和实现。 使用代码审查流程并忽略自我批准。 确保在推送到生产之前,您的服务的所有组件都由 AV 软件静态扫描,包括供应商库和其他依赖项。
1 简介 JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑、自包含的方式,作为JSON对象在各方之间安全地传输信息,是用一种结构化封装的方式来生成token的技术...作用 可能你觉得,有了HEADER和PAYLOAD就可让令牌携带信息在网络中传输了,但在网络中传输这样的信息体不安全。...6.5 简化AuthServer实现 无需对用户状态会话进行维护和管理 7 缺点 无状态和吊销无法两全 无法在使用过程中修改令牌状态。...但使用JWT时,每次颁发的令牌都不会存在服务端,无法改变令牌状态。这表示JWT令牌在有效期内畅通无阻。 那么可以把JWT令牌存储在一个分布式内存数据库比如Redis中吗? NO!...令牌在OAuth 2.0系统中对于第三方软件都是不透明的。需要关心令牌的,是授权服务和受保护资源服务。 JWT 默认是不加密,但也是可以加密的。
这意味着一旦会话到期,服务器将找不到预期的CSRF令牌并拒绝HTTP请求。以下是一些解决办法: 减少超时的最佳方法是在表单提交时使用JavaScript请求CSRF令牌。...这允许预期的CSRF令牌在会话结束后继续使用。 文件上传 保护multipart请求(文件上传)免受CSRF攻击会导致鸡和蛋的问题。...对于给multipart/form-data请求进行CSRF保护,有两种办法: 在Body中放置CSRF令牌 在请求主体中包含实际的CSRF令牌。...通过在Body中放置CSRF令牌,在执行授权之前将读取主体。这意味着任何人都可以在服务器上放置临时文件。但是,只有授权用户才能提交由您的应用程序处理的文件。...在URL中放置CSRF令牌 如果允许未经授权的用户上载临时文件是不可接受的,另一种方法是在表单的action属性中包含预期的CSRF令牌作为查询参数。这种方法的缺点是查询参数可能会泄漏。
了解 OAuth 2.0 我们已经刷新了关于认证和授权的认知,并将了解基于令牌认证的常识。在本章节中,来看看最常用的一种实现:OAuth 2.0。...OAuth 2.0 简介 在传统 C/S 模型中,客户端(client)通过让服务器认证资源拥有者(resource owner)的凭证来请求服务端受保护的资源。...(https://dzone.com/refcardz/core-json) 的 “JSON Web 令牌声明” 注册表中。...紧凑 JSON 比 XML 简介,所以当其被编码后,一个 JWT 比 SAML 令牌更小。这使得 JWT 成为一个在 HTML 和 HTTP 环境中传送的好选择。...在不违背 JWT 令牌的“无状态”方面的前提下,是不可能破坏一个令牌的,即便令牌已从浏览器被删除,它也会在过期前一直有效。
OAuth2是一种授权框架,用于保护API和其他Web资源。它使客户端(应用程序或服务)可以安全地访问受保护的资源,而无需暴露用户凭据(例如用户名和密码)。...在OAuth2中,客户端必须获取一个访问令牌(access token),该令牌代表了对受保护资源的访问权限。...以下是使用OAuth2保护API的详细步骤:步骤1:注册客户端 在使用OAuth2保护API之前,客户端必须先在OAuth2服务器上进行注册。...步骤4:使用访问令牌访问受保护的资源 客户端现在可以使用访问令牌来访问受保护的资源。客户端在请求中发送访问令牌,并且API在处理请求时将验证访问令牌的有效性。...客户端向OAuth2服务器发送了一个POST请求,请求访问令牌。
作用 可能你觉得,有了HEADER和PAYLOAD就可让令牌携带信息在网络中传输了,但在网络中传输这样的信息体不安全。...增强系统可用性和可伸缩性 JWT令牌,通过“自编码”方式包含身份验证需信息,不再需要服务端额外存储,所以每次的请求都是无状态会话。符合尽可能遵循无状态架构设计原则,即增强了系统可用性和伸缩性。...JWT令牌的缺陷 无法在使用过程中修改令牌状态。 比如我在使用xx时,可能因为莫须有原因修改了在公众号平台的密码或突然取消了给xx的授权。这时,令牌状态就该有变更,将原来对应令牌置无效。...但使用JWT时,每次颁发的令牌都不会存在服务端,无法改变令牌状态。这表示JWT令牌在有效期内畅通无阻。 那么可以把JWT令牌存储在一个分布式内存数据库比如Redis中吗? NO!...令牌在OAuth 2.0系统中对于第三方软件都是不透明的。需要关心令牌的,是授权服务和受保护资源服务。 JWT 默认是不加密,但也是可以加密的。
资源服务器需要了解访问令牌的含义以及如何验证它,但应用程序永远不会关心理解访问令牌的含义。 访问令牌在传输和存储过程中必须保密。唯一应该看到访问令牌的各方是应用程序本身、授权服务器和资源服务器。...redirect_uri(可能需要) 如果重定向 URI 包含在初始授权请求中,则服务也必须在令牌请求中要求它。令牌请求中的重定向 URI 必须与生成授权代码时使用的重定向 URI 完全匹配。...code_verifier(需要 PKCE 支持) 如果客户端code_challenge在初始授权请求中包含一个参数,它现在必须通过在 POST 请求中发送它来证明它具有用于生成哈希的秘密。...如果您正在实施自编码授权代码,如我们的示例代码中所示,您将需要跟踪在令牌的生命周期内使用的令牌。实现此目的的一种方法是在代码的生命周期内将代码缓存在缓存中。...OAuth 2.0 Bearer 令牌的格式实际上在单独的规范RFC 6750中进行了描述。
在OAuth中,简单来说有三方:用户(这里是指属于服务方的用户)、服务方、第三方应用。...,但不愿意把自已在服务方的密码交给第三方; 在oauth2.0的流程中,用户登录了第三方的系统后,会先跳去服务方获取一次性用户授权凭据,再跳回来把它交给第三方,第三方的服务器会把授权凭据以及服务方给它的的身份凭据一起交给服务方...从上面的流程中可以看出,oauth2.0完整地解决掉了用户、服务方、第三方 在某次服务时这三者之间的信任问题。...这一步是在客户端的后台的服务器上完成的,对用户不可见。 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。...state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。
领取专属 10元无门槛券
手把手带您无忧上云