OAuth2 访问令牌中允许使用哪些字符?

2023-12-28

RFC6749 https://www.rfc-editor.org/rfc/rfc6749 and RFC6750 https://www.rfc-editor.org/rfc/rfc6750对于 OAuth2 访问令牌中允许使用哪些字符,似乎彼此存在分歧。

A.12 节 https://www.rfc-editor.org/rfc/rfc6749#appendix-A.12RFC6749(原始 OAuth2 规范)定义访问令牌格式如下:

A.12. “access_token”语法

“access_token”元素在第 4.2.2 和 5.1 节中定义:

access-token = 1*VSCHAR 

In ABNF 格式 https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form, VSCHAR 表示:

VSCHAR = %x20-7E

(这基本上是所有可打印的 ASCII 字符 https://stackoverflow.com/questions/983291/purpose-of-x20-x7e-in-regular-expressions)

但是,在 RFC6750(涉及 OAuth2 不记名令牌的使用)中第2.1节 https://www.rfc-editor.org/rfc/rfc6750#section-2.1似乎为访问令牌设置了更严格的允许字符子集。

Bearer 凭证的语法如下:

b64token    = 1*( ALPHA / DIGIT /
                   "-" / "." / "_" / "~" / "+" / "/" ) *"="
credentials = "Bearer" 1*SP b64token

因此,这是一组限制性更强的字符,仅包括字母数字、六个特殊字符和尾随字符=用于填充。

我的问题是:

  1. 这些文件中的哪一个是控制性的? RFC6750 是否优先,因为它限制性更强?

  2. 就“野外”的实际实现而言,访问令牌是否始终仅限于 RFC6750 字符集?

  3. 额外问题:有谁知道吗why同月就如此密切相关的主题发布的这两个规范在访问令牌格式上存在分歧?


TL;DR:标准之间不存在冲突。 OAuth 访问令牌可以一般来说包含任何可打印的 ASCII 字符,但是if访问令牌是承载令牌,它必须使用“token64”语法才能兼容 HTTP/1.1。

RFC 6749,§1.4 https://www.rfc-editor.org/rfc/rfc6749#section-1.4告诉我们:“访问令牌是一个字符串”并且“通常对客户端来说是不透明的”。§A.12 https://www.rfc-editor.org/rfc/rfc6749#appendix-A.12将其定义为一个或多个可打印 ASCII 字符 ([ -~]+在正则表达式中)。

RFC 6749 定义了各种方法获得一个访问令牌,但并不关心如何实际use访问令牌,而不是说您将其“呈现”给资源服务器,资源服务器必须验证然后接受或拒绝它。

但 RFC 6749 确实要求授权服务器告诉客户端代币类型(另一个字符串),客户端可以使用它来确定how使用访问令牌。

A 代币类型string 是 IANA 注册的类型名称(例如Bearer or mac),或供应商 URL(例如http://oauth.example.org/v1),尽管 URL 只是一个方便的命名空间标识符,并且不必解析为任何内容。

在大多数部署中,令牌类型为Bearer,其语义在 RFC 6750 中定义。

RFC 6750 定义three向资源服务器提供承载访问令牌的方法 (§§2.1–2.3)。这受到推崇的方法(哪个资源服务器must支持符合标准)的方法是在 HTTP 授权标头中发送它(§2.1 https://www.rfc-editor.org/rfc/rfc6750#section-2.1),在这种情况下,令牌必须是“b64token”([-a-zA-Z0-9._~+/]+=*在正则表达式中)。

这与 HTTP/1.1 规范所称的“token68”相匹配(RFC 7235 §2.1 https://www.rfc-editor.org/rfc/rfc7235#section-2.1),并且对于允许在 HTTP 授权标头中不加引号地使用令牌是必要的。 (至于为什么 HTTP/1.1 允许这些确切的字符,这可以归结为与 HTTP/1.0 和基本身份验证标准相关的历史原因,以及当前和历史 HTTP 实现的限制。网络协议是一件混乱的事情。)

一个“b64token”(aka“token68”)允许通常与 Base64 编码一起使用的 ASCII 字符子集,但是(尽管有名称)承载令牌不强加任何 base64 语义 http://w3-org.9356.n7.nabble.com/p7-rename-b64token-to-token68-to-avoid-misunderstandings-td108256.html。它只是客户端从一台服务器接收并传递到另一台服务器的不透明字符串。实现可以为其分配语义(例如JWT https://en.wikipedia.org/wiki/JSON_Web_Token),但这超出了 OAuth 或不记名令牌标准。

RFC 6750 没有规定如果与其他两种(不推荐)方法一起使用,承载访问令牌必须是 b64token,但考虑到客户端应该能够选择该方法,因此给出没有多大意义它是一个非 b64token 令牌。

其他 OAuth 令牌类型可能不依赖于在 HTTP 标头中不加引号地传递(或者它们可能根本不使用 HTTP),因此可以自由使用任何可打印的 ASCII 字符。这可能例如对于令牌类型很有用not对客户不透明;作为一个例子,我目前正在处理一个设置,其中访问令牌响应看起来有点像这样:

{
  "access_token": "{\"endpoint\": \"srv8.example.org\", \"session_id\": \"fafc2fd\"}",
  "token_type": "http://vendor.example.org/",
  "expires_in": 3600,
  "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA"
}

这里,访问令牌是 JSON 编码的数据结构,客户端必须根据该数据结构进行操作(根据与供应商令牌类型关联的规则)才能访问受保护的资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OAuth2 访问令牌中允许使用哪些字符? 的相关文章

  • 包含带重音符号的域的主要缺点是什么?

    我正在考虑获取一个包含重音字符的域 它包含 然而 我注意到只有一些公司提供它们 这些域是否存在普遍问题 或者我在使用这些域时是否会遇到某些缺点 DNS 协议仅支持 ASCII 带有重音字符的域被编码为 ASCII 使用Punycode ht
  • 是否可以通过 Google oAuth2 获取电话号码?

    根据 OpenID 规范 应该是可以的http openid net specs openid attribute properties list 1 0 01 html http openid net specs openid attri
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • Google API 和 OAuth 2.0 的正确重定向 URI

    我正在使用 Google Maps API 制作一个应用程序 我希望能够让一个人在一台计算机上观看另一个人在地图上编辑的内容 我正在考虑将地图信息传递到 Google Fusion Table 另一个人将能够将所有内容视为一层 我希望该程序
  • JWT - 配置授权服务器并将颁发者设置为其本身

    我正在尝试按照本指南设置授权服务器 http bitoftech net 2014 10 27 json web token asp net web api 2 jwt owin authorization server http bito
  • Google OAuth 2 和状态参数值需要在重定向 url 中注册

    根据 Google Oauth 2 0 文档的状态参数 指示收到响应后可能对您的应用程序有用的任何状态 Google 授权服务器会往返此参数 因此您的应用程序会收到与发送的值相同的值 可能的用途包括将用户重定向到站点中的正确资源 随机数和跨
  • POST 请求“访问此资源需要完全身份验证”

    是否有人在尝试使用 POST 请求 oauth token 进行身份验证时遇到错误 访问此资源需要完全身份验证 卷曲命令 curl localhost 85 oauth token d grant type password d clien
  • CSS以两种颜色显示一个字符[重复]

    这个问题在这里已经有答案了 css中是否可以用两种颜色制作单个字符 我的意思是例如字符 B 上半部分为红色 下半部分为蓝色 h1 font size 72px background webkit linear gradient red 49
  • 使用 login.microsoft.com 的 OAuth 返回不一致的令牌

    我在用着office js helpers认证库 https github com OfficeDev office js helpers authentication 使用Microsft Azure AD 2 0 Converged a
  • 什么是“代码替换(OAuth 登录)”威胁?

    来自OAuth 2 0 威胁模型和安全注意事项 draft https datatracker ietf org doc html draft ietf oauth v2 threatmodel 08 section 4 4 1 13 4
  • JSF 2.0 request.getParameter 返回编码错误的字符串

    我正在用 JSF 2 0 编写一个应用程序 它支持多种语言 其中包括带有特殊字符的语言 我使用 String value request getParameter name 和 POST 方法 页面编码设置为 UTF 8 应用程序部署在 a
  • AADSTS50013:断言受众声明与所需值不匹配

    我有一个单页应用程序 可以使用 adal angular js adal js client 对 Azure 中的用户进行身份验证 返回的令牌被插入到 auth 标头中并传递到 Web API 服务器 此 Web api 使用代表工作流程为
  • Java ReplaceAll() 正则表达式不起作用[重复]

    这个问题在这里已经有答案了 我试图用 替换所有特殊字符 例如 123 456 789 gt 123 465 798 我的正则表达式是 a zA Z0 9 在在线工具 中它工作得很好 但是在java中 s replaceAll a zA Z0
  • 带有特殊字符的 PHP PDO

    我在用PDO用于MySQL数据库连接 选择 更新和删除 但我在选择行时遇到问题特殊字符 例如 我想选择带有 Judge F rstov Mila 的页面标题 Table page id title content 1 Judge F rst
  • 在 Swift 2.0 中将字符转换为 Int

    我只想转换一个特点进入一个Int 这应该很简单 但我发现以前的答案没有帮助 总有一些错误 也许是因为我正在 Swift 2 0 中尝试它 for i in unsolved characters fileLines String i toI
  • 查询时出现非法字符

    I have an application that needs to query Google for directions etc I have reorganised my code recently made some optima
  • 身份服务器刷新令牌资源所有者密码凭证流程

    我正在使用 IdentityServer 来控制对 API 的访问 我有一个单独的身份验证 API 它发出令牌并验证访问请求以确保 API 的安全 我让用户能够通过安全的 Web 应用程序生成访问令牌 我正在使用资源所有者密码凭证流程 有没
  • Azure 应用程序错误地请求管理员同意?

    我希望有人对我在Microsoft的Azure Portal中使用新注册的应用程序遇到的问题有所了解 portal azure com https portal azure com 当我收到以下对话框时 我的登录问题 右下角出现错误代码和消
  • Android - 如何获取文本视图中字符的坐标

    是否可以从 Android 中的 TextView 中的字符获取 x 坐标 我不是在寻找 TextView 本身的坐标 我需要 TextView 中最后一个字符的坐标 多行 提前致谢 Java解决方案 以下是如何获得x and y特定字符的
  • 无法使用 IdentityServer 验证 AccessToken

    我们使用 IdentityServer 进行身份验证 并使用 JwtSecurityTokenHandler ValidateToken 验证访问令牌 这曾经工作正常 但在我们将客户端应用程序升级到 ASP NET Core 1 0 RTM

随机推荐

  • BaseX REST API:设置自定义 HTTP 响应标头

    我想将以下 HTTP 标头包含到所有响应中BaseX REST API http docs basex org wiki REST Access Control Allow Origin 这可能吗 BaseX 在底层使用 Jetty 您可以
  • 如何向 java.sql.date 添加天数?

    这是我的程序 我尝试过 java sql Date logicalDate Calendar c Calendar getInstance c setTime logicalDate c add Calendar DATE 1 下面的行显示
  • Cakephp - 使用身份验证时在控制器中获取用户 ID

    这似乎是一个两步的过程 u this gt Auth gt user uid u User id 用户登录后是否会在某处设置变量 您可以使用 uid this gt Auth gt user id 查看api文档 https api cak
  • 如何测试两个移动的二维边界框的碰撞?

    OBB 具有位置 x y 速度 x y 和方向 矩阵 在定期更新的情况下 OBB 必须相互碰撞 返回被认为成功的移动部分 我查看了 GPWiki 上的多边形测试 http gpwiki org index php Polygon Colli
  • GWT 和 OSGi 集成问题

    我在将 GWT 集成到 OSGi Equinox 容器中时遇到问题 入口点网页运行 我看到我的第一页 但是 当我点击按钮实现服务器调用时 它没有运行 我使用 Firefox 并且有 firebug 然后 当我看到网络字段时 我收到下一条消息
  • 在 python-fastApi 中间件中引发异常

    我正在尝试验证 fastapi 中间件中的令牌 但这似乎不可能 我认为中间件需要进行下一次调用 尽管这不是必需的 我无法在这个 python fastapi 后端找到任何好的解决方案来一次性处理令牌 任何帮助表示赞赏 app middlew
  • 没有自动提交的 Git 合并

    是否可以做一个git merge 但没有提交 man git merge 是这样说的 With no commit perform the merge but pretend the merge failed and do not auto
  • NSOperationQueue 随机暂停?

    我有一个大量使用 NSOperationQueue 的应用程序 有时我注意到一些 NSOperationQueues 会 锁定 或随机进入 isSuspished 状态 即使我的代码从未调用 setSuspished 方法 这是不可能复制的
  • 构建向导的好模式?

    我通常使用一个TabControl并以某种方式隐藏选项卡并浏览它们 我很好奇这样做的其他方法 你可以使用一个集合Panel http msdn microsoft com en us library system windows contr
  • 如何手动更改 ggplot2 中图例中的关键标签

    我正在准备要出版的情节 我创建了一个堆积箱形图来显示每组中患有血清阴性病例复杂积累的患者与非血清阴性患者的频率 图例使用数据框中的标签 这些标签适合我们正在从事该项目的人 但不适合发布 我想将这些名称更改为读者更容易理解的名称 例如运行以下
  • 停止 HttpURLConnection 中的静默重试

    我在用着HttpURLConnection on 安卓奇巧将一些数据发布到服务器 服务器需要很长时间才能响应 并且连接在超时之前会静默重试 1 到 3 次 我不希望它重试 因为服务器会对所有请求执行操作 从而导致 Bad Things TM
  • Javascript滚动到div id [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 编辑问题以包括期望的行为 特定问题或错误以及重现问题所需的最短代码 help minimal reproducible example 这
  • Hystrix 仪表板始终显示加载屏幕

    我使用 Netflix OSS 库开发了微服务应用程序 我在 localhost 9091 hystrix 上运行的 Hystrix 仪表板上遇到问题 我想监控微服务A和微服务B之间的请求指标 端点 hystrix stream 已注册 h
  • 我得到了错误的客户端 IP 地址

    我正在运行 ASP NET 应用程序 Web 服务器位于同一系统上 在后面的代码中我只想获取请求客户端的IP地址 我正在使用这段代码 Request UserHostAddress 但我得到了一个错误的地址 127 0 0 1 我的系统IP
  • Rails own_to 关联(带有 :class_name)返回 nil

    我对 Rails 开发比较陌生 并且遇到了一个小的关联问题 我想将一个关联命名为与其所链接的模型不同的名称 我有以下2个型号 class User lt ActiveRecord Base has many events end class
  • SecurityException:不允许启动服务

    在我们的应用程序中 我们有一个Service以这种方式定义
  • 在 Angular.js $http 请求之后,无论 Promise 成功还是失败,都调用完整的函数

    我怎样才能确保complete 无论 http 调用的结果如何 函数都会使用 Angular js 提供的 Promise API 运行吗 http method POST url submitUrl data scope data suc
  • 在 Sublime Text 中如何复制没有行尾字符的行

    在 ST3 中 您只需使用 ctrl c 即可复制整行 这非常有用 唯一的问题是该命令还会复制 返回 或换行符 因此例如当您复制一行并粘贴到控制台中时它将立即运行该命令 这是不可取的 因为我想在运行命令之前先对其进行编辑 这迫使我手动突出显
  • R 神经网络包 - net.result 显示什么?

    使用以下代码 我构建了一个神经网络模型来预测收盘价 library neuralnet myformula lt close High Low Open nn close lt neuralnet myformula data train
  • OAuth2 访问令牌中允许使用哪些字符?

    RFC6749 https www rfc editor org rfc rfc6749 and RFC6750 https www rfc editor org rfc rfc6750对于 OAuth2 访问令牌中允许使用哪些字符 似乎彼