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

Spring Security性:外部身份验证和内部身份验证

皮嘉德
2023-03-14

我有一个REST服务,它依赖于外部系统来验证令牌,但需要自己进行授权(使用like@Secured进行API级访问)。

要求:

  1. UI使用外部系统生成令牌

一种可能的解决方案是使用过滤器:

>

  • UI使用外部系统生成令牌
  • UI使用令牌对我的服务进行REST调用
  • 我的服务有一个过滤器,它使用令牌调用外部系统
  • 有效令牌的外部系统发回用户详细信息
  • 我对成功呼叫集的服务与SecurityContextHolder类似

    SecurityContextHolder。getContext()。setAuthentication(新的AuthorizedUser(“test”,Arrays.asList)(新的SimpleGrantedAuthority(“test_角色”),“test”,null));

    有没有其他方法可以做到这一点?

  • 共有1个答案

    张岳
    2023-03-14

    如果您正在寻找关于您的体系结构的建议,那么您可以通过更改第一步和其他步骤来节省对“外部系统”的额外调用:

    >

    1.1. 外部系统将用户详细信息保存在一些内存键值数据库(如Redis)中。

    ...

    如果您想保护“外部系统”不被来自您的过滤器的多个调用垃圾邮件,这是有意义的。

    如果要查找实现提示,请调用SecurityContextHolder。getContext()。setAuthentication()当您的代码验证了身份验证并完成了授权时,我觉得没问题。

    也许使用@javax更好。注释。安全RolesAllowed而不是@Secured(工作方式相同,但名称更为明显)。

    有时你可能喜欢使用org。springframework。http。客户ClientHttpRequestInterceptor而不是过滤器,请参见示例:Spring MVC中拦截器和过滤器之间的差异

     类似资料:
    • 任何人都可以帮助我理解如何代表用户对服务器应用程序的交换服务器进行身份验证?我的用例是同步用户邮箱的邮件,并与我们的服务器更新已读状态和已删除状态。Exchange Online有rest API和Oauth进行身份验证,但不适用于On Premise帐户?是否有一种方法可以对所有不同的部署进行身份验证[在线和内部交换]并访问Outlook邮件? 我们需要一种方法来验证用户,而不需要尝试获取任何凭

    • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

    • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

    • 问题内容: 确保GWT + Tomcat应用程序执行身份验证和授权的最佳策略是什么? 问题答案: 有两种基本策略: 确保入口点; 保护远程服务。 最简单的方法是使用常规的Web应用程序安全工具来限制对GWT生成的html / js文件的访问: 春季安全; web.xml约束。 这样可以让您拥有eg 和。 保护远程服务 如果上述解决方案还不够,您可以进行更深入的研究。我已经通过Spring Secu

    • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答

    • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容: