【问题标题】:Securing spring cloud functions with spring security使用 Spring Security 保护 Spring Cloud 功能
【发布时间】:2019-07-23 12:45:00
【问题描述】:

我需要保护托管在 azure 上的 Spring Cloud 函数公开的其余端点。 我们想使用 spring security 来验证和授权调用,但我无法做到。 相同的代码适用于 springboot 应用程序,但对 spring cloud 功能没有任何影响。

所以把我的问题分解成更小的部分

  1. Spring Cloud 功能是否支持 Spring Security?
  2. 如果是,如何实现。
  3. 如果不是,应该采用什么方法来实现这一目标?

【问题讨论】:

    标签: java security spring-security spring-cloud-function


    【解决方案1】:
    1. 怀疑... Spring Security 是一个相当繁重的机制,它需要一些内存存储(会话、用户凭据等)或与存储解决方案(例如:db)或身份验证服务器的连接。所有这些实现都超出了简单函数的范围。理论上是可行的,但效率极低。
    2. -
    3. 我猜你在这些函数前面有某种 API 网关。一种常见的模式是拦截该网关中的所有调用,对其进行身份验证和授权(调用服务或使用内置的身份验证机制,具体取决于您的要求),然后将它们转发到只能调用的 Spring Cloud 函数从您的网络内部(通过 API 网关)。

    【讨论】:

    • 谢谢 Bogdan,我喜欢您在网关级别进行身份验证和授权的想法,但现在我们没有使用网关。我现在可能必须在我的函数应用程序中执行此操作:(
    【解决方案2】:

    如果你的 api 有一个控制器,你可以使用 spring security 实现 oAuth2,它提供一个令牌来保护你的 url。

    教程: https://dzone.com/articles/securing-rest-services-with-oauth2-in-springboot-1 https://medium.com/google-cloud/understanding-oauth2-and-building-a-basic-authorization-server-of-your-own-a-beginners-guide-cf7451a16f66

    如果您在配置所有类型的客户端时需要帮助,请在下方发表评论,我会尽力为您提供正确的答案。

    【讨论】:

    • 嗨,Goran,谢谢你的帮助,我正在开发 spring cloud 功能,它没有任何注释为 controller ,但它确实以与 springboot 公开控制器相同的方式公开这些功能,这就是为什么我想试试spring security。但我认为两者都有不同的实现方式,因此不能以相同的方式使用。
    • 但是使用 spring security 你只需要 url,而不是控制器,如果你在 WebSecurityConfigurerAdapter 和 ResourceConfigurationAdapter 的配置实现中看到,你必须将路径与存储在 oAuth 令牌中的 clientId 匹配记忆。所以我认为你只需要一个 url,如果你没有,我认为你应该自己做一个算法来创建和存储令牌,没有什么不可能的。
    • 我有网址,但我认为因为它是一个函数应用程序,默认情况下一个或多个函数应用程序没有与 Web 应用程序相同的入口点。因此,当我将 WebSecurityConfigurerAdapter 添加到我的函数应用程序时,它没有做任何事情。请求仍然直接进入我的功能逻辑。如果我可以将 WebSecurityConfigAdaptereven 用于我的功能,那就太好了。
    • 我的错误,它不仅仅是一个url,而是一个甚至应用程序都可以使用的路径(通过requestMapping完成)(所有这些都在服务器端,所以只有api被暴露,安全性甚至不可见到角度或其他前端语言)。我认为如果它在应用程序或 Web 应用程序上的位置不会有所不同,它仅适用于 api 的路径(@RequestMapping(path="your path"))。你知道你需要一个授权服务器、资源服务器、WebServerConfiguration 和一个 oauthController(这只是为了撤销令牌)
    • 在 Spring Cloud 中,我们没有任何经典的控制器/@RequestMapping 之类的东西,我们在 Spring Boot 中比较熟悉。尽管 spring 在封面下使用相同,但开发人员无法访问它。通常,开发人员提供 Function 并且 spring 将它们公开为 rest 端点(使用 cloud-function-web 依赖项)。请看docs.spring.io/spring-cloud-function/docs/3.1.0-M2/reference/…
    猜你喜欢
    • 2022-12-11
    • 2014-07-29
    • 2016-01-12
    • 2014-02-21
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多