当前位置: 首页 > 知识库问答 >
问题:

Spring Security-使用授权标头进行身份验证

霍书
2023-03-14

我正在尝试使用Sprint安全框架在Spring Boot中为我的HTTP请求设置授权。我是Spring Security的新手,我找不到任何关于我的情况的文档。

我知道我们必须重写WebSecurity配置适配器方法-configure(AuthenticationManagerBuilder)

这是我试图建立的流程。我的前端和后端托管在不同的域中,所以我也在寻找跨来源的授权。通过发布到REST API登录,[单独针对这个API,应该没有授权]

https://atlan.co/login - POST
{
'user_name': 'mani',
'password': 'mani'
}

/login REST Controller 接收用户名和密码,LDAP 身份验证在身份验证成功后创建令牌并存储在内存中 DB [Redis Preferably] 中,用户名user_email映射到令牌。并向浏览器发送登录成功消息,其中包含“设置授权 Cookie - 令牌”。

之后,来自浏览器的每个请求都将伴随着带有令牌值的授权头。

以上部分,我能够解决它。当请求传入时,我想设置Spring Security,以便它将读取授权标头并获取用户名,如果令牌存在,则从Redis获取用户电子邮件,将用户名,用户电子邮件传递给控制器以及控制器的通常流程。如果令牌不存在,则应以 JSON 格式抛出 401 未授权 HTTP 错误以及自定义消息。

我试着阅读Stackoverflow, Spring留档中的问题,但我无法解决。如果有人能阐明这一点,那将是非常有帮助的。

共有1个答案

齐博厚
2023-03-14

您需要添加自定义Spring过滤器来处理您的授权标头

public class YourAuthenticationFilter extends OncePerRequestFilter
{

  @Override
  protected void doFilterInternal(HttpServletRequest request,
    HttpServletResponse response, FilterChain filterChain)
    throws ServletException, IOException
  {

    String xAuth = request.getHeader("Authorization");//here is your token value
    //Place here your redis checks, get Authentication and so on
    SecurityContextHolder.getContext().setAuthentication(auth);

    filterChain.doFilter(request, response);
  }

}

安全配置中:

@Override
protected void configure(HttpSecurity http) throws Exception
{
  http
    //...
    .addFilterBefore(new YourAuthenticationFilter(), BasicAuthenticationFilter.class)
    //...
}
 类似资料:
  • 我有一个移动(本机)和Web应用程序(SPA),它与后端微服务(在核心2.0中开发)对话,以进行身份验证/授权和其他与域相关的功能,该功能已使用Opendi的配置。这两个应用程序都获得了访问令牌。我遇到的问题是,所有微服务都应该接受无记名访问令牌和登录用户的身份验证/授权(中央身份验证服务),在身份验证微服务中生成的访问令牌(开放身份验证2.*)。那么,我在微服务中缺少哪些更改,其中REST AP

  • 问题内容: 我正在尝试从我的API中发布数据,但无法通过基本身份验证。 我尝试: 我的服务器配置响应是: 我得到的标题是: 请求标题 响应头 我猜服务器配置不错,因为我可以从 高级REST客户端 (Chrome扩展程序)访问API 有什么建议? PD:我从Advanced REST客户端获得的标头是: 和 发送OPTION方法 问题答案: 您可以将用户名和密码作为URL的一部分: 看到这个URL,

  • 使用 的请求可用于身份验证吗? 或者 我们应该使用另一种方法来验证客户端并颁发令牌,然后像OAuth2一样将令牌用作不记名令牌吗?为什么流行的Web服务(例如Github、AWS、Google…)使用其他方法(如AWS所做的:)来验证客户端。问题的重点是:以下流程中是否存在任何可值或违反标准的行为。 我想使用以下流程: :类似于Twitter客户端。 :类似于Twitter API。 < li >

  • 在我使用RESTful webservices的Spring Boot应用程序中,我将Spring Security与Spring Social和一起配置了。 现在我有两种身份验证/授权方式--通过用户名/密码和通过社交网络,比如Twitter。 为了通过Spring MVC REST控制器中自己的RESTfulendpoint实现身份验证/授权,我添加了以下方法: 但我不确定在成功调用endpo

  • 问题内容: 这是一个具有登录屏幕的现有系统,现在我将某些服务公开为REST服务。我为此Rest(jersey)服务构建了一个身份验证令牌登录系统。用户发送用户名密码,然后服务器返回计算为的令牌; 用户将使用此令牌登录应用程序以获取进一步的请求。并且服务器将令牌的副本与时间戳和用户ID一起保留在数据库中,如果时间戳有效,则登录该用户。 考虑使用 HTTPS ,有几个问题; 我的设计看起来一切正常吗?

  • OAuth术语已经困扰我很久了。OAuth授权是像一些人建议的那样,还是认证? 如果我错了,请纠正我,但我一直认为授权是允许某人访问某个资源的行为,而OAuth似乎没有任何实际允许用户访问给定资源的实现。OAuth实现所讨论的都是为用户提供一个令牌(签名的,有时是加密的)。然后,每次调用都会将该令牌传递到后端服务endpoint,在后端服务endpoint上检查该令牌的有效性,这也不是OAuth的