如何在JavaScript中验证和解码asp.net Web Api创建的JWT
我一直在关注如何在asp.net Web API应用程序中创建JWT授权 在我的例子中,身份验证服务器将是保存资源的同一个服务器(即所有资源都在一个asp.net Web API应用程序中完成),因此我可以看到,在路由身份验证和授权方面,共享JWT编码中使用的“机密”不是问题 但是,我将有一个移动应用程序(使用Ionic框架),我希望能够验证和解码JWT,以便启用/禁用UI的不同部分。所以我需要用JavaScript来实现这一点 因此,我不希望应用程序能够访问这个用于编码JWT的“秘密”字符串 我的问题是如何在JavaScript中验证和解码asp.net Web Api创建的JWT,javascript,asp.net-web-api2,jwt,Javascript,Asp.net Web Api2,Jwt,我一直在关注如何在asp.net Web API应用程序中创建JWT授权 在我的例子中,身份验证服务器将是保存资源的同一个服务器(即所有资源都在一个asp.net Web API应用程序中完成),因此我可以看到,在路由身份验证和授权方面,共享JWT编码中使用的“机密”不是问题 但是,我将有一个移动应用程序(使用Ionic框架),我希望能够验证和解码JWT,以便启用/禁用UI的不同部分。所以我需要用JavaScript来实现这一点 因此,我不希望应用程序能够访问这个用于编码JWT的“秘密”字符串
提前感谢您的帮助 您可以使用基于非对称加密的RS256等签名算法。这意味着签名令牌需要访问私钥,私钥可以安全地存储在服务器端,验证只需要访问公钥 JSON Web令牌(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对进行签名 (来源:;重点是我的) 正如您所提到的,您对运行在用户设备上的客户端应用程序所做的决策应该仅从用户体验的角度进行,并且所有授权决策仍然应该在服务器端再次进行 最好的类比是Javascript表单验证,它可以在浏览器上完成,以向用户提供即时反馈,但仍然需要在服务器端完成相同或更大的验证,因为攻击者可以轻松绕过客户端验证
此外,您还应考虑:
- 如果客户机应用程序和资源服务器之间的关系非常紧密,那么客户机应用程序对令牌的这种解释是可以接受的,尽管该令牌打算在API中使用。根据您的描述,系统的所有部分都在您的控制之下,因此这看起来很好
- 与基于您提到的共享机密的HS256相比,使用RSA256会带来相关的性能成本。如果这是一个问题,您甚至可以问自己是否真的需要验证令牌客户端;如果你做的所有决定都是纯粹的装饰性的,为什么还要费心验证呢。前提是,试图提供假令牌的人只会看到由于服务器端拒绝令牌而在访问时立即失败的选项或链接