如何使用带有外部 IdentityServer 的 OAuth2 保护 Angular 代码

How to protect Angular code with OAuth2 with an external IdentityServer

场景: 简单的 Hello World Angular 应用程序,它从 API.

获取消息 Hello World

我们不想公开 Angular 应用程序的代码,因此我们需要在发布代码之前验证访问令牌,我们希望相同的访问令牌能够访问 API.

在我看来,这不应该由应用层来处理。它应该由网络服务器处理,但似乎 Angular OIDC 设施从未考虑过这一点。

现在我在托管 SPA 的服务器上有一个 hand-crafted 中间件,它拦截所有调用(其中只有一个:获取 Angular 应用程序的调用)和 302s在任何东西可以加载之前到 IdentityServer。如果有令牌,它会设置 header,在应用程序中,我们手动获取令牌并将其用于 API 调用。

有很多事情我没有用这种方法弄清楚。就像令牌过期会发生什么?我应该使用 oidc-client;正确的?但我不会用它来获取令牌,因为令牌已经存在,我想使用该令牌。

这个结论不是我自己得出的;任何一个。 NGINX 确实有处理 OAuth2 的插件,因此无法访问代码。但是拿到申请后我做的事情让我有点困惑。

根据您设置 Identity Server 的方式,您可以在 IdentityServer 中为 JavaScript 客户端使用相同的应用程序配置来访问 API 以配置模块Web 服务器在提供代码之前需要令牌。服务器将反弹两次要求登录凭据,但第二次,对于 JavaScript 客户端,用户将已经使用 IdentityServer 获得该应用程序的令牌,并且登录将在用户不知情的情况下发生。