问题 会话与基于令牌的身份验证


我想知道哪个更安全,可以实现身份验证?为什么? 基于会话的认证或基于令牌的认证

我知道会话也可以用于其他事情但是现在我只对认证感兴趣。

如果使用令牌(甚至在内存中),是否真的没有任何东西存储在服务器端?如果是,那么它如何识别过期的令牌,因为它也是使用相同的秘密签署的?


4371
2017-10-23 07:00


起源



答案:


基于会话的身份验证

在基于会话的身份验证中,服务器完成所有繁重的服务器端。从广义上讲,客户端使用其凭据进行身份验证并接收session_id(可以存储在cookie中)并将其附加到每个后续传出请求。所以这可以被认为是“令牌”,因为它相当于一组凭证。

然而,这个session_id-String没什么特别之处。它只是一个标识符,服务器会执行其他所有操作。这是有状态的。它将标识符与用户帐户相关联(例如,在存储器中或在数据库中)。它可以将此会话限制或限制为某些操作或特定时间段,并且如果存在安全问题则可以使其无效,更重要的是,它可以动态地执行和更改所有这些操作。

此外,它可以记录用户在网站上的每一个动作。可能的缺点是可扩展性差(特别是在多个服务器场上)和大量内存使用。

基于令牌的身份验证

在基于令牌的身份验证中,没有会话在服务器端(无状态)持久存在。最初的步骤是一样的。凭证与令牌交换,然后附加到每个后续请求(它也可以存储在cookie中)。

然而,为了减少内存使用,简单的扩展能力和总灵活性(令牌可以与另一个客户端交换),发出一个包含所有必要信息的字符串(令牌),在客户端发出的每个请求之后检查该字符串。服务器。

有许多方法可以使用/创建令牌:

  • 使用散列机制,例如HMAC-SHA1

    token = user_id|expiry_date|HMAC(user_id|expiry_date, k)
    

    --id和expiry_id以明文形式发送,并附加结果哈希(k只知道服务器)

  • 对称地加密令牌,例如用AES

    token = AES(user_id|expiry_date, x)
    

    --x表示加密/解密密钥

  • 不对称地加密它,例如与RSA

    token = RSA(user_id|expiry_date, private key)
    

在申请中

生产系统通常比这两种原型更复杂。例如亚马逊在其网站上使用这两种机制。此外,混合可以用于发布令牌,如2所述,并且还将用户会话与其关联以用于用户跟踪或可能的撤销,并且仍然保持经典令牌的客户端灵活性。此外,OAuth 2.0使用短期和特定的承载令牌以及更长寿命的刷新令牌,例如获得持票人代币。

资料来源:


13
2017-10-23 07:21



最后一个链接应该是vs-token而不是vstoken - Dr.Haribo


答案:


基于会话的身份验证

在基于会话的身份验证中,服务器完成所有繁重的服务器端。从广义上讲,客户端使用其凭据进行身份验证并接收session_id(可以存储在cookie中)并将其附加到每个后续传出请求。所以这可以被认为是“令牌”,因为它相当于一组凭证。

然而,这个session_id-String没什么特别之处。它只是一个标识符,服务器会执行其他所有操作。这是有状态的。它将标识符与用户帐户相关联(例如,在存储器中或在数据库中)。它可以将此会话限制或限制为某些操作或特定时间段,并且如果存在安全问题则可以使其无效,更重要的是,它可以动态地执行和更改所有这些操作。

此外,它可以记录用户在网站上的每一个动作。可能的缺点是可扩展性差(特别是在多个服务器场上)和大量内存使用。

基于令牌的身份验证

在基于令牌的身份验证中,没有会话在服务器端(无状态)持久存在。最初的步骤是一样的。凭证与令牌交换,然后附加到每个后续请求(它也可以存储在cookie中)。

然而,为了减少内存使用,简单的扩展能力和总灵活性(令牌可以与另一个客户端交换),发出一个包含所有必要信息的字符串(令牌),在客户端发出的每个请求之后检查该字符串。服务器。

有许多方法可以使用/创建令牌:

  • 使用散列机制,例如HMAC-SHA1

    token = user_id|expiry_date|HMAC(user_id|expiry_date, k)
    

    --id和expiry_id以明文形式发送,并附加结果哈希(k只知道服务器)

  • 对称地加密令牌,例如用AES

    token = AES(user_id|expiry_date, x)
    

    --x表示加密/解密密钥

  • 不对称地加密它,例如与RSA

    token = RSA(user_id|expiry_date, private key)
    

在申请中

生产系统通常比这两种原型更复杂。例如亚马逊在其网站上使用这两种机制。此外,混合可以用于发布令牌,如2所述,并且还将用户会话与其关联以用于用户跟踪或可能的撤销,并且仍然保持经典令牌的客户端灵活性。此外,OAuth 2.0使用短期和特定的承载令牌以及更长寿命的刷新令牌,例如获得持票人代币。

资料来源:


13
2017-10-23 07:21



最后一个链接应该是vs-token而不是vstoken - Dr.Haribo