在原型设计API& SDK,我用几个合理的解决方案遇到了这个问题。我正在寻找一些高级架构的帮助。简而言之,可以保证API的一些消费应用程序将要配置自己的身份验证提供程序。
我一直在咀嚼的选项:
这听起来很有希望,直到我意识到在特定用例中,即使我提供的应用程序也不需要知道用户的凭据。
当使用authorization_code授权类型时,这感觉就像经常需要的反转一样令人不舒服。它还需要每个消费应用程序实现任何“默认”授权提供程序。
这可能是一个很好的解决方案,但我不知道如何使用“spring-security-oauth2”方式,或者如果我必须实现一堆我自己的东西。
这似乎是可行的方法,因为它提供了大量的自定义。我担心的是,如何对资源服务器强制执行某种注册表?如果auth服务器是批准使用应用程序的服务器,但我不想让任何消费应用程序实现自己的auth服务器,只是其中一些。否则,不受信任的客户可能最终批准自己了!?
如果这会影响任何指导,我的资源提供程序将需要一个完全虚增的OAuth2Authentication对象(其中包含用户详细信息和客户端详细信息)。
这张图片主要解释了我在说什么,除了我想要多个授权服务器,并希望将它留给消费应用程序来决定指向哪个授权服务器。如何在资源服务器端检查代理请求的授权服务器是批准的授权服务器?
附录:
我看了一下用于此自定义身份验证案例的现有实现,我想我们只是在他们的会话中读取一个令牌,该令牌由他们自己的登录服务设置,并且每次都会建立他们的用户。这种自定义是一个问题,因为我们从提供者方面删除了自定义,而有利于在使用应用程序中处理它们。因此,我正在寻找解决方案,因此消费应用程序可以定义自己的身份验证方式,甚至为用户提供提供应用程序不会持久化(这使我认为它可能需要是一个完整的auth服务器)。
话虽这么说,这似乎是一个潜在的不可持续的倒置模型(恕我直言,提供者应该是用户和授权的维护者,而不是消费应用程序)。所以,我可能会建议更多面向业务的变革。
答案 0 :(得分:0)
我相信我终于想出了一种安全且可维护的方法来解决这个问题。
还有一个问题是如何实现这一点,以尽可能多地利用spring-security-oauth2框架,同时仍然实现此扩展。