我有一个网站想要与OAuth2 / OpenID集成。首先要做的是设置一个身份提供程序,它将发出访问令牌。
该网站将有多个SpringBoot应用程序,但是在基本情况下,我将有一个应用程序提供静态文件,而另一个应用程序提供REST API。我们可以轻松设置带有注释@EnableOAuth2Sso
的OAuth2客户端,以使用Authorization Code Flow协商身份验证。它将保护对静态文件的访问(这是一项要求),并将为以下请求提供访问令牌。
静态文件是单页应用程序,它将向API发出请求。该API可以使用注释@EnableResourceServer
轻松创建,并将在其他SpringBoot上下文中运行。它甚至可以在不同的域中(为此我们将需要CORS),但是这里的要点是不共享Spring会话。
我们需要以某种方式使用先前收到的访问令牌向API发出请求。我们可以使用Cookie将其发送到浏览器,SPA会使用该信息填充Authorization
标头。
即使这是安全的,我也不知道!除此之外,主要缺点是当访问令牌过期时,它将不会被更新,并且将无法访问API。
替代方法是在SPA中实现隐式流。但是这里我们无法保护静态文件,因为它需要访问它们才能执行身份验证。并且由于当前的实现,最好将身份验证详细信息保留在服务器端。