C# 使用单个身份验证层验证多个WebAPI

C# 使用单个身份验证层验证多个WebAPI,c#,asp.net,authentication,asp.net-web-api,asp.net-web-api2,C#,Asp.net,Authentication,Asp.net Web Api,Asp.net Web Api2,我一直在努力解决如何简化我们当前/未来WebAPI的WebAPI/身份验证。我是新手,但我会尽我所能解释清楚的。我们从一个WebAPI开始,并通过设置来处理身份验证等。然后我们又设置了一个,很快就到30了 这里的问题很明显——对于每一个新的WebAPI,我们都必须插入另一个MS身份授权层。在某些情况下,仅仅拥有一个庞大的WebAPI是可行的,但在这种情况下,这些都是完全独立的产品(加上它糟糕的设计) 所以我们想拍摄这样的作品: 但我很难弄清楚每个WebAPI如何获取用户信息,以便检查角色等

我一直在努力解决如何简化我们当前/未来WebAPI的WebAPI/身份验证。我是新手,但我会尽我所能解释清楚的。我们从一个WebAPI开始,并通过设置来处理身份验证等。然后我们又设置了一个,很快就到30了

这里的问题很明显——对于每一个新的WebAPI,我们都必须插入另一个MS身份授权层。在某些情况下,仅仅拥有一个庞大的WebAPI是可行的,但在这种情况下,这些都是完全独立的产品(加上它糟糕的设计)

所以我们想拍摄这样的作品:

但我很难弄清楚每个WebAPI如何获取用户信息,以便检查角色等

我读过很多关于WebAPI身份验证的文章,比如:但我发现的一切似乎都与保护单个WebAPI有关,我们已经知道如何做到这一点。感觉我们需要的是WebAPI的SSO方法。似乎我们需要一些外部身份验证方法(如Facebook、Twitter等),但使用我们自己的后端数据库——我只是不知道正确的术语

因此,我向专家寻求帮助,让我朝着正确的方向前进:

  • 每个WebAPI都有自己的身份验证/授权层,每个层都指向同一个DB,这是一种常见的做法吗
  • WebAPI/Identity中内置了单身份验证层概念,还是我必须从头开始
  • 这是我们应该使用的吗
我可以在幕后一起破解,但我觉得有一个明显的答案,我错过了

是否有一种内置方法可以在每个WebAPI和身份验证API之间建立“信任”,以执行以下操作:

这是我们目前的方向:

如果我能在正确的方向上得到一个全面的推动,我会很高兴。我只是不想重新发明轮子

哦,在我忘记之前,我们正在IIS上使用asp.net 4.5、WebAPI 2、Identity 2


谢谢你的指点。

不要给出过于简单的答案,但你不能围绕其他API构建一个API作为fasad吗。顶级API处理所有授权,然后将调用转发给其他API。我不是一个架构师,但我会这么做。

您正在寻找的是用于您自己的web API的联合身份,这是一个旨在解决的问题。这可能是最好的起点

是的,你说得对。这种方法是我们在上面提到的“一体式WebAPI”中所考虑的,但是Facade必须了解每个WebAPI中的每个方法。如果我们想要建立一个只有少量webapi设置的极简主义服务器,那么就需要修改代码。我希望这是有道理的,但我确实要感谢你提出这一点,因为我在最初的发言中不是很清楚另一件我可能还不清楚的事情是,每个WebAPI目前包含数百个端点,因此为所有端点设置一个门面将是一项相当艰巨的任务(除非我错过了这条船),并且随着我们添加新的API,情况会更糟。除非有办法让他们盲目地通过?[叹气]不确定。但在这一点上,它实际上倾向于一个身份验证过滤器——它不在乎你要求什么,它只是做它的工作,并将请求传递到下一行。谢谢你,威尔!是的,我今天也读到了这方面的内容,但我在上面的请求中没有提到。我退后了,因为我读到其他人的评论说你不想那样做。然而,根据你的SO分数和推荐,听起来我需要自己研究一下。那是我今晚的家庭作业!谢谢Russ@PRB-不用担心。联邦身份、基于声明的身份、WS-Federation、SAML、STS等都可以作为一个思维领域来导航。我已经看到IdentityServer成功地用于向许多web API提供基于声明的标识。我不会称自己为安全专家,因此只能推荐您进行研究并得出自己的结论。我还建议下载基于身份和访问控制的声明PDF-