【发布时间】:2015-06-24 23:43:21
【问题描述】:
据我所知,the OAuth 2.0 specification 对access token 应该采用什么形式非常含糊:
令牌可以表示用于检索授权的标识符 信息或可以以可验证的方式自包含授权信息(即,由一些数据和签名组成的令牌字符串)。为了让客户端使用令牌,可能需要额外的身份验证凭据,这些凭据超出了本规范的范围。
访问令牌提供了一个抽象层,用资源服务器可以理解的单个令牌替换不同的授权结构(例如,用户名和密码)。这种抽象使得颁发访问令牌比用于获取它们的授权授予更严格,并且消除了资源服务器对了解各种身份验证方法的需要。
访问令牌可以具有不同的格式、结构和使用方法(例如,加密属性),具体取决于资源服务器的安全要求。 访问令牌属性和用于访问受保护资源的方法超出了本规范的范围,由 RFC6750 等配套规范定义。
(强调)
链接的 RFC6750 没有提供更多的特殊性。有一个示例 HTTP 响应正文显示:
{
"access_token":"mF_9.B5f-4.1JqM",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}
这似乎表明 access_token 可以是不透明的 ASCII 文本,例如编码的JSON Web Token (JWT)
在我看来,JWT-as-access_token 似乎有一些理想的属性:
-
这是一个众所周知的规范,被广泛采用,并且客户端库支持多种语言。
-
它允许使用经过审查的加密库轻松进行签名和验证。
-
因为它可以解码为 JSON,它允许我们在令牌本身中包含有关令牌的元数据和信息。
我的问题是:首先,访问令牌是否可以是 JWT?其次,如果规范允许,是否有任何其他考虑因素会使使用 JWT 作为访问令牌成为一个坏主意?
【问题讨论】:
标签: oauth oauth-2.0 access-token jwt