认证令牌
建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现。 注册 ,再也不会建立auth了!
2016年5月12日更新:构建Java应用程序? JJWT是由我们自己的Les Hazlewood开发的Java库,提供端到端JWT的创建和验证。 JJWT永久免费且开源(Apache许可证,版本2.0),易于使用和理解。 它的设计采用了以构建者为中心的流畅界面,从而掩盖了其大部分复杂性。 我们希望您能尝试一下 ,并告诉我们您的想法! (而且,如果您是Node开发人员,请查看NJWT !)
在我的上一篇文章中 ,我们涵盖了很多基础,包括我们传统上如何保护网站安全,使用cookie和会话的一些陷阱以及如何通过传统方式解决这些陷阱。
在本文中,我们将超越传统,深入探讨如何使用JWT(JSON Web令牌)进行令牌身份验证,不仅解决了这些问题,而且还使我们受益于可检查的元数据和强大的加密签名。
救援的令牌认证!
首先让我们检查一下在这种情况下authentication
和token
含义。
身份验证证明用户就是他们所说的真实身份。
令牌是一个独立的信息块。 它可能具有内在价值,也可能没有。 我们将研究一种特定类型的令牌, 它确实具有内在价值,并通过会话ID解决了许多问题。
JSON Web令牌(JWT)
JWT是URL安全,紧凑,自包含的字符串,其中包含有意义的信息,这些信息通常经过数字签名或加密。 它们正Swift成为网络上令牌实施的实际标准。
URL安全是一种说法,它表示整个字符串都已编码,因此没有特殊字符,并且令牌可以放入URL中。
该字符串是不透明的,可以与使用会话ID几乎相同的方式独立使用。 不透明是指查看字符串本身没有提供任何其他信息。
但是,还可以对字符串进行解码以提取元数据,并且可以对签名进行加密验证,以使您的应用程序知道令牌未被篡改。
JWT和OAuth2访问令牌
许多OAuth2实现都将JWT用于其访问令牌。 应该指出,OAuth2和JWT规范是彼此完全独立的,彼此之间没有任何依赖关系。 将JWT用作OAuth2的令牌机制会带来很多好处,我们将在下面看到。
JWT可以存储在cookie中,但是我们之前讨论的cookie的所有规则仍然适用。 您可以将会话ID完全替换为JWT。 然后,您可以获得直接从该会话ID访问元信息的其他好处。
在野外,它们看起来就像是另一个丑陋的弦:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9.43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs
如果仔细看,您会看到字符串中有两个句点。 这些意义重大,因为它们界定了JWT的不同部分。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9
.
43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs
JWT结构
JWT具有三部分结构,每个部分都是base64编码的:
以下是解码的部分: </