JWT 身份验证
JSON Web Token (JWT) 是一个开放标准,用于在双方之间以 JavaScript Object Notation (JSON) 对象的形式进行信息安全传输。
JWT 验证服务凭据是否为真,并让服务代表任一用户操作,绕过用户凭据验证。因为 JWT 支持 single sign-on (SSO)(单点登录,SSO),最大程度减少了用户必须登录至云应用程序和网站的次数。
JWT 结构
JWT 包括三个部分:标头、有效载荷和签名。
标头
标头通常包括两个部分:类型 (typ) 和算法 (alg)。算法用于生成签名。
示例:
{
"typ": "JWT",
"alg": "RS256"
}
RS256 指示具有 SHA256 的 RS256 - RSA 签名用于签署该令牌。
有效载荷
有效载荷是一种 JSON 对象,包括您想提出的要求。要求是有关实体(通常是用户)和其他元数据的语句。您必须已定义电子邮件属性,或已定义域以及名称属性。
示例:
{
"email":"jde@company.com",
"exp": 1472034208
}
示例:
{
"name":"jde",
"domain":"company",
"exp": 1472034208
}
签名
签名用于验证 JWT 发件人的身份并确保消息没有被篡改。签名是编码的标头和有效载荷,通过密钥签署。在一般情况下,使用 X.509 证书来生成和验证签名。
身份验证通过验证签名来执行。如果签名有效,则会授予访问权限。
支持的签名算法
在 Qlik NPrinting 中支持以下签名:
-
带 SHA256 的 RS256 - RSA 签名
-
带 SHA384 的 RS384 - RSA 签名
-
带 SHA512 的 RS512 - RSA 签名
示例:通过已签署的 JWT 访问 Qlik NPrinting
下面的示例示出了使用已签署的 JWT 获取访问权限所涉及的步骤。
-
生成了 JWT,其中包括一组要求,并且通过已配置证书的私钥签署。
-
请求已发送至代理,在 HTTP 授权标头中包括已签署的 JWT。
-
代理注入配置的属性映射并将调用转发至后端服务。
-
客户端将收到会话并且后续的调用无需包括 JWT。
- 如果调用包括 JWT,将进行验证,并且如果其无效,将拒绝用户访问。
-
如果 JWT 中的用户不同于为会话存储的用户,用户将获得新会话。
标准字段
JWT 要求中的以下字段由 Qlik NPrinting 使用:
- 到期时间 (exp):确定 JWT 不再被接受的到期时间。
- 不早于 (nbf):确定接受 JWT 的起始时间。
限制
存在以下限制:
-
不支持加密的 JWT。
-
仅支持以下签名算法:
-
带 SHA256 的 RS256 - RSA 签名
-
带 SHA384 的 RS384 - RSA 签名
-
带 SHA512 的 RS512 - RSA 签名
-