【发布时间】:2022-02-02 22:16:28
【问题描述】:
我有一个 Spring Boot 2 应用程序,它使用 OAuth2,并将其不记名令牌中继到它调用的所有 REST 服务。在这些服务中,有一个不使用 Spring 的遗留 Java 6 webapp。我想知道是否可以在知道 OAuth2 服务器的公钥的情况下验证这个遗留应用程序中的不记名令牌。
【问题讨论】:
我有一个 Spring Boot 2 应用程序,它使用 OAuth2,并将其不记名令牌中继到它调用的所有 REST 服务。在这些服务中,有一个不使用 Spring 的遗留 Java 6 webapp。我想知道是否可以在知道 OAuth2 服务器的公钥的情况下验证这个遗留应用程序中的不记名令牌。
【问题讨论】:
OAuth 2 是一个标准,它不是 Spring Boot 特定的实现,所以我不明白为什么你不能验证令牌。如果它是 JWT,您可以使用 vanilla Java 库来处理 JWT,并在您的遗留应用程序中使用它。例如。看看这个过滤器实现:https://github.com/curityio/oauth-filter-for-java 它没有使用 Spring,它验证 JWT。
您可能会遇到的一个问题是旧版应用程序是否支持您的 OAuth 服务器可能使用的所有签名验证算法。例如,我不确定 Java 6 是否支持椭圆曲线算法进行签名验证,但这是您需要调查的问题。
如果 Java 版本无法正确验证 JWT,或者如果您的授权服务器发出不透明的令牌,那么您可能需要调用授权服务器的 introspection endpoint,以验证令牌并获取索赔。这甚至可能更简单,因为它只需要从旧版应用程序到授权服务器的 http 调用。
【讨论】: