小编bjm*_*jmc的帖子

可以将OAuth 2.0访问令牌作为JWT吗?

据我所知,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作为访问令牌会有什么额外的考虑因素吗?

oauth access-token oauth-2.0 jwt

21
推荐指数
1
解决办法
1万
查看次数

是否可以通过Google的id_token获取个人资料信息?

当使用谷歌的OpenIDConnect认证系统,它可以指定emailprofile或两者的scope参数.如果您请求email范围,则"email"和"email_verified"声明将包含在id_token作为成功OAuth2身份验证会话的一部分返回的声明中.

以下是Google文档中的示例:

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?

google-openid oauth-2.0 openid-connect google-oauth2

14
推荐指数
2
解决办法
4778
查看次数

仅使用CSS进行砌体式布局

正如您在图像中看到的那样,每个框都有不同的高度,并且有一些双倍宽度的框.

布局

是否可以仅使用CSS创建砖石风格的布局?

css html5 css3

12
推荐指数
1
解决办法
4万
查看次数

为什么pytz localize()不会生成一个日期时间对象,其tzinfo与本地化的tz对象匹配?

有谁能帮我理解这里发生了什么?

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处理时区的方式有些误解.谁能解释一下?

python timezone datetime pytz tzinfo

11
推荐指数
1
解决办法
2477
查看次数

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

RFC6749RFC6750似乎彼此不同意 OAuth2 访问令牌中允许使用哪些字符。

RFC6749(原始 OAuth2 规范)的A.12 节定义了访问令牌格式如下:

A.12. “access_token”语法

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

access-token = 1*VSCHAR 
Run Code Online (Sandbox Code Playgroud)

ABNF 格式中,VSCHAR 表示:

VSCHAR = %x20-7E

(这基本上是所有可打印的 ASCII 字符

但是,在 RFC6750(处理 OAuth2 不记名令牌的使用)中,第 2.1 节似乎为访问令牌设置了更严格的允许字符子集。

承载凭证的语法如下:

b64token    = 1*( ALPHA / DIGIT /
                   "-" / "." / "_" / "~" / "+" / "/" ) *"="
credentials = "Bearer" 1*SP b64token
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

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

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

3) …

specifications character special-characters access-token oauth-2.0

9
推荐指数
1
解决办法
8327
查看次数

是否可以在 OpenAPI v3 规范中禁止未知查询参数?

在 OpenAPI 中,您可以指定additionalProperties: false对象架构的一部分,以指示请求或响应正文中额外的未知属性将被视为验证错误。

为 API 指定查询参数时,有什么方法可以做类似的事情吗?我想指出,包括明确记录之外的其他查询参数的请求将被视为错误并触发 HTTP 400 响应。

我看到您可以将单个参数标记为required: true,但我找不到任何方式说“这些是唯一允许的参数”。OpenAPI 3 规范允许这样做吗?如果是这样,如何?

openapi

9
推荐指数
0
解决办法
274
查看次数

在Scala中拆分逗号分隔的字符串:缺少尾随空字符串?

我有一个csv格式的数据文件.我试图使用基本拆分命令拆分每一行line.split(',') 但是当我得到这样的字符串时"2,,",而不是返回一个数组,因此Array(2,"","") 我得到一个Array: Array(2).我绝对错过了一些基本的东西,有人可以帮助指出在这里拆分逗号分隔字符串的正确方法吗?

string split scala

5
推荐指数
1
解决办法
2477
查看次数

如何从 X509 转换为 PKCS1 编码的 RSA 密钥

对于上下文,我尝试在 M2Crypto 中使用来代替 Python-RSA,但这个问题并不是真正特定于语言或库的。

如果我有 X509 格式的 RSA 公钥(以 ----BEGIN PUBLIC KEY--- 开头),我需要做什么才能将其转换为 PKCS1(以 ----BEGIN RSA PUBLIC KEY--- 开头) -) 格式?

这条线索似乎描述了走向相反的方向。

rsa m2crypto x509 pkcs#1

2
推荐指数
1
解决办法
3456
查看次数