当前位置: 首页 > 知识库问答 >
问题:

oauth隐式授权与授权代码授权?

徐涵亮
2023-03-14

我想更好地理解隐式授权流和授权代码授权流之间的区别,因为我不确定我目前的理解是否正确。

  1. 隐式授权流主要由前端应用程序用于验证用户身份吗?
  2. 隐式授权流是否只需要一个client_id、用户名和密码来进行身份验证,换句话说,永远不会发送client_secret?
  3. 授权码只是一个短期令牌吗?
  4. 将授权码交换为访问令牌后,客户端可以访问用户帐户多长时间?具体地说,如果客户端是一个长时间运行的脚本,那么用户是否需要在脚本每次运行时进行身份验证?或者,我们是否可以假设,在用户授权一次之后,客户机有权在需要时访问用户(除非用户撤销访问权限),因此,它只需要使用客户机凭据进行身份验证?
  5. 与隐式流相比,使用授权代码流有什么好处?
  6. 资源服务器自身是否需要客户端ID?

谢谢

共有1个答案

司雅畅
2023-03-14

虽然jwilleke回答了您的大部分问题,但我将回答您的具体问题,

  1. 隐式流是为没有能力执行令牌请求的客户端设计的。摘自OAuth 2.0规范-4.2小节

隐式grant类型用于获取访问令牌(它不支持发布刷新令牌),并针对已知操作特定重定向URI的公共客户端进行了优化。这些客户机通常使用JavaScript等脚本语言在浏览器中实现。

它由公共客户端使用。他们没有客户的秘密。这是因为它们无法保护这样的秘密,因为它们是在浏览器上运行的。

授权代码的生存期可以是几秒钟(30秒)到几分钟(2分钟)。与其他代币相比,它们的寿命较短。

这取决于访问令牌的生存时间。如果有一个长时间运行的任务,并且令牌过期,则必须获得一个新的访问令牌进行授权。但是如果您的特定后端建立了一个会话,它的生存期可能会比访问令牌延长。

一个优点是刷新令牌。它可用于刷新访问令牌,而无需最终用户交互(新登录)。另外,根据OAuth server的实现,您可能会获得具有不同生存期的访问令牌。例如,authorization server可能会为隐式流发出短期访问令牌,因为它是由公共客户端使用的。

看情况.如果资源服务器需要从授权使用访问令牌的另一个资源服务器使用受保护的资源,那么您的资源服务器也需要客户端id并遵循特定的流程来获取令牌。但是如果它不在外部通信,您不必为它获得客户端id。

 类似资料:
  • 本文向大家介绍oauth 授权码授予,包括了oauth 授权码授予的使用技巧和注意事项,需要的朋友参考一下 示例 第1步 第2步 资源

  • 隐式许可是为用如JavaScript等脚本语言在浏览器中实现的客户端而优化的一种简化的授权码流程。在隐式许可流程中,不再给客户端颁发授权码,取而代之的是客户端直接被颁发一个访问令牌(作为资源所有者的授权)。这种许可类型是隐式的,因为没有中间凭据(如授权码)被颁发(之后用于获取访问令牌)。 当在隐式许可流程中颁发访问令牌时,发授权服务器不对客户端进行身份验证。在某些情况下,客户端身份可以通过用于向客

  • 我对以下涉及oauth2的流程有一些问题: webapp1.xyz.com是具有授权代码授予类型的注册客户端,以下是当前流程: 用户登录并使用授权码重定向到webapp1.xyz.com webapp1.xyz.com交换访问令牌的授权代码并将其存储到会话 webapp1.xyz.com服务器端需要通过传递访问令牌调用webapp2.xyz.com api webapp1.xyz.com具有SPA

  • 1.1.1. 智能家居 OAuth 授权 1.1.1. 智能家居 OAuth 授权 交互过程 用户添加驱动, 发起授权过程 Homebase 向驱动调用 OAuth Command 接口, 参数为登录回调页面地址 HTTP 驱动 OAuth Command 返回 Oauth 登陆地址 OAuth URL Homebase 打开浏览器, 跳转到转到 OAuth URL 用户输入用户名和密码, 点击授

  • 我们正在开发一个Salesforce组件,可用于显示与客户帐户记录相关的所有信封和状态。信封通过自定义字段生成并通过自定义第三方应用程序链接到帐户记录。我们希望组件不要求登录用户登录DocuSign,只显示信封。因此,我们计划使用一个服务用户来标注文档签名来检索信封。 我的问题是,隐式格兰特是解决这个问题的方法吗?还是JWT格兰特?什么URI参数值(比如范围)是获取令牌的关键?

  • 授权方已经把公众号、小程序授权给你的开放平台第三方平台了,接下来的代授权方实现业务只需一行代码即可获得授权方实例。 实例化 use EasyWeChat\Factory; $config = [ // ... ]; $openPlatform = Factory::openPlatform($config); 获取授权方实例 // 代公众号实现业务 $officialAccount