【问题标题】:How to Authorize request from another WebApi project如何授权来自另一个 WebApi 项目的请求
【发布时间】:2019-10-18 15:30:58
【问题描述】:

在不同的服务器上有 2 个 WebApi 项目。其中一台服务器 (WebApi-A) 具有 OAuth2 身份验证工作流设置以及授权服务器和所有服务器。

另一个 WebApi 项目 (WebApi-B) 有一个端点,我想通过 [Authorize] 属性进行身份验证。我不想要一个新的授权服务器,而是利用(WebApi-A 的)身份验证过程来验证令牌。

据我了解,这些服务器上的机器密钥是否相同。我们基本上可以在WebApi-B 中复制来自WebApi-A 的身份验证过程,而根本无需调用WebApi-A

我如何实现这一目标?

【问题讨论】:

  • 澄清一下,你有前端吗?您是否正在寻找 SSO 行为?否则这一切都发生在后端
  • 是否有前端并不重要。调用也可以通过外部 webapi 进行。
  • 需要澄清 Web Api B。这仍然没有设置授权?

标签: c# asp.net-web-api oauth-2.0 asp.net-identity


【解决方案1】:

理论上,您可以通过 JWT 令牌,如果您的 OAuth 设置使用相同的客户端密码和数据存储,它应该可以正常工作。您必须确保在请求时添加 JTW 令牌并使用一些分布式缓存进行验证。

我想问你是否应该创建一个网关来处理和验证请求并将它们委托给单独的 API?这感觉就像身份服务器 (http://docs.identityserver.io/en/latest/topics/apis.html) 可以解决您的问题。除了从 web api A 移动身份验证之外,您所做的任何事情都只是权宜之计。

复制设置可能会起作用,但这意味着您现在必须在两个地方维护它。所以我同意这样做并不理想。

这是一篇可以帮助你的好文章:

https://www.scottbrady91.com/OAuth/Delegation-Patterns-for-OAuth-20

【讨论】:

  • 我尝试执行此操作,但无法使其正常工作。坦率地说,它对 Asp.Net Identity 的抽象太多,如果没有一些领域知识就不可能完成它。 IdentityServer 看起来像是第三方付费服务。
  • 这是一项免费服务,您可以将其添加为 nuget 包。 identityserver.github.io/Documentation/docsv2/overview/…
【解决方案2】:

这将有一个冗长的答案,所以我将只留下这个图表,显示多个资源服务器、客户端和一个单独的授权服务器

取自这篇文章Single sign-on across multiple applications (part II),希望可以帮助您入门。

【讨论】:

    【解决方案3】:

    您可以在登录 web api 时使用您的令牌,然后将令牌添加到标题“授权”中,并带有承载“您的令牌”

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2020-06-01
      • 2018-10-15
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多