【问题标题】:How to protect Angular code with OAuth2 with an external IdentityServer如何使用带有外部 IdentityServer 的 OAuth2 保护 Angular 代码
【发布时间】:2021-08-03 05:55:00
【问题描述】:

场景: 从 API 获取消息 Hello World 的简单 Hello World Angular 应用。

我们不想暴露 Angular 应用的代码,因此我们需要在发布代码之前验证访问令牌,并且我们希望相同的访问令牌能够访问 API。

在我的脑海中,我认为这不应该由应用层来处理。它应该由网络服务器处理,但似乎 Angular OIDC 设施从未考虑到这一点。

现在我在托管 SPA 的服务器上有一个手工制作的中间件,它拦截所有调用(其中只有一个:获取 Angular 应用程序的调用),并在加载任何内容之前对 IdentityServer 进行 302。如果有令牌,它会设置一个标头,在应用程序中我们手动抓取令牌并将其用于 API 调用。

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

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

【问题讨论】:

  • 不回答您的问题,但您无法保护代码 - 它在客户端上运行和解释 - 用户将能够检查它。您实际上是在询问如何通过密码请求预加载来保护您的整个站点。如果这是一种保守商业秘密的策略,它就行不通了——如果你想让你的代码安全,那就做服务器端处理。
  • @Matt,我不在乎员工是否可以访问该应用程序,就像我关心随机出现的人通过该应用程序并围绕端点和发起攻击一样。我的意思是,如果员工有权访问,他们无论如何都更有可能造成损害。就像我不会将重要的公司机密书留在地铁上一样,但新员工将不得不看到其中的一些机密。

标签: angular openid-connect


【解决方案1】:

根据您设置 Identity Server 的方式,您可以在 IdentityServer 中使用相同的应用程序配置,以便 JavaScript 客户端访问 API,还可以为 Web 服务器配置一个模块,以便在提供之前需要令牌代码。服务器会反弹两次以请求登录凭据,但第二次,对于 JavaScript 客户端,用户将已经拥有该应用程序的令牌,身份服务器将在用户不知情的情况下进行登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2022-07-07
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多