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作为access_token具有一些可取的属性:
它是一个已知的规范,被广泛采用,并且在许多语言中提供了客户端库。
使用经过验证的加密库可轻松进行签名和验证。
因为它可以解码为JSON,所以它允许我们将元数据和关于令牌的信息包含在令牌内部。
我的问题是:首先,access token是否可以是JWT?其次,如果按照规范允许,那么是否有任何其他考虑因素会使使用JWT作为access token成为一个坏主意?