Jwt + Spring 拦截器 + 自定义注解与 Spring 安全
Jwt + Spring Interceptor + Custom Annotation versus Spring Security
目前,我们有一个 spring 引导 REST 应用程序连接到 mysql 数据库,其中我们有一个 table 名为“用户”的多个字段。其中,“email”字段和“password”字段存储为sha256(email + plain_password).
我们还有一个名为“login”的端点,它接收 2 个字符串:电子邮件和密码。如果存在具有此类电子邮件的用户,我们将继续计算 sha256(email + plain_password),然后与数据库中的用户进行比较。如果字符串相等,则验证身份并发出签名的“令牌”(带有过期时间和更多用户相关数据)并返回给客户端。
现在,每次我们需要“保护”任何端点时,我们都会在 http 调用的请求 header 中请求一个“令牌”。拦截器为每个调用读取每个 header,如果其中一个 header 是颁发的“令牌”,我们会验证签名、到期时间和颁发者的姓名。
“安全”端点还有一个自定义注释,指示允许哪个角色调用它。因此,如果拦截器验证令牌并且令牌属于具有注释角色的用户,那么我们将继续端点的正常流程。否则,我们抛出 UnauthorizedException。
问题:Spring Security 是否提供“开箱即用”的令牌生成/验证机制,如上文所述?
您已经为身份验证和授权实施了自定义安全模型。如果其他人要查看您的代码,他们最终将能够弄清楚,但他们会有很多问题。 Spring 基于安全的实现更容易理解和扩展。 Spring 安全性也提供测试支持。
如果您要切换到基于 oauth 的身份验证模型,则必须自己完成。 Spring 安全将使这种转变变得更快。
目前,我们有一个 spring 引导 REST 应用程序连接到 mysql 数据库,其中我们有一个 table 名为“用户”的多个字段。其中,“email”字段和“password”字段存储为sha256(email + plain_password).
我们还有一个名为“login”的端点,它接收 2 个字符串:电子邮件和密码。如果存在具有此类电子邮件的用户,我们将继续计算 sha256(email + plain_password),然后与数据库中的用户进行比较。如果字符串相等,则验证身份并发出签名的“令牌”(带有过期时间和更多用户相关数据)并返回给客户端。
现在,每次我们需要“保护”任何端点时,我们都会在 http 调用的请求 header 中请求一个“令牌”。拦截器为每个调用读取每个 header,如果其中一个 header 是颁发的“令牌”,我们会验证签名、到期时间和颁发者的姓名。
“安全”端点还有一个自定义注释,指示允许哪个角色调用它。因此,如果拦截器验证令牌并且令牌属于具有注释角色的用户,那么我们将继续端点的正常流程。否则,我们抛出 UnauthorizedException。
问题:Spring Security 是否提供“开箱即用”的令牌生成/验证机制,如上文所述?
您已经为身份验证和授权实施了自定义安全模型。如果其他人要查看您的代码,他们最终将能够弄清楚,但他们会有很多问题。 Spring 基于安全的实现更容易理解和扩展。 Spring 安全性也提供测试支持。
如果您要切换到基于 oauth 的身份验证模型,则必须自己完成。 Spring 安全将使这种转变变得更快。