我认为jwt.io不能很好地解释为什么或何时使用jwt.它解释了可以考虑的其他事情,但决定是否使用它或者为什么它会派上用场并不重要.
我想为什么要使用JSON Web令牌?
身份验证: 将会话存储在服务之外并从无状态专业人员中获益(例如:升级)非常有用.
因此,JWT将不会实现远程会话解决方案,这将需要例如memcached基础架构,令牌管理器软件模块来创建,更新,使令牌无效.但它的缺点是会话信息将在客户端中暴露出来.
信息交换:共享您的秘密(或公钥),以便允许发件人签署令牌.为什么不使用https这个或证书?
什么时候应该使用JSON Web令牌?
身份验证:这是使用JWT的最常见方案.一旦用户登录,每个后续请求将包括JWT,允许用户访问该令牌允许的路由,服务和资源.Single Sign On是一种现在广泛使用JWT的功能,因为它的开销很小,并且能够在不同的域中轻松使用.
信息交换:JSON Web令牌是在各方之间安全传输信息的好方法.因为JWT可以签名 - 例如,使用公钥/私钥对 - 您可以确定发件人是他们所说的人.此外,由于使用标头和有效负载计算签名,您还可以验证内容是否未被篡改.
JSON Web令牌如何工作?
Jtw-Diagram(某种序列图)

我们为什么要使用JSON Web令牌?
让我们来谈谈JSON Web Tokens(JWT)与Simple Web Tokens(SWT)和Security Assertion Markup Language Tokens(SAML)相比的好处.
由于JSON比XML更简洁,因此在编码时它的大小也更小,使得JWT比SAML更紧凑.这使得JWT成为在HTML和HTTP环境中传递的不错选择.**不是jwt本身属性,它是json属性**
在安全方面,SWT只能使用HMAC算法通过共享密钥对称签名.但是,JWT和SAML令牌可以使用X.509证书形式的公钥/私钥对进行签名.与签名JSON的简单性相比,使用XML数字签名对XML进行签名而不会引入模糊的安全漏洞非常困难.**公钥/私钥对签名不新**
JSON解析器在大多数编程语言中很常见,因为它们直接映射到对象.相反,XML没有自然的文档到对象映射.这使得使用JWT比使用SAML断言更容易.
关于使用,JWT用于互联网规模.这突出了在多个平台(尤其是移动平台)上轻松进行JSON Web令牌的客户端处理.**不解释为何在互联网上使用它(在我看来是因为无状态服务器**
我在服务中引用自动生成的 WCF 客户端。
//Autogenerated Service client
public partial class ServiceClient :
System.ServiceModel.ClientBase<IService>, IService
{
//...
}
//Autogenerated Interface Client
public interface IService {
//...
}
Run Code Online (Sandbox Code Playgroud)
通过以下方式:
public MyService{
public IExternalWsClientFactory ExternalWsClientFactory {get; set; }
public void MyMethod(){
using (var wsCliente = ExternalWsClientFactory.ServiceClient())
{
//...
}
}
}
public class ExternalWsClientFactory : IExternalWsClientFactory
{
public ServiceClient ServiceClient()
{
var wsClient = new ServiceClient();
return wsClient;
}
}
Run Code Online (Sandbox Code Playgroud)
我引用该实现是因为我想使用该using语句在代码块末尾释放资源。而且因为IDisposable是在下面ClientBase而且界面不偏。
我的问题是我想模拟ServiceClient(我已经模拟了External WsClientFactory),但由于我使用了该实现,所以我很难做到这一点。 …