据我所知,OAuth 2.0规范在access token应采取的形式方面非常模糊:
令牌可以表示用于检索授权信息的标识符,或者可以以可验证的方式自包含授权信息(即,由一些数据和签名组成的令牌串).可能需要额外的身份验证凭据(超出本规范的范围),以便客户端使用令牌.
访问令牌提供抽象层,用资源服务器理解的单个令牌替换不同的授权构造(例如,用户名和密码).这种抽象使得发布访问令牌比用于获取它们的授权授权更具限制性,并且消除了资源服务器理解各种身份验证方法的需要.
访问令牌可以具有基于资源服务器安全性要求的不同格式,结构和利用方法(例如,加密属性). 访问令牌属性和用于访问受保护资源的方法超出了本规范的范围,并由协议规范(如RFC6750)定义.
(重点补充)
链接的RFC6750没有提供更多的进一步特异性.有一个示例HTTP响应正文显示:
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}
Run Code Online (Sandbox Code Playgroud)
这似乎表明access_token可以是不透明的ASCII文本,例如编码的JSON Web令牌(JWT)
从我的角度来看,似乎JWT-as-access_token具有一些理想的属性:
它是一个已知的规范,具有相当广泛的采用和许多语言的客户端库.
它允许使用经过审查的加密库轻松签名和验证.
因为它可以解码为JSON,所以它允许我们在令牌本身中包含有关令牌的元数据和信息.
我的问题是:首先,允许访问令牌是JWT吗?其次,如果根据规范是允许的,那么使用JWT作为访问令牌会有什么额外的考虑因素吗?
当使用谷歌的OpenIDConnect认证系统,它可以指定email或profile或两者的scope参数.如果您请求email范围,则"email"和"email_verified"声明将包含在id_token作为成功OAuth2身份验证会话的一部分返回的声明中.
ID令牌的有效负载
ID令牌是包含一组名称/值对的JSON对象.这是一个示例,格式化为可读性:
{"iss":"accounts.google.com",
"at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified":"true",
"sub":"10769150350006150715113082367",
"azp":"1234987819200.apps.googleusercontent.com",
"email":"jsmith@example.com",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926,
"hd":"example.com"
}
Run Code Online (Sandbox Code Playgroud)
但是,请求profile范围似乎对id_token的内容没有任何影响.为了检索配置文件信息,您必须向不同的端点发出单独的HTTP请求(使用您刚刚收到的access_token进行身份验证)以获取看起来非常相似但具有更多信息的文档:
{
"kind": "plus#personOpenIdConnect",
"gender": string,
"sub": string,
"name": string,
"given_name": string,
"family_name": string,
"profile": string,
"picture": string,
"email": string,
"email_verified": "true",
"locale": string,
"hd": string
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我更愿意获取nameid_token JWT中包含的配置文件信息(只是,实际上),而不是必须单独调用.有没有办法指定其他字段并将它们作为声明包含在id_token中?如果没有,为什么要email特别处理并返回id_token?
正如您在图像中看到的那样,每个框都有不同的高度,并且有一些双倍宽度的框.

是否可以仅使用CSS创建砖石风格的布局?
有谁能帮我理解这里发生了什么?
import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"
Run Code Online (Sandbox Code Playgroud)
我的理解是localize()pytz时区对象上的方法将采用一个天真的日期时间对象,并添加一个tzinfo匹配执行本地化的时区对象的属性.在这种情况下似乎没有发生这种情况.
显然,我对时区或者pytz处理时区的方式有些误解.谁能解释一下?
RFC6749和RFC6750似乎彼此不同意 OAuth2 访问令牌中允许使用哪些字符。
RFC6749(原始 OAuth2 规范)的A.12 节定义了访问令牌格式如下:
A.12. “access_token”语法
“access_token”元素在第 4.2.2 和 5.1 节中定义:
Run Code Online (Sandbox Code Playgroud)access-token = 1*VSCHAR
在ABNF 格式中,VSCHAR 表示:
VSCHAR = %x20-7E
(这基本上是所有可打印的 ASCII 字符)
但是,在 RFC6750(处理 OAuth2 不记名令牌的使用)中,第 2.1 节似乎为访问令牌设置了更严格的允许字符子集。
承载凭证的语法如下:
Run Code Online (Sandbox Code Playgroud)b64token = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"=" credentials = "Bearer" 1*SP b64token
所以这是一组限制性更强的字符,仅包括字母数字、六个特殊字符和=用于填充的尾随。
我的问题是:
1) 控制这些文件中的哪一个?RFC6750 是否优先因为它更具限制性?
2)就“野外”的实际实现而言,访问令牌是否总是仅限于 RFC6750 字符集?
3) …
specifications character special-characters access-token oauth-2.0
在 OpenAPI 中,您可以指定additionalProperties: false为对象架构的一部分,以指示请求或响应正文中额外的未知属性将被视为验证错误。
在为 API 指定查询参数时,有什么方法可以做类似的事情吗?我想指出,包括明确记录之外的其他查询参数的请求将被视为错误并触发 HTTP 400 响应。
我看到您可以将单个参数标记为required: true,但我找不到任何方式说“这些是唯一允许的参数”。OpenAPI 3 规范允许这样做吗?如果是这样,如何?
我有一个csv格式的数据文件.我试图使用基本拆分命令拆分每一行line.split(',')
但是当我得到这样的字符串时"2,,",而不是返回一个数组,因此Array(2,"","")
我得到一个Array: Array(2).我绝对错过了一些基本的东西,有人可以帮助指出在这里拆分逗号分隔字符串的正确方法吗?
对于上下文,我尝试在 M2Crypto 中使用来代替 Python-RSA,但这个问题并不是真正特定于语言或库的。
如果我有 X509 格式的 RSA 公钥(以 ----BEGIN PUBLIC KEY--- 开头),我需要做什么才能将其转换为 PKCS1(以 ----BEGIN RSA PUBLIC KEY--- 开头) -) 格式?
这条线索似乎描述了走向相反的方向。