我有一个OAuth2服务器,它可以根据我的客户端ID&给我一个访问令牌。秘密。
我有一个微服务,其他服务器可以执行与其工作相应的操作。
但是,我需要授权令牌以确保它具有执行此操作的权限。
服务器是否通常将访问令牌转发到auth服务器并获得包含范围等详细信息的响应?等
答案 0 :(得分:0)
是和否。
对于入口点,您肯定需要通过询问oauth2提供程序来检查访问令牌的范围,但是您可能不希望每当它需要进行范围检查时,每次跟随代码调用提供程序时都会这样做。
在Spring框架中,该授权信息存储在SecurityContext中,同一VM中的任何代码都可以通过调用SecurityContextHolder.getContext()。getAuthentication()来访问它。您可以使用您正在使用的语言和平台实现类似的功能,以便其他人可以通过线程安全的方式共享授权信息。
然而,在微服务世界中,每个微服务都可能有或没有客户端使用的范围。例如,假设有客户端A,调用微服务B的C方法,B的C调用另一个微服务的H的I方法。
取决于方法B.c()和H.i()所需的范围,即使您的代码可以将OAuth2范围传播到以下微服务,客户端A的调用最终可能会导致范围异常不足并失败。 如果你很幸运,那么客户的电话会成功。
我遇到了同样的问题,并且在微服务世界中没有任何关于如何处理OAuth2范围的明确的银弹或最佳实践。我觉得这完全取决于您的服务拓扑结构以及设计方式。